본문 바로가기
📝 회고/✅ 22년 회고

[일일 회고] 22.04.13 - "DB 정규화와 프로젝트 코드 리뷰"

by kukim 2022. 4. 13.

DB 정규화

오늘은 호눅스 마스터 클래스 시간에 DB 정규화에 대해 이야기 나눴다. 무척이나 유용한 시간이었고 다소 수학적일 수 있는 접근을 말로 풀어 설명해준 호눅스에 감사함을 보내며 간단히 정리한다.(틀릴 수 있다)

 

데이터베이스 설계

데이터베이스 설계란 테이블을 만드는 과정이다.

테이블을 만드는 과정은 애트리뷰트(속성)를 어떻게 묶을 것인지 결정하는 것이다.

좋은 테이블을 설계한다는 것은 애트리뷰트를 잘 묶는 방법이다.

 

잘 설계된 테이블이란 다른 테이블의 애트리뷰트 값을 읽어오는 것은, 외래키의 참조를 통해서만 가능해야 한다.

 

잘못된 테이블 설계의 문제점

1. 데이터 중복 발생

하나의 테이블에 모든 속성이 들어있을 수 있다. 하지만 공간이 낭비된다. (현대는 저장비용이 저렴해 문제가 되지 않을 수 있기도 하다.)

 

2. 이상 현상

- 삽입 이상 : 데이터 넣을 때 불필요한 속성도 넣어야 한다.

- 삭제 이상 : 해당 유저 정보 삭제하면 연결되어 있는 데이터 모두 삭제될 수 있다.

- 갱신 이상 : 해당 유저 정보 바꾸면 연결된 데이터 모두 수정해야 할 수 있다.

 

정규형 Normal Form

이상현상이 잘 안 생기는 좋은 테이블이 갖추어야 할 조건이다.

1, 2, 3, 4, 5 정규형, BCNF가 있지만 보통 (1,2,3 정규형과 BCNF를 지키면 문제 발생하지 않는다.)

 

정규화 (Normalization)

테이블이 정규형을 만족할 수 있도록 분해하는 과정이다.

 

함수적 종속성

X -> Y 란 두 속성 X, Y에서

X가 Y를 함수적으로 결정한다.

X의 값이 유일한 Y값을 결정한다.

Y는 X에 함수적으로 종속한다.

이를 DB의 예로 보자면 X는 Primary Key가 되고 Y는 그 외 속성이 될 수 있다.

 

함수적 종속성 예

- 주민번호 -> 이름 

- 부서 ID -> 부장 이름

 

Key

슈퍼키(super key)

- 속성의 집합으로, 고유하게 식별되는 집합이다.

 

후보키(candidate key)

- 슈퍼키의 부분 집합으로 슈퍼키의 집합에서 하나라도 제거되면 슈퍼키가 아닌 후보키이다.

 

기본키(Primary key)

- 여러 후보키 중 대표적인 키 하나가 테이블의 기본키로 사용한다.

 

1 정규형

기본키가 있고 속성이 원자 값을 가지면 제1 정규형이다.

- 테이블은 반드시 하나 이상의 키를 가지고 있다.

- 속성의 도메인은 오직 원자값만 포함된다.

 

허용 X

- 복합 속성

- 다중 속성

중첩 릴레이션

 

1 정규형을 지킨다는 것은

- 데이터 조작을 sql 만을 가지고 할 수 있다. -> 1 정규형 지키지 못하면 더 이상 sql 만으로 조작할 수 없어 따로 추가 작업이 필요하다.

 

2 정규형, 3 정규형... (생략)


프로젝트 코드 리뷰

최근 코드리뷰를 계속해서 받고있다.

 코드에 대한 100%의 정답은 없겠지만 리뷰어들의 경험을 배울 수 있고 잘못된 점이나 개선할 점, 때론 아예 생각하지 못했던 키워드 까지 얻을 수 있어 매번 유익하다. 리뷰어의 피드백 하나하나가 소중하다. 코드 리뷰 받을 때 기대감이 가득하다. 처음엔 잘못 지적 받을 땐 소심할 때가 있었지만, 그것은 나에 대한 비난이 아닌 코드의 비판이기에 더 격렬히 환영하게 되었다. 코드 리뷰 문화가 활발한 회사에 가고 싶다.

리뷰 중 하나

보다 자세한 내용은 아래 참고

https://github.com/codesquad-members-2022/todo-list/pull/178

 

댓글