-
[Database Normalization]
한 테이블에서 중복성을 막기 위한 것으로
한 테이블을 여러 테이블로 올바르게 쪼개는 과정임
normalization을 하면 테이블의 개수가 늘어나지만
각 테이블의 column수가 줄어든다
나중에 서로 연결된 데이터를 알고 싶으면 각 나눈 테이블들을 JOIN하여 찾아내야한다
즉 테이블 개수 많아지는데 테이블 크기는 작아지고 JOIN 횟수는 많아진다
[Functional Dependency]
column X에 따라 column Y가 유일하게(uniquely) 결정될때
"X가 Y를 함수적으로 결정한다"
"Y가 X에 함수적으로 의존한다"
라고 말할 수 있고, 두 집합 사이의 이러한 제약 관계를
functional dependency 라고 부름
X -> Y
ex) 학생 고유ID는 학생 이름, 학생 나이, 학생 학과를 결정짓는다
[1NF]
한 column이 2개 이상의 value를 가질 수 없음
1NF는 단순히 column만 늘리는 작업임
[2NF]
부분적 함수 종속성이 존재하면 안됨
2NF부터는 테이블 분리 작업이 들어감!
부분적 함수 종속성
candidate key 전체가 아닌 일부에 종속되는 attribute가 존재하는 것을 말함
즉 candidate key가 (id, lab_id)이고 이 두 개로 (name, lab_name)을 찾도록 되어있는데
사실상 id만으로도 name을 찾을 수 있고 lab_id만으로도 lab_name을 찾아올 수 있으므로
이거슨 부분적 함수 종속이다
즉 잘못만들어진 테이블이라는 거임
다른 말로 하면
모든 non-prime attribute는 모든 key에 fully dependent 해야함
모든 non-prime attribute는 어떤 key에도 partially dependent하면 안된다
여기서 non-prime attribute는 column(attribute) that is not part of any candidate key of the relation 을 말한다
cf)
원래 테이블에서 일부를 분리할때 원래 테이블의 키 값도 가져가야함
그래야지 나중에 JOIN까지 할 수 있기 때문임.
원래 테이블과의 연결고리 역할을 하는 키를 넣어놔야함
[3NF]
이행적 함수 관계가 없어야함!
모든 non-prime attribute는 어떤 key에도 transitively dependent 하면 안된다
즉 trasitive relation이 존재하면 안된다!위와 같이 transitive relation이 존재하면
즉 X->Y, Y->Z 가 모두 한 테이블 내에 존재하여 X->Z 도 만족할때
이걸 transitive relation이라고 부른다. transitively dependent 하다고 함
이런 transitive relation을 분리하는 작업이 3NF 과정임!
위는 해당 테이블이 왜 transitive dependent 인지에 대한 설명임
추가적으로 transitive dependent 관계일때 Y나 Z는 key의 부분집합 즉 key의 attribute이면 안됨!
그래서 3NF 과정을 통해 테이블을 분리하면 위와 같이 됨
transitive relation을 유발하는 empl_id와 empl_name을 다른 테이블로 분리하므로써
기존 테이블에서의 empl_name이 중복되는 상황이 없어짐
여기서 empl_id는 남겨둬야하는데
그 이유는 나중에 JOIN을 통해 empl_name을 알려면 연결고리가 있어야하기 때문
empl_id가 연결고리 역할을 해주므로 기존 테이블에서 empl_id는 남겨둬야하고
새롭게 생긴 EMPLOYEE 테이블의 기본키는 empl_id로 설정해줘야함!
'DB' 카테고리의 다른 글
[DB] Transaction Conflict Serializability (0) 2024.11.17 ACID (0) 2024.11.17 스케일인 스케일아웃 (0) 2024.03.29 옵티마이저 (0) 2024.03.27 데이터베이스 엔진 (0) 2024.03.03