정규화(normalization)와 역정규화(denormalization)
- RDBMS 설계에서 중복이 최소화 되도록 데이터를 구조화 하는 프로세스
- 자료 중복으로 인해 이상현상이 발생할 수 있어 이를 최소화하기 위해서 사용
- 이상 현상을 최소화 하기 위해 테이블을 쪼개는 작업
삭제 이상 | 원치 않는 데이터도 삭제 | member 의 id 를 삭제하려 했는데 모두 삭제 |
삽입 이상 | 원치 않는 데이터가 삽입 | profile 의 name 을 넣었는데 grade 에도 삽입 |
갱신 이상 | 데이터 일부만 갱신 | 모든 id 를 변경 하려 했는데 grade 의 id 만 변경 |
- 정규화(normalization) 과정은 총 여섯 과정이 있음
- 실제로는 3NF까지만 사용(3NF가 되면 정규화가 된 것으로 간주)
- 각 정규형은 이전 단계들을 모두 만족 해야만 함
1NF | 모든 항목에 값이 있어야 하며(NOT NULL), 중복열이 없어야 함 |
2NF | 개체의 속성이 한 식별자에 종속되어야 함(부분 함수적 종속 제거) |
3NF | X로 인해 Y가 결정되고, Y로 인해 Z가 결정되는 경우(이행 함수 종속성 제거) |
1NF(Normal Form)
- 모든 항목에 값이 있어야 함(NOT NULL)
- 중복되는 데이터가 없어야 함
2NF(Normal Form)
- 개체의 속성이 한 식별자에 종속되어야 함
- 하나의 식별자로 하나의 데이터를 가져올 수 있어야 함
3NF(Normal Form)
- X로 인해 Y가 결정되고, Y로 인해 Z가 결정되는 경우(이행 함수 종속성 제거)
- 하나의 값이 변경됨에 따라 다른 값들이 연속적으로 변경되지 않아야함
역정규화(denormalization)
- 테이블을 합하는 작업
- 지나친 정규화는 쿼리를 복잡하게 만들고 성능을 저하시키므로 다시 합쳐(6개의 테이블을 join 한다면?)
'코딩도전기 > DB(mariaDB)' 카테고리의 다른 글
CODO Day37_DB_JDBC(Java Data Base Connectivity) (0) | 2023.03.27 |
---|---|
CODO Day36_DB_ERD(논리설계/물리설계) (0) | 2023.03.24 |
CODO Day35_DB(Auto_increment/Limit&offset/Function) (0) | 2023.03.24 |
CODO Day35_DB(In&Exists/Any&All/Index/View) (0) | 2023.03.22 |
CODO Day34_DB(Join/Set) (0) | 2023.03.22 |