Ограничения внешнего ключа в SQL Server - PullRequest
1 голос
/ 16 апреля 2011

У меня есть схема базы данных с версиями строк данных, например, Таблица Person имеет столбцы

id (int, PK)
name (String)
current (Bool)
firstid (int)

Current - 0 для предыдущих данных, 1 для последней записи. Все строки для одного и того же объекта имеют одинаковый FirstID, который указывает на первый ID набора.

Таблица ссылок: Adress по тому же принципу:

id (int, PK)
street (String)
person_id (int)
current (Bool)
firstid (int)

Person_id указывает на patient.firstid. Так что firstid никогда не бывает уникальным, только если current=1

Моя проблема: я хотел бы добавить ссылочную целостность к моим таблицам, но это работает только в том случае, если указанный столбец (patient.firstid) уникален ...

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

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

первый справочный человек (id)

Затем, обратитесь к «базовому человеку» из таблицы адресов

address.person_id указывает на человека (id) - который должен хранить ТОЛЬКО ссылку на первый идентификатор

0 голосов
/ 16 апреля 2011

Ограничение FOREIGN KEY не обязательно должно быть связано только с ограничением PRIMARY KEY в другой таблице;он также может быть определен для ссылки на столбцы ограничения UNIQUE в другой таблице.Ограничение FOREIGN KEY может содержать нулевые значения;однако, если какой-либо столбец составного ограничения FOREIGN KEY содержит нулевые значения, проверка ограничения FOREIGN KEY будет пропущена.

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

ссылка http://msdn.microsoft.com/en-us/library/aa933117(v=sql.80).aspx

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