我有以下两个表
Create table Exam
(
coursecode nvarchar(6) Not Null Constraint Pk_courseCode Primary Key (coursecode),
[examiner-name] [varchar](25) ,
[date] date not null,
slot varchar(2),
)
Alter table Exam with check
add constraint [coursecode_ck_validity] check ((coursecode like '[A-Z][A-Z][A-Z][0-9][0-9][0-9]'))
Alter table Exam with check
add constraint [date_ck_validity] check (Month([date]) = 5 or Month([date]) = 11)
Alter table Exam with check
add constraint [slot_ck_validity] check (slot in ('AM', 'PM'))
此表Student
Create table Student
(
[script-id] int identity(1,1) not null Constraint [PK_Student] Primary key ([script-id]),
[student-id] char(8) not null,
[course-code] nvarchar(6) Not Null constraint [FK_Student] foreign key([course-code]) references Exam ([course-code]),
[seat-no] int not null constraint [seatno_ck_validity] check ([seat-no] between 1 and 3000 )
)
除了上述陈述之外,我还有其他约束,我必须应用,但不知道如何应用这些约束
约束
不允许删除课程代码,并且级联课程代码更新。
考试与学生之间的最低基数为M:O。
由于
答案 0 :(得分:1)
不允许删除课程代码,并且级联课程代码更新
您的意思是不允许删除Exam
吗?如果是这样,请不要grant
表deny
(或主动Delete
)Exam
。
更新课程代码是级联的
使用Cascading Referential Integrity Constraints:
Create table Student
(
-- ...
[course-code] nvarchar(6) Not Null
Constraint [FK_Student] foreign key([course-code])
References Exam ([course-code]) /***/ On Update Cascade /***/
-- ...
)
......和你的第二个条件......
考试与学生之间的最低基数为M:O。
我不确定您在这种情况下试图解决的问题。您Not Null
上的Foreign Key
和Student.course-code
约束应该是所有需要的。
顺便说一句,请确保一致的命名约定;具体而言,比较Exam.coursecode
和Student.course-code
。此外,在专业SQL世界中,下划线比对象名中的连字符更为普遍。