2013-02-03 2 views
1

J'essaie de créer une table dans Oracle qui est régie par plusieurs contraintes d'intégrité. Le tableau se compose d'une base de données d'étudiants hypothétique. L'une des règles de la base de données est que pour qu'un étudiant soit classé comme junior, il doit avoir complété entre 55 et 84 heures de crédit (inclusivement).Contrainte d'intégrité d'Oracle Check

Je dois créer une contrainte d'intégrité pour appliquer cette règle, mais je ne suis pas entièrement sûr de la manière de le faire. J'ai le sentiment qu'une contrainte CHECK serait utile dans cette situation.

Jusqu'à présent, je ... ont

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

Ce code est valable, mais il ne détermine pas si le dossier de l'étudiant est un junior.

La mise en place de ma table est ...

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); 

Donc, si nous essayons d'insérer ...

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

... serait violé la contrainte d'intégrité parce que le dossier est essayer d'être stocké comme un «junior», mais l'étudiant a seulement terminé 34 heures.

Comment pourrais-je écrire une contrainte qui appliquerait ces règles?

Répondre

4

Vous devez utiliser le mot magique and encore:

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

Je suppose que vous aurez envie d'avoir d'autres classifications aussi, et valider leurs gammes. Utilisez des parenthèses et OR pour le faire. (Et utiliser BETWEEN pour définir les plages pour la clarté) ....

, 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') 
         )         

Assurez-vous d'avoir un jeu complet de plages.

1

Une fois que vous avez créer la table:

ajouter ensuite contrainte de vérification en utilisant l'instruction alter ci-dessous:

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

Maintenant, lorsque vous essayez d'insérer la déclaration suivante:

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

Il ne permettra pas d'insérer la déclaration ci-dessus.

Questions connexes