반응형

추출, 정제하기




빅데이터 분석을 하기 위한 과정 중 시간이 가장 많이 드는 과정이 어떤 과정일까요?


안타깝게도.. 데이터 분석을 하는 시간보다

데이터를 정제하는 시간이 더 많이 든다고 합니다!


더 좋은, 명확한, 유용한 결과를 추출하기 위해서죠!


데이터 정제시간을 줄이기 위해,

데이터의 품질을 높이기 위해

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

+ Recent posts