CS 공부

RDBMS 정규화

정규화란 테이블 간의 중복된 데이터를 허용하지 않는 것이다.

이 과정을 통해 삽입, 변경, 삭제 이상을 예방하여 데이터의 무결성을 지키고 DB의 저장 용량을 줄이는 효과가 있다.

비공식적으로는 제 3정규화까지 진행된 데이터베이스를 정규화되었다라고 한다.

 

제 1 정규화는 컬럼이 하나의 값을 가지도록 테이블을 분해하는 것이다.

예를 들어 내가 주문한 음식이 피자, 치킨 이라면 (나, 피자&치킨)이 아니고 (나, 피자), (나, 치킨) 이렇게 두개의 레코드로 분리하는 것이다.

 

제 2 정규화란 제 1 정규화가 완료된 테이블을 대상으로 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.

어떤 속성 A를 알면 속성 B도 정해지는 관계를 종속성 관계라고 하며 A를 B의 결정자라고 부른다.

완전 함수 종속은 기본 키의 부분집합이 결정자가 되어서는 안됨을 의미한다.

예를 들어 (학번, 강의 이름)을 복합 키로 강의실, 성적 컬럼이 존재한다고 생각해보자.

성적은 (학번, 강의 이름) 이 함께 있어야 결정이 되지만, 강의실은 강의 이름 하나만으로도 결정이 되는 값이다. 이 경우 기본 키의 부분집합이 성적 속성의 결정자 이므로 (학번, 강의 이름) → 성적, 강의 이름→ 강의실 로 테이블을 분해해준다.

 

제 3 정규화란 제 2 정규화가 완료된 테이블을 대상으로 이행적 종속이 없도록 테이블을 분해하는 것이다. 이행적 종속이란 A가 B의 결정자이고 B가 C의 결정자일 때 A가 C의 결정자가 되는 것을 의미한다.

학번 → 강의 이름 → 수강료 가 한 테이블에 있다면 학번 → 강의 이름, 강의 이름 → 수강료 테이블로 분리해준다.

이렇게 되면 학번에 따른 강의 이름이 변경되었을 때, 강의와 다른 수강료가 기록되는 상황을 예방할 수 있다.

 

BCNF 정규화

제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.

(학생번호, 강좌 이름) 기본키가 교수 이름을 결정하고 있다고 하자.

그러나 교수 이름이 강좌 이름의 결정자이지만 후보 키가 아니기 때문에 학생번호 → 교수, 교수 → 강좌 이름으로 분리해준다.

 

 

Primary Key, Foreign Key에 대해 설명해주세요.

기본 키

기본 키란 해당 레코드를 판별할 때 기준이 되는 아주 중요한 키로 후보키의 성질인 유일성과 최소성을 가진다. 값이 변동이 적은 것이 좋고, Null 값이 포함될 수 있는 후보키는 부적절하다.

하나의 테이블에는 하나의 기본 키만이 존재한다.

 

외래 키

외래 키란 테이블 간의 관계를 나타내며 다른 테이블의 기본 키를 참조해 외래 키로 사용한다.

외래 키의 가장 큰 장점은 데이터 무결성을 보장해준다는 점이다.

외래 키를 가진 테이블이 참조하는 테이블의 기본 키가 변경되었을 때 자동으로 외래 키도 변경되게 하여 무결성을 보장한다.

 

슈퍼 키

유일성을 만족하고 최소성을 만족하지 않는 키이다.

슈퍼 키가 얼마나 길이가 길던 간에 이 슈퍼 키가 하나의 레코드만을 보장한다면 슈퍼 키라고 부를 수 있다.

예를 들어 학생 번호가 테이블 내에서 유일한 값임을 보장한다고 하자.

이러면 학생 번호는 단독으로도 슈퍼 키인데, (학생번호, 학생 이름, 학생 학점, 학생 머리 스타일) 이라는 복합 키도 학생 번호 덕분에 유일한 레코드를 보장해주기 때문에 이 복합 키 또한 슈퍼 키이다.

 

후보 키

후보 키는 유일성을 만족하고 최소성 또한 만족하는 키이다.

위 슈퍼 키 예시에서 나머지 부분을 빼고 학생 번호만 주어진다면 이것이 후보 키이다.

 

복합 키

두 개 이상의 컬럼을 묶어서 기본 키로 설정하는 것

 

대체 키

기본 키를 제외한 나머지 후보 키들을 말한다.

 

느낀 점

진짜 팀장급 실력 아닌데 리더를 맡게 되어서 힘들지만 오히려 기회다 화이팅하자.

'TIL' 카테고리의 다른 글

[24.01.10]  (1) 2024.01.10
[24.01.09]  (0) 2024.01.10
[24.01.05]  (0) 2024.01.05
[24.01.04]  (1) 2024.01.05
[24.01.03]  (2) 2024.01.04

+ Recent posts