一本书限于最多3门课程| sql oracle

时间:2016-10-20 08:24:30

标签: sql oracle oracle-sqldeveloper restriction

我想限制一本书只能注册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)
)

1 个答案:

答案 0 :(得分:0)

首先,课程似乎是该表的不恰当名称。我认为book_assignmentsbooks_courses可以更准确。

其次,在您当前的结构中 - 一本书只能注册一门课程,因为book是课程表中的主键,它只允许该表中每本书一行。您需要删除主键或将其更改为(Book,Course)。请记住,如果所有表格都是'列位于主键中,设计可能不正确。

解决此问题的一种方法是创建一个触发器,用于查询与当前插入的图书相关联的行数,如果图书已经注册到3个课程,则无法插入/更新。

我会选择一种不同的方法,只使用一个表格用于书籍,其中3列称为course1,course2,course3。如果有一天可以注册一本书来说20门课程,这不是一个非常可扩展的解决方案,但它对你的作业来说还不错。