我想限制一本书只能注册3门或更少的课程。我该如何创建此限制? (注意我没经验,仍然在学习)
CREATE TABLE Course (
Book varchar2(50) NOT NULL,
Course varchar2(50)
CONSTRAINT chk_Course CHECK (Course IN ('database', 'programming', 'mathematics', 'statistic', 'chemistry', 'physics')),
PRIMARY KEY(Book)
);
-
CREATE TABLE BOOK
(
ISBN VARCHAR2(50),
TITEL VARCHAR2(50),
PUBLISHER VARCHAR2(50),
YEAR DATE CHECK (YEAR between TO_DATE('1900/01/01', 'yyyy/mm/dd') AND
TO_DATE('2017/01/01', 'yyyy/mm/dd')),
PRIMARY KEY(Isbn)
)
答案 0 :(得分:0)
首先,课程似乎是该表的不恰当名称。我认为book_assignments
或books_courses
可以更准确。
其次,在您当前的结构中 - 一本书只能注册一门课程,因为book
是课程表中的主键,它只允许该表中每本书一行。您需要删除主键或将其更改为(Book,Course)。请记住,如果所有表格都是'列位于主键中,设计可能不正确。
解决此问题的一种方法是创建一个触发器,用于查询与当前插入的图书相关联的行数,如果图书已经注册到3个课程,则无法插入/更新。
我会选择一种不同的方法,只使用一个表格用于书籍,其中3列称为course1,course2,course3
。如果有一天可以注册一本书来说20门课程,这不是一个非常可扩展的解决方案,但它对你的作业来说还不错。