1

我正在尝试在 Oracle 中创建一个受多个完整性约束约束的表。该表由一个假设的学生数据库组成。数据库的规则之一是,要被归类为大三学生,他们必须完成 55 到 84 个学分(含)。

我需要创建一个完整性约束来强制执行此规则,但我不完全确定如何去做。我觉得 CHECK 约束在这种情况下会很有用。

到目前为止,我已经...

CONSTRAINT IC4 CHECK (hours >=55 AND hours <= 84), 

此代码有效,但不能确定学生记录是否为大三学生。

我的餐桌布置是...

    CREATE TABLE  Students ( id                INTEGER, 
                             name              CHAR(10)    NOT NULL,  
                             classification    CHAR(10)    NOT NULL, 
                             hours             INTEGER, 
                             gpa               NUMBER(3,2) NOT NULL, 
                             mentor            INTEGER); 

因此,如果我们尝试插入...

INSERT INTO Students VALUES (50, 'Kim', 'junior', 34, 3.5, 40);  

...完整性约束将被违反,因为记录试图存储为“初级”,但学生只完成了 34 小时。

我将如何编写一个强制执行这些规则的约束?

4

2 回答 2

4

您需要and再次使用魔术词:

CREATE TABLE students (
....
 , CONSTRAINT IC4 CHECK ( classification = 'junior' AND hours >=55 AND hours <= 84 ) 

我怀疑你也会想要其他分类,并验证它们的范围。使用括号和 OR 来执行此操作。(为了清楚起见,使用 BETWEEN 定义范围)....

, CONSTRAINT IC4 CHECK ( ( classification = 'junior' AND hours BETWEEN 55 AND 84 ) 
                       OR ( classification = 'sophomore' AND hours BETWEEN 85 AND 124 )  
                       OR ( classification = 'senior' AND hours > 124 )  
                       OR ( classification = 'fresher' )
                       )                                 

确保你有一套完整的范围。

于 2013-02-03T04:48:26.230 回答
1

创建表后:

然后使用下面给出的 alter 语句添加检查约束:

ALTER TABLE Students
ADD CONSTRAINT IC4 (classification='junior' AND hours >=55 AND hours <= 84 );

现在,当您尝试插入以下语句时:

INSERT INTO Students VALUES (50, 'Kim', 'junior', 34, 3.5, 40);  

它不允许插入上述语句。

于 2013-02-03T07:17:02.157 回答