정규화(Normalization)란?
-
정규화는 종속적으로 설계된 관계형 스키마가 하나의 릴레이션에 표현될 수 있도록 분해하는 과정입니다.
-
데이터의 중복성을 최소화하고 일관성을 보장하기 위한 과정입니다.
-
정규화를 거치지 않으면 이상(Anormaly) 문제가 발생합니다.
-
총 6단계가 있지만 대체로 1~3 정규화 과정을 거칩니다.
※ 이상현상이란?
정규화되지 않은 릴레이션에서 예기치 않게 발생하는 문제로 삽입이상, 갱신이상, 삭제이상이 있습니다.
- 삽입이상: 원하지 않는 값이 삽입
- 삭제이상: 원하지 않는 값이 연쇄 삭제
- 갱신이상: 일부 데이터만 변경
정규화 과정
- 제 1정규형: 정규화되지 않은 릴레이션에서 도메일을 원자값으로 쪼갬
- 제 2정규형: 제 1정규형에서 부분 함수 종속을 제거
- 제 3정규형: 이행적 함수 종속을 제거
- BCNF : 결정자가 후보키가 아닌 함수 종속 제거
- 제 4정규형: 다치 종속 제거
- 제 5정규형: 후보키를 통하지 않는 조인 종속의 제거
※ 함수적 종속이란?
함수적 종속은 어떤 릴레이션에서 속성들의 부분 집합을 X,Y라 할 때, 특정 튜플에서 X의 값이 Y의 값을 함수적으로 결정한다면 Y가 X에 함수적으로 종속되었다고 합니다.
모든 테이블을 정규화하는 것이 좋은건가?
관계형 데이터베이스 관리 시스템(RDBMS)이란?
관계형 데이터베이스를 만들고 업데이트하고 관리하는 데 사용하는 프로그램입니다. 잘 알려진 RDBMS의 예로는 MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database가 있습니다.
관계형 데이터베이스 특징
- 데이터의 분류, 정렬, 탐색속도가 빠르다
- 오랫동안 사용된 만큼 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장해 준다.
- 무결성 제약: 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러가지 규칙을 나타낸다. 개체, 참조, 도메인 등의 제약조건이 존재한다.
관계형 데이터베이스 구조
- 속성(Attribute): 릴레이션을 구성하는 각각의 열
- 튜플(Tuple): 릴레이션을 구성하는 각각의 행
- 카디널리티(Cardinality): 튜플의 수
- 도메인(Domain): 하나의 속성이 취할 수 있는 같은 원자값들의 집합
키(Key)란?
검색, 정렬 시 Tuple을 구분할 수 있는 기준이 되는 Attribute
종류
-
후보키: Candidate Key
- Tuple을 유일하게 식벽하기 위해 사용하는 속성들의 부분 집합이다. 기본키로 사용할 수 있다.
- 2가지 조건을 만족해야 한다.
- 유일성: 하나의 Key로 하나의 Tuple을 유일하게 식별할 수 있어야 함
- 최소성: 꼭 필요한 속성으로만 구성되어야 함
-
기본키: Primary Key
- 후보키에서 선택된 1개의 키, 유일성과 최소성을 만족하며 null값을 가질 수 없다.(개체 무결성)
- 특정 튜플을 유일하게 구별할 수 있는 속성임
-
외래키: Foreign Key
- 릴레이션을 참조하기 위한 키, null값 또는 참조하는 릴레이션의 PK값이어야 한다.(참조 무결성)
-
대체키: Alternate Key
- 후보키 중 기본키를 제외한 나머지 Key를 말한다.
-
슈퍼키: Super Key
- 유일성을 만족하며 2개 이상의 속성으로 이뤄진 키
- 유일성은 만족하지만, 최소성은 만족하지 않는다.