Должен ли внешний ключ появляться у детей детей? - PullRequest
1 голос
/ 17 сентября 2010

У меня есть набор таблиц с детьми детей, вот так:

Клиенты (PK ClientID), которые являются родительскими (один ко многим) для

Свойство (PK PropertyID, FK ClientID), которое является родительским (один ко многим) для

Сведения о свойстве (PK PropDetailID, FK PropertyID) и регистр (PK CaseID, FK PropertyID).

Должны ли внешние ключи для родительских таблиц повторяться дальше? То есть, если мои таблицы выглядят так:

Клиенты (PK ClientID)

Свойство (PK PropertyID, идентификатор клиента FK)

PropertyDetail (PK PropDetailID, FK PropertyID, FK Client ID)

Дело (PK CaseID, FK PropertyID, FK ClientID)

вместо этого? И если ни одна из настроек не нормализована, каков нормализованный способ сделать это?

Ответы [ 3 ]

1 голос
/ 17 сентября 2010

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

В зависимости от значения слова property может случиться так, что вы используете модель значение атрибута сущности (EAV) для хранения свойств клиента. В некоторых ситуациях модель EAV подходит, но в целом вам следует избегать ее. Если возможно, попробуйте вместо этого использовать фиксированную схему.

Дальнейшее чтение:

0 голосов
/ 17 сентября 2010

Нет необходимости повторять внешние ключи дальше - вы можете определить ClientID детали свойства, посмотрев ClientID свойства.

Вся необходимая информация может быть определена с помощью простых объединений.

0 голосов
/ 17 сентября 2010

Вам не нужно иметь оба внешних ключа для PropertyDetail / Case. К ним можно перейти.

...