데이터 모델링을 할 경우 정규화를 토대로 데이터 모델링을 수행한다.
데이터 모델링을 위한 사전 지식과 1NF ~ BCNF까지 정규화 단계를 알아본다.
- 사전 지식
- 용어
- 이상현상(Anomaly)
- 삽입 이상 (Insertion Anomaly)
- 갱신 이상 (Update Anomaly)
- 삭제 이상 (Deletion Anomaly)
- 함수적 종속성
- 부분적 함수적 종속성(Partial Functional Dependency)
- 완전 함수적 종속성(Full Functional Dependency)
- 정규화(Normalization)
- 1차 정규화 (1NF : First Normal Form)
- 2차 정규화 (2NF : Second Normal Form)
- 3차 정규화 (3NF : Third Normal Form)
- 보이스-코드 정규화 (BCNF : Boyce-Codd Normal Form)
용어
릴레이션 : 데이터베이스에서 테이블을 의미합니다.
튜플 : 릴레이션의 각 레코드(=행, row)를 의미합니다.
차수 : 릴레이션의 존재하는 속성의 개수
속성 : 엔티티를 구별할 수 있는 항목들
이상현상 (Anomaly)
잘못된 데이터 모델링을 통해 물리적으로 설계된 데이터베이스 위에서 동작하는 애플리케이션을 사용하다 보면 부작용이 일어날 수 있는데 이러한 현상을 이상(Anomaly) 현상이라고 한다. 이상현상의 종류는 삽입 이상, 갱신이상, 삭제이상이 존재합니다.
삽입이상
- 새로운 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
STORE_ID | STORE_NAME | MENU_NAME | MENU_PRICE |
20213321 | 죠스 떡볶이 | 순대 | 4000 |
20213322 | 혼밥남녀 | 고추장 삼겹살 | 7900 |
20213323 | 투썸플레이스 | 아메리카노(L) | 4600 |
기본키를 STORE_ID와 MENU_NAME으로 복합키로 설정했다고 가정하자. 새로운 가게의 정보를 입력하자고 했을 때 현재 메뉴가 정해지지 않았고 서비스를 이용하기 위해 데이터를 입력해야 한다.
이 경우 MENU_NAME에 NULL값이 들어갈 수 없으므로 "미정"과 같은 불필요한 데이터가 같이 삽입되고 MENU_PRICE 또한 영향을 받을 것입니다. 이러한 현상을 삭제 이상이라고 합니다.
갱신 이상
- 종복 튜플 중 일부만 변경되어 데이터가 불일치하게 되는 모순의 문제
STORE_ID | STORE_NAME | MENU_NAME | MENU_PRICE |
20213321 | 죠스 떡볶이 | 순대 | 4000 |
20213322 | 혼밥남녀 | 고추장 삼겹살 | 7900 |
20213323 | 투썸플레이스 | 아메리카노(L) | 4600 |
20213321 | 죠스 떡볶이 | 로제 크림 떡볶이 | 3500 |
만약 죠스 떡볶이라는 가게명이 걸작 떡볶이로 변경되기 했다고 했을 때 하나의 레코드만 변경되었다면
4번째의 로제 크림 떡볶이를 가진 죠스 떡볶이는 의미가 없어진 데이터가 남게 된다.
갱신 시 실수로 누락된 데이터가 애매모호해지는 현상을 갱신 이상이라고 합니다.
삭제 이상
- 튜플을 삭제하면 다른 필요한 데이터까지 함께 삭제되는 데이터 손실 문제
STORE_ID | STORE_NAME | MENU_NAME | MENU_PRICE |
20213321 | 죠스 떡볶이 | 순대 | 4000 |
20213322 | 혼밥남녀 | 고추장 삼겹살 | 7900 |
20213323 | 투썸플레이스 | 아메리카노(L) | 4600 |
만약 죠스 떡볶이에서 순대라는 메뉴가 잘 안 팔려서 삭제하기로 했다. 그래서 해당 레코드를 드롭했는데 가게 정보까지 삭제되는 현상이 발생한다. 즉 메뉴를 삭제하기 위해 가게정보까지 삭제되는 현상을 삭제 이상이라고 한다.
어느 정도 데이터베이스를 만져보신 분들이라면 예제 테이블을 보자마자 기절하실 수도 있지만 예제로서 봐주시길 바랍니다.
결국 이러한 이상현상은 정규화가 되어 있지 않은 테이블 설계 때문인데, 정규화를 수행하기 위해서는 속성들 간의 관련성을 파악해야 합니다. 이러한 관련성을 함수적 종속성이라고 합니다.
함수적 종속성
함수적 종속성은 데이터들의 어떤 기준값에 의해 종속되는 현상을 지칭합니다.
이때 기준값을 결정자(Determinant)라고 하고 종속되는 값을 종속자(Dependent)라고 합니다.
즉 종속자는 근복적으로 결정자에 함수적 종속성을 가지고 있다.
결정자를 X로 치환하고 종속자를 Y이라고 했을 때 다음과 같이 표현합니다.
X -> Y
Y는 X에 함수적으로 종속한다라고 합니다.
STORE_ID | STORE_NAME | MENU_NAME | MENU_PRICE |
20213321 | 죠스 떡볶이 | 순대 | 4000 |
20213322 | 혼밥남녀 | 고추장 삼겹살 | 7900 |
20213323 | 투썸플레이스 | 아메리카노(L) | 4600 |
STORE_ID -> STORE_NAME
가게 이름은 가게 ID에 의해 결정됩니다.
즉 가게 ID는 가게 이름을 고유하게 결정할 수 있습니다.
부분적 함수적 종속성
{STORE_ID, STORE_NAME} -> MENU_NAME
메뉴 이름은 가게 이름과, 가게 ID에 의해 결정됩니다. 다만 여기서 여기서 부분적 함수적 종속성을 말할 수 있습니다.
- 속성 집합 Y가 속성집합 X의 전체가 아닌 일부분에도 함수적 종속이 됨을 의미합니다.
예제에서 메뉴 이름은 STORE_ID에도 함수적으로 종속될 수 있고, STORE_NAME에도 함수적으로 종속될 수 있습니다.
완전 함수적 종속
{STORE_ID, MENU_NAME} -> MENU_PRICE
특정 가게의 메뉴는 가게 ID와 메뉴 이름에 의해 결정됩니다.
여기서는 완전 함수적 종속을 이야기할 수 있습니다.
- 속성 집합Y가 속성집합 X전체에 대해서만 함수적 종속이 된 경우를 의미합니다.
예제에서 메뉴 가격은 메뉴 이름만으로 결정할 수 없습니다. 특정 가게에의 메뉴이기 때문에 해당 가게에서 정하는 가격이기 때문입니다. 또한 가게 ID만으로 가격을 정할 수 없습니다. 어떤 메뉴인지 모르기 때문입니다.
이렇게 여러 속성에 의해 결정되는 MENU_PRICE를 완전 함수적 종속된다 라고 합니다.
사실 더 들어가면 정규화를 적용해야 하기 때문에 여기서는 전부가 아닌 개념만 가져가고 추후 정규화에 관해 정리하겠습니다.
'Database' 카테고리의 다른 글
반정규화와 성능 (0) | 2021.04.24 |
---|---|
데이터 모델링 정규화(2) (0) | 2021.04.24 |
데이터 모델링 정규화의 성능 (0) | 2021.04.23 |
성능 데이터 모델링 (0) | 2021.04.23 |
데이터 모델링 식별자 (0) | 2021.04.23 |
댓글