例如,我必须编写一个注册表,其中包含:
- enrolment_id
- 学术期
- 结果
- 学生卡
- 学科
我想强制执行以确保学生在特定学术期间不能多次注册一个科目。因此,约束应涉及 student_id、主题和学年列。
我仍然不确定如何实现这一点。有什么帮助吗?
向您的表添加唯一约束:
ALTER TABLE yourtable ADD CONSTRAINT constraintname UNIQUE (student_id, subject, academic_period)
创建一个唯一的约束,academic_period, student_id, subject
我会让你计算出实际的 SQL
注意:这是正确的自然键:enrolment_id
由于数据库架构,它是在实现时添加的代理项。在任何设计或建模过程中都没有强制要求
添加唯一约束。从这里:
要允许命名 UNIQUE 约束并在多个列上定义 UNIQUE 约束,请使用以下 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
(修改以上您需要设置为唯一的列)
您将只获得从此示例查询返回的行数:
SELECT COUNT(*) FROM enrollment WHERE student_id = 'XYZ' AND subject = 'ABC' AND academic_period = 'DEF'
如果返回的行数大于 0,则他们已经在学期间注册了该学科。