728x90
반응형
SMALL

* 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이 아니라 ' '공백이 들어간 것을 볼 수 있다.

 

감사합니다.

728x90
반응형
LIST

+ Recent posts