빅데이터 분석을 하기 위한 과정 중 시간이 가장 많이 드는 과정이 어떤 과정일까요?
안타깝게도.. 데이터 분석을 하는 시간보다
데이터를 정제하는 시간이 더 많이 든다고 합니다!
더 좋은, 명확한, 유용한 결과를 추출하기 위해서죠!
데이터 정제시간을 줄이기 위해,
데이터의 품질을 높이기 위해
DB에서 미리 제약조건으로 데이터를 CONTROL 합니다!
제약조건이란?
테이블의 데이터를 구체화하는 규칙입니다.
<제약조건의 종류>
1. PRIMARY KEY: 중복된 데이터와 null값이 입력되지 않게 막는다.
2. UNIQUE: 중복된 데이터가 입력되지 않게 막는다. 3. NOT NULL: null값이 입력되지 않게 막는다. 4. CHECK: 미리 정의된 데이터만 입력되도록 막는다. 5. FOREIGN KEY: 참조하는 컬럼에 거는 제약 |
<제약조건을 생성하는 시점>
1. 테이블이 생성되는 시점
2. 테이블 생성 후
주의!
테이블 생성후 제약조건을 사용하기 위해서는
기존에 존재하는 데이터 중 제약에 위반된 데이터가 없어야 합니다.
( 테이블 생성시 )
1. PRIMARY KEY 제약조건 주기
조건: 고객테이블을 생성하며
column은 고객번호, 고객이름, 나이, MOBILE, 주소로 만든다.
PK: 고객번호
SQL1> CREATE TABLE 고객 ( 고객번호 number(10) PRIMARY KEY, 고객이름 varchar2(20), 나이 number(3), mobile varchar2(13), email varchar2(20), 주소 varchar2(40) ); |
(테이블 생성 후)
2. UNIQUE 제약조건 주기
조건: 고객테이블에서 mobile 컬럼에 unique 제약조건(customer_mobile_un)을 준다.
SQL2> ALTER TABLE 고객 ADD CONSTRAIN customer_mobile_un UNIQUE(mobile);
|
(테이블 생성 후)
3. NOT NULL 제약조건 주기
조건: 중요한 데이터로, 꼭 입력받아야하는 데이터인 고객이름에
not null제약조건(customer_cname_nn)을 준다.
SQL3> ALTER TABLE 고객 MODIFY 고객이름 CONSTRAIN customer_cname_nn NOT NULL; |
(테이블 생성 후)
4. CHECK 제약조건 주기
조건: email에 @과 .을 포함하는 데이터만 입력 또는 수정되게 한다.
(customer_email_ck)
SQL4> ALTER TABLE 고객 ADD CONSTRAIN customer_email_ck CHECK (email LIKE '%@%.%');
|
(테이블 생성시 & 테이블 생성 후)
5. FOREIGN KEY 제약조건 주기
조건: 구매 테이블에는 고객번호, 구매품목, 갯수 COLUMN을 가진 구매 테이블을 만든다.
구매 테이블의 고객번호는 고객테이블의 고객번호를 참조한다.
SQL5_1> CREATE TABLE 구매 ( 고객번호 number(10), 구매품목 varchar2(30), 갯수 number(5) ); SQL5_2> ALTER TABLE 구매 ADD CONSTRAIN order_cname_fk FOREIGN KEY(고객번호) REFERENCES 고객(고객번호);
|
<제약조건 이름>
위에서 계속 제약조건의 이름을 지정하였습니다.
order_cname_fk와 같이 말이죠.
그 이유는
이 제약 조건을 나중에 필요가 없어서 제거(DROP)하거나
잠시 중지(DISABLE)시킬 때
제약조건 이름을 사용하기 때문입니다.
물론 제약조건의 이름을 주지 않은
고객번호와 같이 제약조건을 준 경우
ORACLE에서 자동으로 SYS_Cn형식으로 이름을 생성합니다.
제약 조건을 확인하는 방법도 있습니다.
SQL> SELECT table_name, constraint_name, constraint_type, status FROM user_constraints WHERE table_name = '테이블명';
|
하지만 조금 귀찮겠죠..?
오늘은 여기까지!!
뿅!
'SQL' 카테고리의 다른 글
ORACLE | 인덱스 (INDEX) (2) | 2018.04.12 |
---|---|
ORACLE | VIEW(뷰) (0) | 2018.04.11 |
ORACLE | MERGE문 (DML) (0) | 2018.04.09 |
ORACLE | 서브쿼리 2탄 - MULTIPLE COLUMN SUBQUERY (0) | 2018.04.06 |
ORACLE | 서브쿼리 1탄 - SINGLE / MULTI ROW SUBQUERY & EXISTS (0) | 2018.04.06 |