일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 제1정규형
- 제2정규형
- Workbench
- mysql
- 크롬원격데스크톱
- 제3정규형
- 불완전서브타입
- 제5정규형
- order-by
- 공통코드
- 요구사항명세서
- 제4정규형
- index
- SQL
- group-by
- 함수종속
- 서브타입
- 워크벤치
- 정규형
- 중복서브타입
- 샘플데이터
- 배타서브타입
- bc정규형
- 인덱스
- 완전서브타입
- vue3
- 실행계획
- 데이터통합
- 물리모델
- 더미데이터
- Today
- Total
domsam - IT 기술 블로그
제1정규형 (First Normal Form) 본문
제1정규형을 간단히 설명하면 모든 속성은 반드시 하나의 값을 가져야 한다는 것이다. 실무에서 한 속성에 여러값을 가지는 릴레이션은 매우 드물다. 하지만 한 속성에 물리적으로 하나의 값을 가지고 있을 뿐, 논리적으로 자세히 살펴보면 여러 값을 가진 것과 마찬가지인 경우가 존재한다. 같은 성격의 데이터를 여러 속성으로 나열해 관리하는 것도 이에 해당한다.
제1정규형과 관련된 속성은 다가 속성(Multivalued Attributes)과 복합 속성(Composite Attributes)이 있다.
1. 다가 속성
다가 속성은 같은 종류의 값을 여러 개 가지는 속성을 의미한다. 예를 들어 어떤 사람이 전화번호가 여러개 있고 그것을 관리를 하고 싶다고 했을 때 한 속성에 여러개의 전화번호를 저장하면 제1정규형을 위반하게 된다. 이때 전화번호를 다가 속성이라고 한다.
그림(1) 릴레이션은 제1정규형을 위반한 릴레이션이다. 제1정규형을 만족하는 새로운 릴레이션을 만들면 그림(2)와 같다.
그림(2) 릴레이션을 모델로 표현하면 그림(3)과 같다. 왼쪽은 그림(1) 릴레이션의 모델, 오른쪽은 그림(2) 릴레이션의 모델이다.
1-1 제1정규형을 만족하는 중복이 존재하는 릴레이션
그림(4) 릴레이션은 물리적으로는 모든 속성이 하나의 값만 가지고 있지만 논리적으로는 하나의 값을 가지고 있다고 볼 수 없다. 물리적으로는 제1정규형이라고 볼 수 있지만 논리적으로는 제1정규형이 아니다. 고객이름과 주민등록번호 속성은 중복되었고 고객ID에 종속돼서 이 릴레이션은 결국 제2정규형을 만족하지 못 한다.
하지만 정규형 모델은 때에 따라 쿼리(조회) 성능을 고려해야 한다. 만약 관리해야할 전화번호 종류가 한정되어 있고 향후에 더는 늘어나지 않을 확률이 높다면 그림(5) 릴레이션으로 관리하는 것이 효율적일 수 있다. 집전화번호, 사무실전화번호, 휴대전화번호 속성은 NULL 허용이다. 상황에 따라 비정규화를 진행할 수 있지만 가능한 비정규화는 사용하지 않는 것이 좋다. 모두 정규화하고 성능 이슈가 있는 경우에만 비정규화로 해결할 수 있다면 진행한다.
2. 복합 속성
하나의 속성이 여러개의 속성으로 분리될 수 있을 때 이를 복합 속성이라 한다. 대표적인 복합 속성이 그림(6)과 같은 주소 속성이다. 주소 속성에는 시/구/동/번지 데이터를 관리하면 복합 속성이 된다. 복합 속성은 원칙적으로 하나의 의미만을 나타내는 속성들로 분리해야 한다. 주의해야 할 점은 복합 속성이라고 무조건 분리하면 안 된다. 데이터 관리 수준(요건)에 따라 판단되어야 한다. 주소는 단순하게 출력때만 사용한다면 복합 속성이라고 하더라도 분리하지 않는 것이 관리면에서 유리하고 특정 구 혹은 특정 동 단위로 데이터를 출력해야 한다면 분리하는 것이 유리하다.
날짜도 연도, 월, 일로 구성된 복합 속성이다. 특수한 때를 제외하고 날짜를 분리하여 관리하지는 않는다.
이와 유사하게 주 식별자로 사용하는 속성에 여러 의미를 부여할 때가 많다. 예를 들어 계좌번호는 어떤 지점에서 해당 일에 몇 번째로 만들어졌는지에 대한 내용이 포함되도록 관리하는 편이다. 이처럼 하나의 속성에 여러 의미가 존재하는 것은 바람직하지 않지만 상황에 따라 달라질 수 있다.
3. 정리
다가 속성은 엔터티를 추가하고 복합 속성은 속성을 추가해 제1정규형을 만족할 수 있다. 제1정규형에서 중요한 원칙은 한 릴레이션에서 반복 형태의 속성이 있어서는 안 되는 것이다. 그림(7) 릴레이션은 상품코드와 수량이 반복되는 속성이다.
주문을 할 때 3개의 상품만 구매할 수 있도록 제한을 걸고 싶다면 그림(7) 릴레이션도 나쁜 선택은 아니다. 그렇지만 스키마(엔터티, 속성, 관계)가 가능한 변경되지 않는 유연한 모델을 구축하는 것이 모데러의 중요한 역할이기에 그림(7) 릴레이션은 바람직하지 않다.
이렇게 반복되는 속성을 새로운 엔터티로 생성해 정규화하면 그림(8)과 같은 제1정규형 릴레이션이 된다.
'SQL > 정규형' 카테고리의 다른 글
BC정규형 (Boyce-Codd Normal Form) (0) | 2025.02.21 |
---|---|
제3정규형 (Third Normal Form) (0) | 2025.02.21 |
제2정규형 (Second Normal Form) (0) | 2025.02.21 |
정규화(Normalization), 정규형(Normal Form) (0) | 2025.02.19 |
함수 종속 (0) | 2025.02.18 |