1

いくつかの整合性制約によって管理される Oracle でテーブルを作成しようとしています。このテーブルは、架空の学生データベースで構成されています。データベースの規則の 1 つは、学生がジュニアとして分類されるためには、55 から 84 単位時間 (両端を含む) を修了している必要があるということです。

このルールを強制するために整合性制約を作成する必要がありますが、それを行う方法が完全にはわかりません。このような状況では、CHECK 制約が役立つと思います。

これまでのところ...

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

このコードは有効ですが、学生の記録が 3 年生かどうかは判断できません。

私のテーブルセッティングは…

    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 に答える