Полезно ли иметь циклическую ссылку в двух таблицах БД - PullRequest
3 голосов
/ 06 декабря 2010

В нашей БД у нас есть две таблицы A, B с первичными ключами A_id и B_id.

Является ли хорошей практикой использование B_id в качестве внешнего ключа в таблице A и A_id в качестве внешнего ключа в таблице B. Это позволило бы нам иметь отношение «многие ко многим» в таблице.

Альтернативой может быть третья таблица мостов, состоящая всего из двух столбцов A_id и B_id.

Какой из них вы считаете хорошей практикой?

Ответы [ 5 ]

7 голосов
/ 06 декабря 2010

Я думаю, что мостовая таблица была бы идеальной для реализации связи многих ко многим между двумя таблицами. И не рекомендуется иметь круговую ссылку между таблицами.

3 голосов
/ 06 декабря 2010

Рассмотрим следующий сценарий

TableA  TableB
A       1
B       2

Если вы хотите сшить это, самое меньшее, что вам нужно сделать без создания третьей таблицы, дублирует каждую строку в одной из двух таблиц.Я сомневаюсь, что вы найдете многих администраторов баз данных, желающих смоделировать свои таблицы таким образом.

TableA
A, 1  
A, 2   
B, 1
B, 2

TableB
1
2   

Третий мостовый стол - действительно ваш единственный хороший вариант здесь.

1 голос
/ 06 декабря 2010

Как упомянул Wizzardz, особенно в отношении СУБД, я бы старался избегать циклических ссылок.

Это может вызвать у вас много проблем. Также, если другие будут работать с этим дизайном, вам придется придумать документацию для него, так как они могут закончить кругами, пытаясь его обработать.

1 голос
/ 06 декабря 2010

Это зависит от отношений между А и В, будь то один к одному, один ко многим или многие ко многим.В целом, однако, циклические ссылки являются плохими просто потому, что они увеличивают объем обслуживания, которое необходимо выполнить, чтобы синхронизировать две таблицы.

0 голосов
/ 06 декабря 2010

То, что вы называете таблицей мостов, является нормализацией зависимости соединения и поддерживается хорошей теорией.Вы не должны записывать один и тот же факт в нескольких местах.

...