我正在阅读PerformanceDBA给这个SQL Question提供的精彩回复 .
在PerformanceDBA 'Full Example'中,表'user'和'sport'每个表显示两个PRIMARY KEY . 注意;如果仔细查看PerformanceDBA响应,您会注意到主键一包含一个字段,而主键二包含三个字段;复合键 .
鉴于Microsoft T-SQL Server每个表不支持多个Primary Key(我不知道SQL ANSI也没有), how would we achieve the concept presented by PerformanceDBA as a workable Microsoft T-SQL solution (即遵循Microsoft T-SQL语法)?
是否有可能PerformanceDBA提供的信息只包含错字;他忽略了一个错误?
我最初的想法是(表格定义从PerformanceDBA回答SQL Question,经过小修改以适应T-SQL):
CREATE TABLE [User] ( -- Typical Identifying Table
[user_name] CHAR(16) NOT NULL, -- Short PK
name_first CHAR(30) NOT NULL, -- Alt Key.1
name_last CHAR(30) NOT NULL, -- Alt Key.2
birth_date DATE NOT NULL , -- Alt Key.3
--Create a unique CONSTRAINT and assign a Foreign Key (
CONSTRAINT User_PK PRIMARY KEY ( [user_name] ),
-- Will this 'do'?
CONSTRAINT User_AK UNIQUE ( name_last, name_first, birth_date ),
CONSTRAINT user_FK -- unique person identification
FOREIGN KEY (name_last, name_first, birth_date)
REFERENCES [Person] ( name_last, name_first, birth_date)
)
感谢您的时间 .
1 回答
在Microsoft SQL Server中,创建为PRIMARY KEY的密钥与使用UNIQUE约束创建的密钥之间几乎没有区别(当然,在非可空列上) . 您可以为每个表定义最多1000个UNIQUE约束 . 语法中存在一个或两个细微差别,但没有特别强烈的理由使用PRIMARY KEY约束而不是UNIQUE约束 .