2

例如,我必须编写一个注册表,其中包含:

  1. enrolment_id
  2. 学术期
  3. 结果
  4. 学生卡
  5. 学科

我想强制执行以确保学生在特定学术期间不能多次注册一个科目。因此,约束应涉及 student_id、主题和学年列。

我仍然不确定如何实现这一点。有什么帮助吗?

4

4 回答 4

14

向您的表添加唯一约束:

ALTER TABLE yourtable ADD CONSTRAINT constraintname UNIQUE (student_id, subject, academic_period)
于 2012-05-03T13:55:26.967 回答
3

创建一个唯一的约束academic_period, student_id, subject
我会让你计算出实际的 SQL

注意:这是正确的自然键:enrolment_id由于数据库架构,它是在实现时添加的代理项。在任何设计或建模过程中都没有强制要求

于 2012-05-03T13:55:44.333 回答
1

添加唯一约束。从这里

要允许命名 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)
 )

(修改以上您需要设置为唯一的列)

于 2012-05-03T13:55:52.363 回答
0

您将只获得从此示例查询返回的行数:

SELECT COUNT(*) FROM enrollment WHERE student_id = 'XYZ' AND subject = 'ABC' AND academic_period = 'DEF'

如果返回的行数大于 0,则他们已经在学期间注册了该学科。

于 2012-05-03T13:54:16.640 回答