В отношениях Один-к-одному я должен отбросить один из столбцов идентификатора таблицы? - PullRequest
5 голосов
/ 16 июня 2010

У меня есть следующие 2 таблицы в MySQL: Клиент (Id, Имя, Фамилия ...) Бонус (Id, CustomerId, Значение, ...)

Отношение один к одномуу каждого клиента есть только один бонус. (CustomerId уникален в таблице бонусов)

В: Должен ли я удалить столбец Id таблицы бонусов?(Я хочу знать почему или почему нет)

Ответы [ 3 ]

4 голосов
/ 16 июня 2010

Я бы удалил Bonus.Id coulmn и сделал бы Bonus.CustomerId PK. Это устранит необходимость иметь уникальное ограничение для столбца Bonus.CustomerId, поскольку теперь это будет PK. Любой, кто смотрит на стол, увидит игру один на один более ясно без бонуса. Вам не понадобится индекс Bonus.CustomerId, все, что вам нужно, это индекс PK, поэтому меньше места на диске и кэш-памяти тратится впустую. Кроме того, если вам когда-либо понадобится FK для бонусной таблицы, вам следует использовать значение CustomerId (новый PK), которое можно использовать для возврата к таблицам Customer или Bonus, а не только к Bonus.

1 голос
/ 16 июня 2010

Я предполагаю, что на самом деле это не один-на-один, потому что вы, вероятно, могли бы иметь Клиента без бонусной строки.Ограничения внешнего ключа в стиле SQL всегда являются необязательными для ссылочной стороны любого отношения.

Я согласен, что столбец Bonus.Id представляется полностью избыточным.

0 голосов
/ 16 июня 2010

если он один-на-один, зачем нужна дополнительная таблица? вместо этого вы можете поместить «бонусное значение» в таблицу клиентов.

(иначе: да, вы можете сбросить идентификатор бонусной таблицы, идентификатор клиента является первичным ключом, а идентификатор полностью исключен)

...