티스토리 뷰
정규화란?
-데이터베이스 설계과정에서 데이터간의 중복을 최소화 하고 데이터의 구조를 효과적으로 조직화하기 위한 형식입니다.
정규화의 주 목적은 데이터 베이스의 이상 현상을 줄여 데이터의 일관성과 정확성을 유지하는 것 입니다.
즉, 테이블을 잘개 쪼개 데이터의 중복성을 제거하며, 입력,수정,삭제의 성능이 향상됩니다.
정규화 장점
- 중복 제거
-정규화를 통해 데이터의 중복이 최소화됩니다. 이로 인해 데이터의 일관성과 무결성이 향상되며, 저장 공간도 절약됩니다. - 데이터 무결성 향상
-정규화 과정에서 데이터베이스에 적용되는 무결성 규칙이 데이터의 정확성과 일관성을 유지하는 데 도움을 줍니다. - 이상현상 제거
-정규화를 통해 삽입, 삭제, 갱싱 이상 현상을 방지하며, 더욱 효율적으로 데이터관리를 합니다. - 설계 명확성
정규화 과정은 데이터베이스 설계를 체계적으로 만들어, 다른 개발자나 엔지니어가 데이터베이스 구조를 이해하고 작업하기 더 쉬워집니다.
이상현상 종류
- 삽입 이상(Insertion Anomaly)
-새로운 데이터를 추가하기 위해 불필요한 데이터까지 같이 입력해야 하는 문제가 생기는 이상현상입니다.
예를 들어 학생과 수강과목을 같은 테이블에 저장할 경우, 해당 학생이 수강하는 과목이 없으면 학생의 정보만 추가하는 것이 어려운게 삽입이상의 대표적인 예시입니다. - 삭제 이상(Deletion Anomaly)
-어떤 데이터를 삭제할 때 의도하지 않은 다른 데이터까지 같이 삭제되는 문제가 생기는 이상현상입니다.
예를 들어 특정학생이 수강하는 마지막 과목을 삭제하면, 해당 학생이 수강하는 과목이 더 이상 없어 학생의 정보까지 같이 삭제될 수 있습니다. - 갱신 이상(Update Anomaly)
-데이터를 수정할 때 중복된 데이터로 인해 일관성이 없어지는 문제가 생기는 이상현상입니다.
예를 들어 특정학생의 주소 정보가 여러 행에 걸쳐 중복 저장되어 있을 경우, 주소를 변경할때 모든 행에서 주소를 일관되게 수정하지 않으면 데이터의 불일치가 발생합니다.
정규형 종류
- 제 1 정규형
-각 칼럼의 값이 원자값(더 이상 쪼개질 수 없는 단위)이어야 합니다. 즉, 속성에 해당하는 모든 속성 값이 하나만 있어야합니다. - 제 2 정규형
-제 1 정규형을 만족시키면서 기본키(Primary Key)가 아닌 속성들이 기본키에 완전 함수 종속되어야 합니다.
이로 인해 부분적 함수 종속성을 제거하는 효과를 냅니다. - 제 3 정규형
-제 2 정규형을 만족시키면서 기본키가 아닌 모든 속성이 기본키에 대해서 이행적 함수 종속성을 가지지 않아야합니다. 즉, 기본키 이외의 속성이 그외 다른 속성을 결정할 수 없습니다. - BCNF
-제 3정규형에서 조금더 강화시킨 개념으로, 제 3정규형에서 다른 키를 결정 짓는 결정자 키가 후보 키의 부분집합이어야 합니다. - 제 4 정규형
-BCNF를 만족 시키면서, 다치 종속성을 제거한 정규형입니다.
반정규화란?
-데이터베이스 설계에서 일부러 데이터 중복을 허용하거나, 테이블 구조를 단순화 시키는 과정을 뜻합니다. 반 정규화는 데이터의 접근성과 성능을 향상 시키기 위해 수행되며, 정규화 과정에서 분리되었던 테이블들을 다시 통합시키거나, 계산된 값을 미리 저장하는 등의 방법으로 이루어지며 정규화에 비해 조회의 성능이 향샹됩니다.
반정규화 장점
- 성능 향상
-복잡한 조인 연산을 줄여 쿼리 향상을 향상시킬 수 있습니다.
미리 계산된 데이터나 요약된 데이터를 저장함으로써, 연산 시간을 단축시킬 수 있습니다. - 데이터 접근성 향상
-데이터가 중앙화되거나 단순화되면, 애플리케이션 또는사용자가 데이터를 쉽게 조회하거나 사용할 수 있습니다. - 단순한 쿼리
-반정규화에 따라 데이터베이스 구조가 단순해지면, 쿼리작성이 더 간단해지며, 응용 프로그램의 코드 복잡성도 줄어듭니다.
슈퍼 타입 vs 서브타입
- 슈퍼 타입(Supertype)
-상위 수준의 엔티티며, 여러 서브타입들의 공통적인 속성, 관계를 포함합니다. - 서브 타입(Subtype)
-슈퍼 타입의 속성 및 관계를 상속받고, 추가로 서브타입의 고유한 속성을 가질 수 있습니다.
'DB' 카테고리의 다른 글
트랜잭션 Lock (0) | 2023.09.12 |
---|---|
데이터베이스 CLI 명령어 (MYSQL 버전) (0) | 2023.09.02 |
데이터모델링의 이해 (0) | 2023.08.25 |
인덱스(Index) (0) | 2023.08.14 |
옵티마이저(Optimizer) (0) | 2023.08.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DB
- 파인튜닝
- 네트워크
- 자동화
- 메세지큐
- nat
- 클라우드
- 컴퓨터구조
- 테이블
- 웹소켓
- 소프트웨어공학
- 보안
- 스프링
- 도커
- 데이터베이스
- 프로토콜
- 쿼리
- JPA
- 배포
- 자바
- 컨테이너
- 깃
- 포트포워딩
- sql
- 데이터
- IP주소
- 서버
- 인공지능
- 문법
- 깃허브
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함