728x90
반응형

https://dev.mysql.com/

 

 

안녕하십니까 다제입니다. 

 

오늘도 SQL에 대해서 공부를 진행해보고자 합니다. 

 

오늘은 정규화 및 정규형에 대해서 자세히 알아보도록 하겠습니다. 

 

 

 


 

 

 

1. 데이터베이스 이상 현상 

1) 이상현상(anomaly) 

 -. 데이터베이스에서 삽입, 업데이트, 삭제를 제대로 할 수 없게 되는 경우

 -. 데이터 모델링을 제대로 하지 않았기 때문에 발생

2) 삽입이상 : 새로운 데이터를 자연스럽게 저장할 수 없는 경우

3) 업데이트 이상 : 데이터를 업데이트했을 때, 정확성을 지키기 어려워지는 경우

4) 삭제이상 : 원하는 데이터만 자연스럽게 삭제할 수 없는 경우

 

 

 

 


 

 

 

2. 정규화(Normalization)

 1) 정규화란?

  -. 데이터베이스의 테이블이 잘 만들어졌는지 평가하고, 잘 만들지 못한 테이블을 고쳐나가는 과정

  -. 테이블 정규형(normal form)이라고 불리는 형태에 부합하게 만들어가는 것을 의미함 

 

 

 2) 정규화의 장점

   -. 데이터베이스에서 삽입, 업데이트, 삭제 이상을 없앨 수 있다. 

   -. 새로운 종류의 데이터를 추가할 때 테이블 구조 수정을 많이 하지 않아도 된다. 

   -. 데이터베이스 구조를 단순화해서 사용자가 더 쉽게 이해할 수 있다.  

 

 

 3) 적용시점 : 데이터 모델을 만들고 데이터베이스에 구현하기 전에 적용하는 것을 권장 

 

 

 4) 1NF( 제 1 정규형 ) 

   -. 기본키가 2개 이상일 경우, 이를 나누는 것을 1NF이라고 한다. 

   -. 테이블 안 모든 row의 모든 column 값들은 나눌 수 없는 단일 값이어야 한다. 

   -. 한 칸에 여러 개의 값이 있는 경우, column을 늘려서 이러한 문제를 해결할 수 있다. 그러나,,! 

   -. 위와 같은 방법으로 해결할 경우, NULL이 많이 생길 수 있고, 몇개의 column을 추가해야하는지 알 수 없고, 조회가 비효율적이라는 단점이 생기게 됩니다. 

   -. 이에, 저장되어 있는 데이터 타입에 따라서 2가지 해결방법이 존재한다. 아래 이러한 데이터가 있다고 가정해봅시다. 

Id 연락처 Name
1 02-999-9999, 010-1234-1234, 
010-7894-4561 
Steve John Kim

   -. 해결방법 

    (1) 한 칸에 서로 비슷한 종류의 데이터가 여러 개 저장되어있을 경우 - 해당 column을 별도의 테이블로 만들어준다.

Id 연락처
1 02-999-999
1 010-1234-1234
1 010-7894-4561

 

    (2) 한 칸에 서로 다른 종류의 데이터가 여러 개 저장되어있을 경우 - column 수를 늘려서 해결해 준다. 

Id First Name Last Name
1 Steve John Kim

 

 

 5) 2NF( 제 2 정규형 ) 

   -. 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 해당이 되며, 2개 이상의 키본키가 복합적으로 하나의 컬럼에 적용이 되어야하는데, 2개 중 1개가 별도로 함수에 영향을 주는 것을 부분함수종속성이라고 하는데, 이렇게 부분함수종속성이 발생되는 경우, 2NF를 실행해야한다. 

   -. 테이블 안에 condidate key와 함수 종속성을 띄는 column이 없어야 합니다. 

     * Candidate Key : 둘 이상의 column을 조합하여 하나의 row를 특정 지을 수 있는 column(attribute)의 최소 집합 

     * 함수종속성 : x의 값에 따라서 y값이 결정될때 y는 x에 함수 종속성이 있다고 합니다. 

   -. 해결방법 : condidate key와 함수 종속성을 띄는 column을 빼주면 된다. 

 

 

 6) 3NF( 제 3 정규형 ) 

   -. 2NF에 부합해야 합니다.(즉, 테이블 안 모든 값이 나눌 수 없는 단일 값이어야 합니다.)

   -. 기본키를 제외하고 칼럼간에 종속성이 발생되는 경우, 이를 별도의 dataFrame으로 빼내는 것을 말한다. 

   -. 테이블 안에 condidate key와 함수 종속성을 띄는 column이 없어야 합니다. 

   -. 테이블 안에 있는 모든 컬럼들은 오직 primary key에만 함수종속성이 있어야 한다. 

   -. 해결방법 : primary key 외 함수종속성을 가지고 있는 컬럼들을 빼주는 작업을 해야한다. 

 

 

 

꼭 이해가 되셨으면 좋겠고, 추가적인 설명이 필요하거나 궁금하신 사항이 있으시면 언제든 댓글 부탁드립니다. 

 

감사합니다. 

728x90
반응형

+ Recent posts