Дизайн базы данных: хорошо? не использовать внешний ключ? - PullRequest
1 голос
/ 08 октября 2011

Это нормально, если я не использую внешний ключ, когда я могу его использовать, я просто не использую его?

Например, моя таблица COUNTRY_STATE должна иметь Country.Id в качестве внешнего ключа, но яне сделал этого, вместо этого есть CountryCode.Я получаю штаты для каждой страны по CountryCode.

COUNTRY
-Id (PK)
-Code
-Name

COUNTRY_STATE
-Id (PK)
-Code
-Name
-CountryCode 

Ответы [ 4 ]

4 голосов
/ 08 октября 2011

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

Таким образом, если вы хотите сохранить код страны в таблице country_state, вы можете сделать это и по-прежнему иметь внешний ключ, обеспечивающий использование только действительных кодов страны:

ALTER TABLE country 
  ADD CONSTRAINT uq_code UNIQUE (code);

ALTER TABLE country_state 
    ADD CONSTRAINT fk_state_country 
    FOREIGN KEY (country_code) REFERENCES country (code);
2 голосов
/ 08 октября 2011

Это не нормально, вы нарушаете свойство Ссылочная целостность

0 голосов
/ 09 октября 2011

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

0 голосов
/ 08 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...