[Oracle] 오라클 제약조건

제약조건

테이블 생성에 필요한 요소

1. 테이터형

  • 문자 : 자바에서 String 으로 매칭한다.
    • CHAR (1~2000byte) - 고정바이트이기 때문에 글자수가 동일할 때 주로 설정한다
    • VARCHAR2 (1~4000byte) - 가변바이트, 일반적으로 사용하는 문자를 저장한다.
    • CLOB (4G) - 가변바이트 , 줄거니라 내용설명 등 긴 내용의 데이터를 저장한다.
  • 숫자
    • NUMEBR(정수값) : 실제 정수
    • NUMBER(정수값,정수값) : 정수 , 실수 저장
    • NUMBER : 14자리까지 저장한다.
  • 날짜
    • DATE : 시스템의 시간
    • TIMESTAMP : DATE 확장형(1/100만 초까지 저장 가능)
  • 기타 : 4G까지 저장 가능
    • BLOB : 동영상 , 그림 , 사진을 바이너리(2진법)으로 저장
    • BFILE : 동영상 , 그림 , 사진을 파일(File)형태로 저장

2. 제약조건

  • 오라클은 정형화된 데이터만 저장하기 때문에 사이트에 필요한 데이터만 저장할 수 있도록 하는 것이 제약조건이다.

NOT NULL

  • 데이터에 NULL값을 허용하지 않는다.
  • NULL값을 허용하지 않기 떄문에 반드시 입력값을 추가해야한다.
  • 컬럼레벨 (컬럼뒤)에 작성해야 한다.
    • 컬럼레벨 : 컬럼과 동시에 제약조건 생성
-- 형식(1)
컬럼명 데이터형 NOT NULL
-- 형식(2) : 권장사항 => 명칭을 통해 제약조건에 대한 수정과 삭제가 용이하다
컬럼명 데이터형 CONSTRAINT 제약조건명 NOT NULL
-- 형식 (3) : 표 제작 후에 추가하기
ALTER TABLE 테이블명 MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL
-- 예시
name VARCHAR2(34) NOT NULL

UNIQUE

  • 유일값 , 중복이 없는 값 (NULL 허용)
  • 후보키 (이메일 , 전화번호 , 주민번호)
  • 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
-- 형식 (1)
컬럼명 데이터형 UNIQUE
-- 형식 (2)
컬럼명 데이터형 CONSTRAINT 제약조건명(=테이블명_컬럼명_uk) UNIQUE(컬럼명)
-- 형식 (3)
컬럼명 데이터형, 
CONSTRAINT 제약조건명(=테이블명_컬럼명_uk) UNIQUE(컬럼명)
-- 형식 (4) : 테이블 제작 후 제약조건 설정
ALTER TABLE 테이블명 ADD 컬럼명 CONSTRAINT 제약조건명(=테이블명_컬럼명_uk) UNIQUE(컬럼명)
email VARCHAR2(200) UNIQUE

PRIMARY KEY

  • NOT NULL + UNIQUE = NULL값 허용X + 중복 허용X
  • 일반적으로 숫자에 사용 : 게시물번호 , 영화번호 => MAX+1, SEQUENCE(자동증가번호)
  • 예외적으로 ID가 대표적인 PRIMARY KEY
  • 권장사항 : 모든 테이블은 PRIMARY KEY를 한 개 이상 가지고 있다.
    • 이상 현상 방지(무결성)
    • 수정 OR 삭제 시, => 원치 않는 데이터가 적용됨
  • 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
-- 형식 (1)
컬럼명 데이터형 PRIMARY KEY
-- 형식 (2)
컬럼명 데이터형 CONSTRAINT 제약조건명(=테이블명_컬럼명_pk) PRIMARY KEY(컬럼명)
-- 형식 (3) : 테이블 제작 후 제약조건 설정
ALTER TABLE 테이블명 ADD 컬럼명 CONSTRAINT 제약조건명(=테이블명_컬럼명__pk) PRIMARY KEY(컬럼명)
id VARCHAR2(20) PRIMARY KEY

