안녕하십니까 다제입니다.
오늘도 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 외 함수종속성을 가지고 있는 컬럼들을 빼주는 작업을 해야한다.
꼭 이해가 되셨으면 좋겠고, 추가적인 설명이 필요하거나 궁금하신 사항이 있으시면 언제든 댓글 부탁드립니다.
감사합니다.
'Code > SQL' 카테고리의 다른 글
[SQL] 1. 데이터모델링 이해하기 (0) | 2021.05.11 |
---|---|
[MySQL 13] 물리적모델링(feat. Codestates _AI_BootCamp, codestates) (0) | 2021.03.11 |
[MySQL 10] 논리적인 모델링(feat. Codestates _AI_BootCamp, 코드스테이츠) (0) | 2021.03.11 |
[MySQL 9] MySQL data Modeling (feat. Codestates _AI_BootCamp, 코드스테이츠) (0) | 2021.03.11 |
[MySQL 8] Foreign Key 삭제 & 업데이트 정책(feat. Codestates _AI_BootCamp, 코드스테이츠) (0) | 2021.03.11 |