Как создать две таблицы SQL с ограничениями внешнего ключа друг к другу? - PullRequest
4 голосов
/ 25 марта 2011

У меня есть две таблицы, скажем, Таблица A и Таблица B.

Я хочу, чтобы между A и B было отношение 1- *, поэтому для каждого A есть один конкретный B, и возможнонесколько других Bs.

Итак, у меня есть такие таблицы:

Table A
AKey INT IDENTITY PRIMARY KEY,
PrerequisiteKey INT FOREIGN KEY REFERENCES B(BKey)

Table B
BKey INT IDENTITY PRIMARY KEY,
RelationalAKey INT FOREIGN KEY REFERENCES A(AKey)

Я хочу, чтобы всегда было 1 B для каждого A. Должен ли я попытаться сделать это таким образом (выше) илия должен программно решить, что первая запись в B с ключом A = является "обязательным условием" B?

Я хотел бы иметь возможность хранить этот PrerequisiteKey как отдельное поле, но SQL не позволяетЯ определяю таблицы таким образом, потому что обе таблицы должны существовать до того, как могут быть созданы ограничения.

РЕДАКТИРОВАТЬ: Или добавление первого ограничения после того, как таблицы созданы, ответ?

Ответы [ 3 ]

5 голосов
/ 25 марта 2011

В этих случаях вы обычно создаете таблицы, затем добавляете ограничения.Используйте синтаксис ALTER TABLE, чтобы изменить FK после создания.

ALTER TABLE A 
ADD CONSTRAINT aref FOREIGN KEY PrerequisiteKey  REFERENCES B(BKey);
1 голос
/ 25 марта 2011

Вы можете создать свои 2 таблицы, а затем использовать ALTER TABLE и ADD CONSTRAINT, чтобы создать ограничение.

Ex. :

ALTER TABLE ..
{
    ADD CONSTRAINT ...
}
0 голосов
/ 25 марта 2011

Обычно, когда я хочу применить соотношение 1-1, я решаю, какую таблицу нужно ввести в первую очередь, а затем я использую идентификатор этой таблицы в качестве PK другой таблицы (что обеспечивает уникальность).Затем, конечно, создайте отношения Pk / FK.Если по какой-то причине я не могу использовать его в качестве PK, я помещаю таблицу inteh в поле FK и создаю уникальный индекс.Вы не должны пытаться иметь FK на обеих таблицах (я был бы удивлен, если SQl Server разрешит это в любом случае), или вы не можете вставить ни один из них.

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