• 데이터베이스 정규화

    2017. 9. 10. 16:20

    by. 위지원

    데이터베이스 정규화를 보고 공부한내용 [예제는 해당 사이트에 있다]


    아무것도안되는날에는 데이터베이스를 공부하쟈.알바끝나기전 잠깐보자...크흡흡 


    데이터베이스 정규화란?


    데이터베이스의 데이터를 구성하는 프로세스로 중복성,불일치 종속성제거를 통해 데이터베이스의 유연성을 높임과 동시에 데이터를 보호하도록 설계되어진 규칙에 따라 테이블을 만들고 관계를 설정하는 작업까지가 정규화이다.



    왜 정규화가 필요할까?


    데이터 중복

    - 디스크 공간이 낭비된다.  

    - 중복된 데이터의 저장은 수정시 문제가 생긴다.

    ex) T1과 T2 두개의 테이블에 같은 데이터가 저장되어있을때에 T1을 수정하면 T2또한 수정해주어야한다.


    불일치 종속성

    - 데이터의 특성이 테이블에 맞지않는 경우 ex)사원테이블에 고객의정보는 있을 수 없다.



    정규화는 일반적으로 3번째 정규화까지가 많이 취급된다.. (수업때도 그 이상꺼는 잘안쓴ㄴ다고한거같다)



    1.1차 정규화 [ 유사한 컬럼 제거 ]

    -반복되는 그룹을 제거

    -별도의 테이블 생성


    ex)

     물품 ID | 업체1 | 업체2 | 업체3 |업체 ..N


    이런 모양의 테이블은 만들지 않는다. 업체 테이블을 따로만들어 관계를 생성하여 참조할 수 있도록한다.





    2.2차 정규화 [ 중복데이터 제거 ] 

    -여러 테이블에서 참조하는 컬럼에 대해 중복으로 저장x 


    ex)

    T1 T2 T3 T4 4개의 테이블이 모두 Name이라는 컬럼을 가지고있을때 (이때 name의 데이터는 모두 동일) 모든 테이블에 name 컬럼을 생성하지 않고

    한 테이블 또는 name테이블을 생성하던지 하여 각테이블마다 중복되는 컬럼을 갖지 않게 한다.


    3.3차 정규화 [ 키에 종속되지 않는 데이터 제거 ]

    -키에 종속되지 않는 컬럼 제거


    ex)

    [지원자 테이블]

    대학이름|주소  


    위의 테이블이 존재할때 지원자는 여러가지 대학에 지원했을것이다.같은값을계속해서 저장하는것도 안좋고 또한

    이럴때 내가 대학목록이 필요하다하면 위의 테이블에서는 얻을 수없고 비효율적이다.이를 아래와 같이 바꾸자


    [대학테이블]---------[지원자테이블]

    코드|대학이름 ------코드|주소


    **예외

    그러나 이와같은상황일때 발생가능한 모든 종속성을 제거한다치면..... 모든 필드를 테이블로 나눠야할지모른다.

    이와같이 작은테이블에서의 정규화는 성능저하와 메모리문제가 생긴다고한다.


    자주변경되는 데이터에만 3차정규화를 적용하는것이 적절하다고한다.!


    4.그외

    BCNF라는 4차 정규화,5차 정규화는 실제 디자인에서 고려되는 경우가 거의 없다.왜냐면 아무기능적으로 영향을 주지 모하기때문이다.