2013-02-03 3 views
1

여러 무결성 제약 조건이 적용되는 Oracle에서 테이블을 만들려고합니다. 테이블은 가상의 학생 데이터베이스로 구성됩니다. 데이터베이스의 규칙 중 하나는 학생이 주니어로 분류되기 위해서는 55 시간에서 84 시간 (완료 포함)에 완료해야한다는 것입니다.Oracle Check Integrity Constraint

이 규칙을 적용하기 위해 무결성 제약 조건을 만들 필요가 있지만이를 수행하는 방법에 대해 완전히 확신 할 수는 없습니다. 이 상황에서 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

는 다시 마법의 단어 and를 사용해야합니다 :

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

난 당신이 너무 다른 분류를해야 할 것입니다 의심, 그 범위를 확인합니다. 이를 수행하려면 괄호와 OR을 사용하십시오. 당신이 범위의 완전한 세트를 가지고 있는지 확인하십시오 ....

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

을 (그리고 명확성을 위해 범위를 정의하기 위해 BETWEEN 사용).

1

만들고 일단 테이블 : 당신이 아래 문 삽입 할 때 이제

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

:

그런 다음 아래의 ALTER 문을 사용하여 점검 제한 조건을 추가

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

를이 위의 문장을 삽입 할 수 없습니다.

관련 문제