FOREIGN KEY

  • 외래키 , 참조키
  • 참조하는 다른 테이블의 컬럼값을 벗어나면 안됨
  • 게시판 , 댓글
  • 정규화를 통해 테이블을 여러 개 만들 때 JOIN 기준이 되는 컬럼
  • 어떤 값을 참조할지 REFERENCE를 꼭 함께 작성해야 함
  • 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
컬럼명 데이터형 CONSTRAINT 제약조건명 FOREIGN KEY(컬럼명)
REFERENCES 참조할 테이블명(칼럼명)
deptno NUBER(2) FOREIGN KEY
REFERENCES dept(deptno)

CHECK

  • 지정된 데이터만 첨부
  • 입력시에 라디오버튼 , 콤보박스를 사용할 때 활용한다.
  • 부서명, 직위에 활용
  • 컬럼을 다 생성한 후 테이블 마지막에 첨부하는 것을 권장한다.
-- 형식 (1)-1
컬럼명 데이터형 CHECK(컬럼명 IN(10,20,30))
-- 형식 (1)-2
컬럼명 데이터형 CHECK(컬럼명>0)
-- 형식 (2) : 권장사항(제약조건에 이름을 붙여야 수정,삭제에 용이함)
컬럼명 데이터형 CONSTRAINT 제약조건명 CHECK(컬럼명>0)
sex VARCHAR2(4) CHECK(sex IN('남자' ,'여자'));

DEFAULT

  • 저장값이 없는 경우에 자동으로 설정된 값을 첨부

  • 컬럼레벨 (컬럼뒤)에 작성해야 한다.

    • 컬럼레벨 : 컬럼과 동시에 제약조건 생성
regdate DATE DEFAULT SYSDATE

제약조건 연습

1. 이름 (제약조건) 부여 : 테이블명_컬럼명_제약조건의 약자

  • PK : PRIMARY KEY
  • NN : NOT NULL
  • CK : CHECK
  • FK : FOREIGN KEY
  • UK : UNIQUE
    CREATE TABLE dept_test(
    deptno NUMBER(2),
    dname VARCHAR2(20),
    loc VARCHAR2(20),
    CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno),
    CONSTRAINT dept_dname_ck CHECK(dname IN('ACCOUNTING','RESEARCH','OPERATIONS','SALES')),
    CONSTRAINT dept_loc_ck CHECK(loc IN('NEW YORK','CHICAGO','BOSTON','DALLAS'))
    );
    

2. 제약조건 제작 순서 : NOT NULL => DEFAULT => PRIMARY => FOREIGN => CHECK

CREATE TABLE emp_test(    
    empno NUMBER(4),
    ename VARCHAR2(34) CONSTRAINT emp_enmae_nn NOT NULL,
    job VARCHAR2(20),
    mgr NUMBER(4),
    hiredate DATE DEFAULT SYSDATE,
    sal NUMBER(7,2) CONSTRAINT emp_sal_nn NOT NULL,
    comm  NUMBER(7,2),
    deptno NUMBER(2),
    CONSTRAINT emp_empno_pk PRIMARY KEY(empno),
    CONSTRAINT emp_mgr_fk FOREIGN KEY(mgr)
    REFERENCES emp_test(empno),
    CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno)
    REFERENCES dept_test(deptno),
    CONSTRAINT emp_job_ck CHECK(job IN('CLERK','SALESMAN','PRESIDENT','MANAGER','ANALYST'))
);

3. 같은 데이터베이스(XE)에서는 테이블은 유일값이다.

4. 테이블명 제작

  • 시작은 문자(영문 , 한글)로 시작한다
  • 숫자를 사용이 가능하다. (앞에 사용할 수 없다)
  • 테이블명은 30byte(한글 15글자)까지 사용이 가능하다.
  • 영문 사용 시에 테이블명은 대문자로 저장된다.
  • 특수문자는 단어가 2개 이상일 때 주로 _로 연결됨
  • 키워드는 사용할 수 없다. (SELECT , FROM…)

댓글