[Spring#62] RDBMS 정규화 / 기본키와 외래키

김한준 Hanjun Kim·2024년 1월 8일
1

내일배움캠프

목록 보기
63/70

RDBMS 정규화

정규화 : 이상 현상을 막기 위함.

테이블에 데이터를 삽입/변경/삭제할 때 발생하는 이상 현상들을 막기 위해 재설계하는 것

1차 정규화 : 원자값으로 구성

한 user에 있는 정보가 여러 개 있을 때, 그 정보를 수정하려면 기존 값에서
변경된 것을 찾아서 바꿔줘야 하는 번거로움이 있다.
이를 방지하기 위해 각각 row 하나로 분리한다.
A -> a, b
A -> a
A -> b 이런식으로

2차 정규화 : 부분함수 종속 제거

부분적으로 연관되어 있는 값을 나누는 것.
A, B -> C와 연관이 있고, 또 A, B -> D와 연관이 있을 수 있는데 이를 나누는 것을 말한다.
A, B -> C / B -> D 이런식으로

3차 정규화 : 이행함수 종속 제거

A -> B, B -> C 으로 A -> C (삼단논법?) 가 되는 경우를 나누는 것을 말한다.
만약 B가 바뀐다면 C도 바꿔야 하므로 이 경우 자체를 만들지 않기 위함이다.

보이스-코드 정규화 : BCNF

결정자 함수이면서 후보키가 아닌 것을 제거.
결정자이지만 중복이 가능하다는것은 키로써 역할을 못 한다는 것.
즉, 후보키가 될 수 없다는 것이다.
(A와 C는 한 그룹) A -> B -> C를
A, C / B -> C 로 나눈다

4차 정규화 : 다치(다중값) 종속 제거

새로운 row를 추가하려면, 다른 column에도 값을 추가 해 줘야 한다.
이를 방지하기 위해 테이블을 나누는 것.

5차 정규화 : 조인 종속성 제거

조인 종속성 : 4차 정규화가 된 테이블들을 Join 시켰을 때, 정규화 이전의 table과 값이 달라지는 경우
이를 원래의 값이 나오도록 테이블을 나누는 것.


기본키와 외래키

기본키 : 관계형 데이터베이스에서 각 레코드(행)를 고유하게 식별하는 데 사용되는 열(또는 속성).

  1. 고유성
  2. Not Null
  3. 일반적으로 Auto Increment로 사용하거나 UUID 등이 사용되지만, UUID는 저장공간이 문제가 될 수도 있음.

외래키 : 한 테이블의 기본 키(또는 후보 키)가 다른 테이블의 일반 열로 사용되는 경우.

  1. 참조 무결성
  2. Null 허용 가능
  3. 다른 테이블과의 관계 설정하는 데 사용됨
  4. 데이터베이스의 일관성을 보장해준다. 일반 column값으로 넣어줄 수도 있지만, 다른 연산에 대해 값이 변경될 수도 있지만 FK로 사용하게 되면 그걸 어느정도 막아줄 수 있다.
1:1은 (남자 - 결혼 - 여자)
1:N : 부모 테이블의 PK를 자식 테이블에 FK로 집어 넣어 관계를 표현한다.(부모 - 가족 - 자식)
N:M : 서로가 서로를 1:N 관계로 보고 있는 것이다. 서로의 PK를 자신의 외래키 컬럼으로 갖고 있으면 된다.
(학원 - 강의 - 수강생)
profile
개발이 하고싶은 개발지망생

0개의 댓글