В Связи "один к одному" я должен отбросить один из идентификационного столбца таблицы?

У меня есть следующие 2 таблицы в MySQL: Клиент (идентификатор, Firstname, Lastname...) Премия (идентификатор, CustomerId, Значение...)

Отношение является Непосредственным, у каждого клиента есть только одна премия. (CustomerId уникален в Бонусной Таблице),

Q: Я должен отбросить столбец Id таблицы Bonus? (Я хочу знать почему или почему не),

5
задан Vlad 16 June 2010 в 09:51
поделиться

3 ответа

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

4
ответ дан 14 December 2019 в 18:59
поделиться

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

Я согласен, что столбец Bonus.Id кажется совершенно излишним.

1
ответ дан 14 December 2019 в 18:59
поделиться

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

(else: да, вы можете отбросить id таблицы bonus-table, customer-id является первичным ключом и "id" совершенно излишен)

0
ответ дан 14 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: