主键和外键同时进行

在SQL Server 2008中有可能创建一个由两列同时创建主键和外键的表? 如果是,那么这样的代码将如何? 我搜索了一无所获。


好没问题:

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
);

这通常用于模拟多对多关系。


这些是完全不同的结构。

主键用于强制表内的唯一性,并且是某个记录的唯一标识符。

外键用于引用完整性,以确保另一个表中存在值。

外键需要引用另一个表中的主键。

如果你想拥有一个也是唯一的外键,你可以创建一个FK约束,并为该字段添加一个唯一索引/约束。

为了便于参考,SQL Server允许FK引用UNIQUE CONSTRAINT以及PRIMARY KEY字段。


这可能不是一个好主意,因为你经常想在表中允许重复的外键。 即使你现在没有,将来也可能,最好不要这样做。 请参阅将外键作为主键很好吗?

链接地址: http://www.djcxy.com/p/76303.html

上一篇: Primary and Foreign Key at the same time

下一篇: Best practice for indexing foreign keys on a large table