首页 > 解决方案 > 如何在 SQL-Server 中创建具有两列的唯一键

问题描述

我有 3 张桌子:

  1. StudentDetails(StudentNumber INT {PK}, IndexNumber, FirstName, ...)
  2. SubjectDetails(SubjectNumber INT {PK}, SubjectCode, ...)
  3. Marks(MarkCode INT {PK}, StudentNumber INT, SubjectNumber INT, Mark, ...)

我可以让StudentNumberSubjectNumber成为复合唯一键吗?(已经是外键)

标签: sql-serverkeyddl

解决方案


UNIQUE 约束将列或列组合指定为唯一键。为了满足 UNIQUE 约束,表中的任何两行都不能具有相同的唯一键值。但是,由单个列组成的唯一键可以包含空值。

在您的情况下,一个学生可能有多个科目的分数,但相同的 StudentNumber、SubjectNumber 组合可能不会重复。

CREATE TABLE StudentDetails(StudentNumber INT NOT NULL, 
                            IndexNumber INT NOT NULL,
                            FirstName VARCHAR(255) NOT NULL,
                            PRIMARY KEY (StudentNumber)
                           )

CREATE TABLE SubjectDetails(SubjectNumber INT NOT NULL
               , SubjectCode INT NOT NULL,
              PRIMARY KEY (SubjectNumber))                           


CREATE TABLE Marks (MarkCode  int NOT NULL, 
                    StudentNumber  int  NOT NULL,
                    SubjectNumber int NOT NULL, 
                    Mark int NULL,

                    PRIMARY KEY (MarkCode),
                    CONSTRAINT unicity UNIQUE (StudentNumber,SubjectNumber)
                    )

请参阅:何时使用唯一复合键?

使用多列主键的优缺点


推荐阅读