Подтвердить что ты не робот

Первичный и внешний ключ одновременно

Можно ли в SQL Server 2008 иметь таблицу, созданную с двумя столбцами, которые в то же время являются первичными и внешними ключами? Если да, как выглядит такой код? Я искал и ничего не придумал.

4b9b3361

Ответ 1

Конечно, никаких проблем:

CREATE TABLE dbo.[User]
(
  Id int NOT NULL IDENTITY PRIMARY KEY,
  Name nvarchar(1024) NOT NULL
);

CREATE TABLE [Group] 
(
  Id int NOT NULL IDENTITY PRIMARY KEY,
  Name nvarchar(1024) NOT NULL
);

CREATE TABLE [UserToGroup]
(
  UserId int NOT NULL,
  GroupId int NOT NULL,
  PRIMARY KEY CLUSTERED ( UserId, GroupId ),
  FOREIGN KEY ( UserId ) REFERENCES [User] ( Id ) ON UPDATE  NO ACTION  ON DELETE  CASCADE,
  FOREIGN KEY ( GroupId ) REFERENCES [Group] ( Id ) ON UPDATE  NO ACTION  ON DELETE  CASCADE
);

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

Ответ 2

Это совершенно разные конструкции.

A Основной ключ используется для обеспечения уникальности внутри таблицы и является уникальным идентификатором для определенной записи.

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

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

Если вы хотите иметь внешний ключ, который также является уникальным, вы можете сделать ограничение FK и добавить уникальный индекс/ограничение в это же поле.

В справочных целях SQL Server позволяет FK ссылаться на UNIQUE CONSTRAINT, а также на поле PRIMARY KEY.

Ответ 4

Простое примечание - с страниц Microsoft (http://msdn.microsoft.com/en-us/library/ms189049.aspx)...

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

Не используется часто, но полезно в некоторых случаях.