首页 文章

Microsoft T-SQL不支持多个主键;建议的解决方法?

提问于
浏览
0

我正在阅读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 回答

  • 2

    在Microsoft SQL Server中,创建为PRIMARY KEY的密钥与使用UNIQUE约束创建的密钥之间几乎没有区别(当然,在非可空列上) . 您可以为每个表定义最多1000个UNIQUE约束 . 语法中存在一个或两个细微差别,但没有特别强烈的理由使用PRIMARY KEY约束而不是UNIQUE约束 .

相关问题