sql-server - 如何在 SQL-Server 中创建具有两列的唯一键
问题描述
我有 3 张桌子:
- StudentDetails(StudentNumber INT {PK}, IndexNumber, FirstName, ...)
- SubjectDetails(SubjectNumber INT {PK}, SubjectCode, ...)
- Marks(MarkCode INT {PK}, StudentNumber INT, SubjectNumber INT, Mark, ...)
我可以让StudentNumber和SubjectNumber成为复合唯一键吗?(已经是外键)
解决方案
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)
)
请参阅:何时使用唯一复合键?
推荐阅读
- node.js - 列“PO->Ledger.id”必须出现在 GROUP BY 子句中或在聚合函数中使用
- php - 我和一些用户无法登录我的 Web 应用程序,我该如何解决?
- python - 使用 BeautifulSoup 解析谷歌新闻
- firebase - Firebase 模拟器 - 为 runtimeconfig.json 提供自定义名称/路径
- java - Java 中的 int[] arr[] 是什么意思?
- mongodb - 登录时强制注销
- php - 将购物车商品数据发送到 PayPal WooCommerce
- python - 为什么`zip`从第一个迭代器中又吃掉一个元素?
- javascript - 从 _id 字段生成一个唯一的 8 位数字 (MongoDB/Javascript)
- sql - 带方括号的 SQL Server LIKE 直接工作,但不使用变量