목차
- Well Struction relation
- Functional dependency
- Normalization
1. Well Struction relation
relation?
- 이름이 있는 데이터를 저장하는 2차원의 테이블
- ER Modeling -> Relational Modeling -> Normalization 과정
문제의 소지가 있는 경우
- Anomaly: 데이터의 중복이 발생해서 데이터 불일치가 일어날 수 있음
- Modification Anomaly
- Insertion Anomaly
- Deletion Anomaly
Well Struction Relation?
하나의 relation은 2개 이상의 entity type의 정보를 가지면 안된다
- 최소한의 데이터 중복을 포함하고, 3가지 anomaly들을 피하고 사용자가 데이터를 사용하고, 수정하고, 지우는 것이 가능한 relation
- Logical database design의 목표는 well struction relation을 만드는 것임
2. Functional Dependency
- 수학의 함수처럼 어떠한 값을 통해 종속 관계에 있는 다른 값을 유일하게 결정할 수 있다는 것
- 정규화에서 Functional dependency 개념은 중요
- X -> Y
- X의 값 각각에 대해 시간에 관계없이 항상 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기
- X는 결정자(determinant)
- Y는 종속자(dependent)
- Full functional dependency
- Dependent가 determinant의 모든 attribute에 종속
- determinant의 attribute 1개만 제거하더라도 종속이 안됨
- Primary Key가 여러 속성으로 구성되어 있을경우 Primary Key를 구성하는 모든 속성이 포함된 Primary Key의 부분집합에 종속된 경우
- Composite primary key일 경우도 가능함
- Partial functional dependency
- Dependent가 determinant의 모든 attribute에 종속되지 않을 때
- Transitive functional dependency
- A -> B, B -> C, A -> C의 경우
- C는 A에 transitively dependent함
- 여러가지 anomaly를 야기할 수 있음
3. Normalization
Normalization
- Relational modeling에서 중복된 데이터가 최소화되도록 데이터베이스의 구조를 결정하는 것을 정규화(normalization)
- Anomaly가 있는 한 개의 relation을 well struction relation 여러 개로 쪼개는 과정
- 더욱 효율적으로 데이터에 대한 연산을 수행 가능
- 여러 stage로 되어있고, normal form과 연관되어 있음
- First normal form
- Second normal form
- Third normal form
- Industry에서는 third normal form 정도까지 되면 well struction relation이라고 함
- Normalization 목표
- 데이터 중복을 최소화
- 데이터 유지를 쉽게 해줌
- referential integrity의 시행을 간단히 해줌
- 정규화가 진행되지 않은 form
- 한 컬럼에 1개 이상의 값이 들어감
- 이렇게 되면 relation 자체가 될 수 없음
- relation의 속성: 이름이 unique, 모든 attribute는 쪼갤 수 없음, 모든 row, column의 이름은 unique,,,
- 모든 attribute에 값은 쪼갤 수 없어야 함
- multi valued, composite이면 안됨
- 한 컬럼에는 한 개의 값만 들어감
- 모든 relation은 first normal form
<1NF 과정>
1. 여러 개의 값이 들어가 있는 컬럼을 쪼개줌
- First Normal Form이어야 함
- 모든 non-primary-key attribute는 fully functional dependcy
- Partial funcional dependency가 없어야 함
<2NF 과정>
1. Partial functional dependency를 야기하는 primary key를 가지고 새로운 relation을 만듦
2. 새로운 relation의 primary key에 종속적인 attribute들을 가져옴
ex)
EMPLOYEE2(EMP_ID, Course_Title, Name, Dept_Name, Salary, Date_Completed)
-->
EMPLOYEE2(EMP_ID, Course_Title, Date_Completed)
Foreign Key(EMP_ID) references EMPLOYEE1(EMP_ID)
EMPLOYEE1(EMP_ID, Name, Dept_Name, Salary)
- Second Normal Form이어야 함
- primary key에 transitive functional dependency가 없어야 함
- 즉, 아래와 같은 상황이면 안됨
- primary key -> non-primary-key ayytubute A1
- non-primary-key ayytubute A1 -> non-primary-key ayytubute A2
<3NF 과정>
R1(PK, A1, A2, ,,,) / PK -> A1 -> A2일때
1. A1을 primary key로 하는 새로운 R2를 만듦
2. A1을 R1에서 지우지 말고 남김(FK로 사용하기 위해)
3. R2에 R1에서 A1에 종속적인 relation들을 옮김
ex)
R1(PK, A1, A2, ,,,)
-->
R1(PK, A1, A2, ,,,)
Foreign Key(A1) references R1(A1)
R2(A1, A2)