【问题标题】:How to create a unique key with two columns in SQL-Server如何在 SQL-Server 中创建具有两列的唯一键
【发布时间】:2020-04-05 16:13:46
【问题描述】:

我有 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-server key ddl


    【解决方案1】:

    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)
                        )
    

    见:When to use unique composite keys?

    pros and cons of using multi column primary keys

    【讨论】:

    • 如果我没有问清楚,请原谅我,但在我的数据库中,我假设一个学生可能有几个科目的分数,但相同的 StudentNumber,SubjectNumber 组合可能不会重复。前 - 彼得 - 数学彼得 - 科学等。但没有彼得 - 数学
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2012-07-30
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多