主键和外键同时使用

Edu*_*uca 40 sql-server foreign-keys primary-key

在SQL Server 2008中是否可以创建一个包含两列同时为主键和外键的表?如果是的话,这样的代码怎么样?我已经搜索过,什么都没有.

Mar*_*len 56

好没问题:

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
);
Run Code Online (Sandbox Code Playgroud)

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


JNK*_*JNK 9

这些是完全不同的结构.

主键被用来在表中执行的唯一性,并且是用于某些记录的唯一标识符.

一个外键是用于参照完整性,以确保一个值在另一个表存在.

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

如果您想拥有一个唯一的外键,您可以制作一个FK约束并为该相同的字段添加唯一的索引/约束.

出于参考目的,SQL Server允许FK引用UNIQUE CONSTRAINT一个PRIMARY KEY字段以及一个字段.


the*_*ski 5

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

  • 为什么不?就像您放置的链接一样,它表示在某些情况下可能需要建立一对一的关系 (2认同)