SQL 中的两个复合主键
Two Composite Primary Key in SQL
我试图定义 table 如下:
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]
(
Name VARCHER(20)
UserId int NOT NULL,
GroupId int NOT NULL,
PRIMARY KEY CLUSTERED ( UserId, Name),
PRIMARY KEY CLUSTERED ( GroupId, Name),
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
);
如何使用两个复合主键创建 table?
Name VARCHAR(20) NOT NULL,
UserId int NOT NULL,
GroupId int NOT NULL,
UNIQUE ( UserId, Name),
UNIQUE ( GroupId, Name)
在关系模型和 SQL 中,一个键与另一个键之间没有逻辑上的区别,因此没有充分的理由使用不同的语法来指定一个键而不是其他键。然而,无论好坏,SQL 标准的作者决定限制 PRIMARY KEY
约束语法在每个 table 中只能使用一次,并且在需要多个约束语法的情况下键,您必须改用一个或多个 UNIQUE
约束。可以说,放弃该限制是可取的,但因为它基本上只是一点语法糖,不太可能很快发生。
我试图定义 table 如下:
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]
(
Name VARCHER(20)
UserId int NOT NULL,
GroupId int NOT NULL,
PRIMARY KEY CLUSTERED ( UserId, Name),
PRIMARY KEY CLUSTERED ( GroupId, Name),
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
);
如何使用两个复合主键创建 table?
Name VARCHAR(20) NOT NULL,
UserId int NOT NULL,
GroupId int NOT NULL,
UNIQUE ( UserId, Name),
UNIQUE ( GroupId, Name)
在关系模型和 SQL 中,一个键与另一个键之间没有逻辑上的区别,因此没有充分的理由使用不同的语法来指定一个键而不是其他键。然而,无论好坏,SQL 标准的作者决定限制 PRIMARY KEY
约束语法在每个 table 中只能使用一次,并且在需要多个约束语法的情况下键,您必须改用一个或多个 UNIQUE
约束。可以说,放弃该限制是可取的,但因为它基本上只是一点语法糖,不太可能很快发生。