* Youtube Link - https://www.youtube.com/watch?v=40b8p9okBa4&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=20
8.1.2 제약 조건
무결성을 지키는 제약 조건
ID는 중복이 안 된다.
학번, 사번 등이 이에 해당한다. 또는 일련번호, UUID등도 속한다.
데이터베이스를 만드는 사람이 정한다. 정해진 약속은 없다.
하지만 이름이 기본 키라면 같은 이름의 사람은 회원가입이 불가능할 것이다.
테이블 중 기본 키가 없는 경우도 있다. 대부분의 테이블은 기본 키를 갖는다. 기본 키가 있는 것을 권장한다.
테이블을 설정할 때 기본 키를 설정할 수 있다.
제약 조건 확인
USER_CONSTRAINTS 테이블을 통해서
OWNER = 'TABLEDB'
TABLE_NAME = 'USERTBL'
CONSTRAINT_TYPE = 'P'
조건절을 통해서
PK를 확인할 수 있다.
P는 기본키, R은 외래키, C는 NOTNULL 또는 CHECK이다.
CASCADE CONSTRAINTS
CASCADE CONSTRAINTS를 통해서
외래키 제약조건이 있는 테이블도 같이 데이터가 삭제된다.
PK의 이름을 지어주기
userID CHAR(8) NOT NULL CONSTRAINT PK_userTBL_userID PRIMARY KEY
이다.
이렇게 기존과는 달리
SYS_C0011269 -> PK_USERTBL_USERID
로 PK의 이름이 지어진 것을 볼 수 있다.
PK의 이름을 직접 지어주는 것을 권장한다.
동일하게 생성이 되었다.
테이블 생성 시 PK를 지정하지 않고
테이블을 변경해서 PK 및 PK이름을 정해주는 방식이다.
제품 코드는 겹친다.
제품 코드 및 제품 일련 번호를 합쳐서 PK를 구성을 하면
각 행을 구분지을 수 있다.
테이블을 PK없이 만들고
테이블을 변경함으로써
prodCode, prodID를 결합한다.
PRIMARY KEY (prodCode, prodID) 이렇게 만든다.
PRODTBL 테이블을 우클릭하고 편집을 보면
PK가 두 컬럼이 지정되어 있다.
이러한 경우는 각각이 PK가 아니라
두개 합쳐서 PK인 경우다.
외래 키(Foreign Key) 제약 조건
대게 일대다의 관계로 연관을 지어주는 것이다.
데이터의 무결성을 보장해주는 것 중 하나이다.
두개의 테이블이 필요하고 한 개의 테이블이 다른 한 개의 테이블을 의존한다.
회원 테이블의 아이디를 갖고 있는 테이블을 '기준 테이블'이라고 한다.
구매 테이블은 회원 테이블을 참조한다고 해서 '참조 테이블'이라고 부른다.
PK는 반드시 유일해야 한다. 중복이 있으면 절대 안 된다.
REFERENCES 를 통해서 기준 테이블의 PK를 지정한다.
CONSTRAINT FK_userTBL_buyTBL REFERENCES userTBL(userID)
로써 FK의 이름을 지정해줄 수 있다.
,CONSTRAINT FK_userTBL_buyTBL FOREIGN KEY(userID) REFERENCES userTBL(userID)
를 통해서 제약조건을 맨 아래에 설정함으로써 FK를 설정할 수 있다.
테이블을 지정하고
테이블 변경을 통해서 FK를 지정할 수 있다.
ON DELETE CASCADE
회원을 탈퇴하면 구매 테이블의 예를 들어 KBS의 구매 목록은 붕 뜨게 된다.
원래는 제약조건에 의해서 회원 탈퇴가 안 된다.
ON DELETE CASCADE를 통해서
회원이 탈퇴하면 자동으로 구매 테이블 내역도 삭제할 수 있다.
업무적으로 설정하면 된다.
UNIQUE 제약 조건
이메일이나 주민등록번호는 중복이 안 된다.
PK로 지정할만 하지만
추가로 하기 위해서
UNIQUE키로 지정하는 경우가 많다.
PK는 테이블에 하나 밖에 지정을 못 한다.
이메일은 중복이 안 된다.
UNIQUE 키를 적어주시면 설정이 된다.
또는 맨 마지막에 추가로 추가할 수 있다.
UNIQUE 이름 지정
, CONSTRAINT AK_email UNIQUE (email) 를 통해서
UNIQUE 키 및 이름을 지정할 수 있다.
테이블을 만들고
테이블 변경 시
ADD CONSTRAINT AK_EMAIL UNIQUE (EMAIL);
를 통해서 제약조건을 추가하였다.
CHECK 제약 조건
키는 -값이 안 된다.
CHECK 조건을 통해서 해당하는 것만
입력된다.
테이블 변경 시
ADD CONSTRAINT CK_height
CHECK (height >= 0)
제약조건을 추가함으로써
키가 0보다 큰 경우만 입력되도록 제약조건을 한다.
ADD CONSTRAINT CK_mobile1
CHECK (mobile1 IN ('010','011','016','017','018','019'));
를 통해서 국번 제약조건을 걸었다.
예를 들어 삐삐의 경우
012, 013의 국번의 경우
현재의 제약조건으로 하려고 하면
제약조건이 안 걸린다.
왜냐하면 012, 013이 있기 때문이다.
그런데 ENABLE NOVALIDATE 조건을 걸면
기존의 것은 그대로 인정하고
제약조건을 걸겠다는 의미이다.
DEFAULT 정의
테이블에 지정할 수도 있고
ALTER TABLE userTBL MODIFY birthYear DEFAULT -1;
MODIFY를 통해서 테이블의 열을 수정한다.
DEFAULT 명령문, NULL 명령문 등을 통해서
INSERT문으로 데이터 입력 시 DEFAULT 값을 자동으로 입력하거나, NULL을 입력할 수 있다.
' ' 띄어쓰기 한칸이 입력된 열은 NULL이 아니라 ' '공백이 들어간 것을 볼 수 있다.
감사합니다.
'Oracle' 카테고리의 다른 글
[SQLD] 최신 기출문제 2회 (11~20) (3) | 2024.11.06 |
---|---|
[이것이 오라클이다] 08장 3교시: [Oracle] 임시 테이블 및 테이블 삭제/수정 및 제약 조건 실습 (2) | 2024.11.05 |
[이것이 오라클이다] 08장 1교시: [Oracle] 테이블 생성 (SQL Developer 및 SQL문) (3) | 2024.11.05 |
[이것이 오라클이다] 07장 4교시: [Oracle] PL/SQL 프로그래밍, 예외 처리, 동적 SQL (2) | 2024.11.04 |
[이것이 오라클이다] [Oracle] 조인(내부조인,외부조인,상호조인 등) (0) | 2024.11.04 |