CREATE TABLE DEPARTMENT(
DEPTNO NUMBER NOT NULL,
DEPTNAME CHAR(10),
FLOOR NUMBER,
PRIMARY KEY(DEPTNO)
);
INSERT INTO DEPARTMENT VALUES(1,'영업', 8);
INSERT INTO DEPARTMENT VALUES(2,'기획', 10);
INSERT INTO DEPARTMENT VALUES(3,'개발', 9);
INSERT INTO DEPARTMENT VALUES(4,'총무', 7);
CREATE TABLE EMPLOYEE(
EMPNO NUMBER NOT NULL,
EMPNAME CHAR(10) UNIQUE,
TITLE CHAR(10) DEFAULT '사원',
MANAGER NUMBER,
SALARY NUMBER CHECK(SALARY < 6000000),
DNO NUMBER DEFAULT 1 CHECK (DNO IN(1,2,3,4)),
PRIMARY KEY(EMPNO),
FOREIGN KEY(MANAGER) REFERENCES EMPLOYEE(EMPNO),
FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DEPTNO) ON DELETE CASCADE
);
INSERT INTO EMPOLYEE VALUES(4377, '이성래','사장',NULL,5000000,2);
INSERT INTO EMPOLYEE VALUES(3426, '박영권','과장',4377,3000000,1);
INSERT INTO EMPOLYEE VALUES(3011, '이수민','부장',4377,4000000,3);
INSERT INTO EMPOLYEE VALUES(3427, '최종철','사원',3011,1500000,3);
INSERT INTO EMPOLYEE VALUES(1003, '조민희','과장',4377,3000000,2);
INSERT INTO EMPOLYEE VALUES(2106, '김창섭','대리',1003,2500000,2);
INSERT INTO EMPOLYEE VALUES(1365, '김상원','사원',3426,1500000,1);
);
*풀이*
TITLE CHAR(10) DEFAULT '사원'
-속성은 CHAR 10자리이며, 아무런 값이 입력되지 않았을 경우 기본 값으로 '사원'입력
SALARY NUMBER CHECK (SALARY < 6000000)
-SALARY라는 이름의 애트리뷰트 속성은 NUMBER이며
입력 값을 체크하여 6000000 이상의 값을 걸러낸다.
DNO NUMBER DEFAULT 1 CHECK (DNO IN(1,2,3,4))
-DNOㄹ는 이름의 애트리뷰트는 속성은 NUMER이며,
값이 입력되지 않으면 기본값 1을 입력하고,
입력되는 값은 1,2,3,4가 들어갔는지 확인하고
1,2,3,4 외의 값은 입력할 수 없음.
FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DEPTNO) ON DELETE CASCADE
-이 릴레이션의 DNO 에트리뷰트는 DEPARTMENT 릴레이션의 DEPTNO를
외래키로 사용하며, 삭제 시에 사용하여 삭제한다.
**삭제 옵션**
데이터베이스의 무결성제약조건 때문에 있는 옵션으로 4가지가 있는데,
이 옵션은 외래키로 참조하고 있는 경우에 사용된다.
1)제한(RESTRICTED)
참조 된 투플을 삭제하려고 시도할 때, 삭제 자체가 불가능 하게 만드는 옵션
2)연쇄(CASCADE)
참조 된 투플을 삭제 할 때, 삭제되는 투플을 참조하고 있는 다른 릴레이션에 있는
투플들도 함께 삭제된다. 위의 테이블의 경우에는 DEPARMENT 릴레이션의
1,영업,8 튜플을 삭제하게 되면, EMPLOYEE 릴레이션의 박영권, 김상원의
튜플들도 함께 삭제된다.
3)널값(NULLIFY)
참조ㄷ 된 투플을 삭제 할 때, 삭제되는 투플을 참조하고 있는 다른 릴레이션에 있는
투플에 참조 값을 NULL로 만든다.
이 옵션은 참조를 사용하는 애트리뷰트가 기본 키로 지정되어있을 경우에는
사용할 수 없는 옵션인데, 여튼, NULL값으로 대치된다는 것만 알아두자
4)디폴트 값
참조 된 투플을 삭제 할 때, 삭제되는 투플을 참조하고 있는 다른 릴레이션에 있는
투플에 참조 값을 미리 설정 된 디폴트 값으로 대치한다.