일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준 10951번
- 백준 1000번
- 백준 10951번 java
- 펭수 2020 달력
- 포항 지진
- RETURN ROW IF NO DATA FOUND
- Eclipse Althrithm
- 백준 10950번 c
- 백준 1000번 c++
- 백준 알고리즘
- 백준 10951번 c++
- 자바스크립트
- 백준 10951번 c
- 백준10950번 c++
- 이클립스 알고리즘 세팅
- 펭수 달력
- 백준 1000번 java
- oracle
- 백준 1000번 c
- 티스토리 초대장 이벤트
- 2020 펭수 달력
- 티스토리 초대장
- JavaScript
- 지진
- 백준 10950번
- 이클립스 알고리즘 환경
- 배열 복사
- nodejs
- 백준 10950번 java
- 오라클
- Today
- Total
스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네
데이터베이스 정규화 본문
최근 데이터베이스 정규화 관련 질문을 받았는데, 멍청하게도 제대로 된 답변이 안나오더라
뒤늦게라도 외양간 고치자
정규화 개념
정규화는 데이터베이스의 데이터를 구성하는 프로세스이다.
중복성 및 종속성을 제거하여 데이터베이스의 유연성을 높이고, 데이터를 보호하도록 설계된 규칙에 따라 테이블을 만들고, 해당 테이블 간의 관계를 설정한다.
데이터가 중복된다면?
디스크 공간이 낭비되며, 유지 관리상 문제가 발생한다.
여러 위치의 데이터를 변경해야 하는 경우에 모든 위치에서 데이터를 정확히 동일한 방식으로 변경해야 한다.
종속성
사용자가 특정 고객의 주소를 찾으려면, Customers 테이블을 확인하지만,
정규화 방법
제 1 정규형 (1NF ; 1 Normal Form)
도메인이 원자값만으로 되어야 한다.
- 모든 애트리뷰트에 반복그룹이 나타나지 않는다.
- 릴레이션 R의 모든 애트리뷰트가 원자갑(Atomic value)를 갖는다.
반복그룹이란?
복합 애트리뷰트(Composite Attribute), 다치 애트리뷰트(Multivalue Attribute), 중첩 릴레이션(Nested Relation)
예시)
고객테이블
고객번호 |
고객명 |
취미 |
1 |
윤종신 |
영화, 여행 |
2 |
김연우 |
등산 |
고객테이블-1 // 튜플 추가
고객번호 |
고객명 |
취미 |
1 |
윤종신 |
영화 |
1 |
윤종신 |
여행 |
2 |
김연우 |
등산 |
고객테이블-2 // 컬럼 추가
고객번호 |
고객명 |
취미 1 |
취미 2 |
1 |
윤종신 |
영화 |
여행 |
2 |
김연우 |
등산 |
제 2 정규형 (2NF ; 2 Normal Form)
부분 함수적 종속성 제거
- 릴레이션 R이 제 1 정규형을 만족
- 릴레이션 R이 키를 구성하지 않는 모든 애트리뷰터가 R의 기본키에 완전함수종속(Full Functional Dependency)
예시)
학번 |
학과명 |
학과전화번호 |
과목번호 |
학점 |
▼ 부분 함수 종속성 제거를 위해 두 릴레이션으로 분리
학번 |
학과명 |
학과전화번호 |
학번 |
과목번호 |
학점 |
제 3 정규형 (3NF ; 3 Normal Form)
이행적 함수적 종속성 제거
- 릴레이션 R이 제 2 정규형을 만족
- 키가 아닌 모든 애트리뷰트가 릴레이션 R의 기본 키에 이행적으로 종속하지 않는 것(No Transitive Functional Dependency)
예시)
학생테이블
학번 |
학과명 |
학과전화번호 |
▼ 이행적 함수적 종속성 제거
학번 |
학과명 |
학과명 |
학과전화번호 |
BCNF (Boyce - Codd NF)
후보키가 아닌 결정자 제거
'개발 > Oracle SQL' 카테고리의 다른 글
ORACLE Synonym (0) | 2018.07.18 |
---|---|
ORACLE XE에서 8080 포트번호 변경방법, 톰캣 충돌 시 해결방법 (1) | 2018.06.19 |
Mac OS에서 인코딩 UTF-8 설정하기 (한글 깨질 때 해결방법) (0) | 2017.12.04 |
AUTO_INCREMENT 초기화 및 재정렬 (0) | 2017.11.28 |
UPDATE 쿼리문 실행시 ERROR CODE 1175 (0) | 2017.11.28 |