-
<김기창의 데이터 모델링 강의> 4장 모델링의 꽃, 정규화독서/전공서적(dev) 2024. 9. 3. 16:09
정규화의 순기능
- 중복데이터 제거
- 모델 확장성
- 저장공간 사용 최소화
- 모델 관리 수월
함수종속?
- 데이터 종속성. 한 속성의 값(결정자)을 알면 다른 속성의 값(종속자)이 저절로 결정되는, 두 속성 간의 일종의 제약.
- 결정자 역할을 속성과 종속자역할 속성이 하나의 엔티티에 존재.
- 데이터 모델링의 종속성 중 가장 중요.
- ex) 이름, 휴대전번, 주소는 유일하게 식별할 수 있는 속성이 아니다. 주민등록번호 속성이 결정자.
- 결정자라고 생각한 속성 값에 대한 종속자 속성 값이 두개 이상이 존재한다면 결정자를 잘못 선정한 것이다.
함수종속 이외에 종속 종류
- 그밖에 종속성으로 이행종속 (transitive dependency), 다가종속(multivalued dependency), 조인종속(join dependency) 가 있음 : 3,4,5정규화와 연관된 종속성.
- 파생종속? 추출속성과 연관된 종속성. 추출속성은 반드시 하나이상의 속성에 종속.
정규화
- 정규화가 어려운 이유? 업무 요건을 기반으로 판단해야 하기 때문에 업무에 대한 이해도가 높아야함. -> 모델링이 어려운 이유이기도 하다.
- 데이터 이상현상을 아노말리라고 한다.
- 기본적으로 중복데이터가 없으면 발생하지 않음.
- 관계형 DB 의 핵심 개념은 JOIN !
이노말리 종류
입력 아노말리: 팀이 결정되지 않았다면 새로운 선수를 등록하지 못함.
업데이트 이노말리: 잘못된 데이터 설계로 인해 의도치 않은 데이터까지 업데이트되는 현상.
삭제 이노말리 : 잘못된 데이터 설계로 인해 의도치 않은 데이터까지 삭제되는 현상.
실무에서 입력, 삭제 아노말리는 거의 볼 수 없지만 업데이트 이노말리는 자주 볼 수 있다. (중복데이터를 많이 사용하기 때문에)
1정규화.
- 이론은 쉽지만 실무에서는 적용하기 까다로운 정규화.
- 뜻: 속성의 값은 원자값(atom)이면서 나눌 수 없는 (uncut) 값이어야함.
1정규화와 연관된 속성 : 다가속성(multivalued attributes), 복합속성(composite attributes)
다가속성
예제) 고객엔티티에 전화번호1, 전화번호2, 전화번호3이 각 속성으로 3컬럼이 존재할 때.
- 속성을 명확하게 분석해서 세가지가 동일하게 전화번호를 의미한다는 것을 알아야 제1정규화 대상인지 알 수 있다.
- 전화번호가 더이상 늘어나지 않는다면 비정규화를 하는 것이 낫지만 계속해서 늘어난다면 정규화를 해야함 -> 이 판단을 해야한다.
복합속성
- 단일 속성을 세개의 속성으로 분리해서 정의.
예제) 휴대폰 번호에 대한 속성이 phone1, phone2, phone3 010,8888,8888 로 세개로 분리되어 관리하는 경우
- 업무에 따라서 분리해야한다. (불필요한 분리는 불편함을 야기)
2정규화
- 부분함수 종속 (주 식별자가 두개 이상일 때 일부 속성이 주 식별자 중 하나에만 종속되는 현상) 이 없으면 됨
- 일반속성은 주 식별자 전체에 종속되어야함.
3정규화
- 이행종속(간접적 함수종속=간접종속)이 없도록 해야함.
- 간접적이행종속이란? X <-(종속) Y <-(종속) <-(종속) Z 일 때, X <- Z 이렇게 종속된단 정의
3정규화의 사촌, BC 정규화
- 3정규화를 보강한 정규화. 실무에 적용하기 이상적.
- 슈퍼식별자와 연관이 있음.
- 슈퍼식별자란? 기존의 주 식별자 속성에 다른 속성이 포함된 식별자. 예를 들어 납품 테이블의 pk 가 (상품번호, 업체번호, 업체명)일 때 BC 정규화 위배. (업체명은 업체번호에 따라 다르다)
슈퍼식별자는 많은 문제를 야기하니 절대로 사용하면 안된다 !
4정규화
- 다가종속 제거
- ex) 홍길동 기술은 모델링, 튜닝이고 언어는 한국어, 영어, 중국어일 때. -> 모델링에 언어 3개 row , 튜닝에 언어 3개 row 총 6개 row 생성. 여기서 두 다가속성 사이(기술속성, 언어속성)에 관계가 존재하지 않으면 속성을 분리해야한다.
5정규화 (저자는 과하게 이론적이라고 표현)
- 아노말리가 발생하지 않을 때까지 릴레이션을 분해.- 조인종속을 제거하는 것. 어떤 릴레이션을 분해(정규화)한 후 다시 조인하면 원래의 릴레이션으로 복원할 수 있는 것을 조인종속이라함.- 5정규화에 따르면, 위의 예제에서 기술과 언어가 연관되어있는 경우 기술-언어로도 테이블이 하나 더 생성되어야함.- 어차피 사용하려면 다시 조인해야하기 때문에 분해하는 것이 실익이 없다.
결론
실정규화는 3정규형까지만 하는 것에 대해 의문을 품는 듯한 저자의 말.
'독서 > 전공서적(dev)' 카테고리의 다른 글
RDB 성능 높이는 법, 데이터베이스 튜닝 (feat. 비정규화 전에 고려할 것) (1) 2024.12.05 <김기창의 데이터 모델링 강의>(1장~3장) 내용을 기억하기 위한 글 (9) 2024.08.31