<TIL> 138. DB 설계

YUJIN LEE·2023년 7월 31일
0

개발log

목록 보기
130/149

좋은 데이터베이스 설계

  1. 무결성 - 데이터베이스 내에 모든 값은 언제나 정확한 값 유지
  2. 유연성 - 데이터베이스 구조는 요구사항 변화에 대해 수정이 쉬워야함
  3. 확장성 - 데이터베이스 구조는 기능 확장에 대해 수정이 쉬워야함

기본키 자연키 vs 인조키

자연키 장점

  1. MySQL의 InnoDB스토리지 엔진은 기본키를 바탕으로 테이블 자체가 클러스터링 인덱스가 되어 자연키를 기본키로 할 경우 이 자연키를 위해 따로 인덱스 구성할 필요X

  2. 커버링 인덱스가 작용할 가능성 높다

커버링 인덱스?
데이터베이스에서 효율적인 쿼리 실행을 위한 인덱스 일종.
일반적으로 데이터베이스에서 특정 컬럼에 대한 인덱스 생성시,
해당열에 대한 검색은 빨라지지만, 일부 쿼리는 여러 개의 열에 대한 정보를 가져와야할 수 있다.
이러한 경우 인덱스만으로는 원하는 결과를 얻기 위해 디스크에서 추가적인 데이터를 읽어와야해 성능저하 발생

커버링 인덱스는 이러한 성능 문제를 해결하기 위해 사용.
원하는 쿼리의 결과를 인덱스 자체만으로 가져올 수 있도록 설계된 인덱스.
즉, 인덱스가 원하는 쿼리의 모든 필드를 이미 갖고있어 디스크에서 실제 데이터를 읽지 않고도 쿼리 결과를 가져올 수 있다.

장점
1. 더 적은 디스크 I/O
2. 더 작은 인덱스 크기

자연키 단점

  1. 비즈니스 요구사항 변화로 인해 기본키로 사용하던 자연키를 변경해야할 수 있다.
    ex) 회원 테이블에 주민번호를 기본키로 사용했는데 주민번호를 저장하지 못하도록 법이 개정되면 문제 생김.

인조키 장점

  1. 비즈니스 요구사항 변화에 전혀 영향받지 않아 변경할 일이 없다

인조키 단점

  1. 인덱스를 추가 구성할 경우가 생김
  2. 인조키를 위한 필드가 추가되어 테이블이 커짐

자연키의 장점 '성능' 인조키의 장점 '유연성'

우선순위 - 유연성 > 성능

다중값 또는 다중 부분 필드 포함 X

다중 값 필드와 다중 부분 필드는 그 안에 데이터를 수정, 삭제, 정렬, 그룹화하기 어려워 피하는게 좋다.

다중값 필드?

많은 데이터가 중복이 될 경우 다중값 필드라 한다.

다중부분 필드?

만약 주소라는 하나의 필드가 서울시 / 강남구 / 개포동 등 이렇게 나눌 수 있는걸.
다중부분 필드라고한다.

계산된 필드 포함X

계산된 필드는 계산에 참여하는 필드의 값이 바뀔 때 갱신되지 않고,
갱신 작업의 책임이 응용 프로그램으로 넘어가 피하는 것이 좋다.

외래키 외에 불필요하게 중복되는 필드들은 포함X

중복되는 필드들은 불필요하게 저장공간을 차지할 뿐만 아니라 수정이 일어났을 때 같이 수정이 이뤄지지 않아
무결성을 무너뜨리기 쉽다.

절대적으로 최소한의 중복 데이터만 포함

중복데이터가 많으면 모든 레코드를 수정해야하기 때문에 X

필드 명세 설정

테이블 구성이 어느정도 완료되었을 시,
각 필드마다 필드 이름, 데이터 종류, 허용 가능한 데이터의 길이, 값의 범위, 유일성, NULL 지원, 기본값 어떻게 할지 등 정해야함.

데이터 타입, 길이, 값의 범위

CHAR vs VARCHAR

CHAR - 고정길이 - 저장되는 데이터의 길이가 일정하지 않으면 저장공간의 낭비 발생

VARCHAR - 가변길이 - 저장되는 데이터 크기에 맞게 공간배정.

DATETIME vs TIMESTAMP - 생성일시, 수정일시

TIMESTAMP는 시간을 UTC로 저장해 TIME ZONE에 따라 그 TIME ZONE에 맞는 시간으로 저장된 시간을 볼 수 있다는 장점.

  • TIMESTAMP는 2038년 1월 19일까지밖에 저장할 수 없다.
    DATETIME은 수동으로 저장해야함.

ENUM 데이터타입 vs 참조테이블

ENUM 데이터타입

데이터베이스에서 하나의 열(컬럼)에 대해 사전에 정의된 값 중 하나만 저장할 수 있도록 하는 데이터타입.
해당 열에 저장 가능한 값들을 미리 지정해 열의 값이 그 값들 중 하나로 제한되게함

참조테이블

데이터베이스에서 데이터를 정규화하는 데 사용되는 테이블
정규화? 데이터를 중복없이 구조화해 데이터 일관성과 유지 보수를 향상시키는 프로세스

ENUM 장점

  1. 쿼리에 값을 명확하게 넣을 수 있다.
  2. 조인이 필요없어 조회 속도가 빠르다.
  3. 데이터 용량을 적게 차지한다.
  4. 추가적인 테이블이 필요없다.

ENUM 단점

  1. ENUM 값들과 연관된 데이터를 저장할 수 없다.
  2. ENUM 데이터의 변경이 일어나면 적용되는데 시간이 오래 걸린다.

참조테이블 장점

  1. 연관된 값을 같이 저장할 수 있다.
  2. 새로운 값을 추가하는 것이 쉽다.

참조테이블 단점

  1. 쿼리에 값을 명확하게 넣을 수 없다.
  2. 매번 조인을 통해 값을 가져와야해 조회속도가 느려질 수 있다.

ENUM의 장점 - 성능 및 간편함 / 참조테이블 장점 - 유연성

정규화

제 1 정규형

테이블에 속한 모든 필드의 값은 원자값으로만 이뤄져야함

제 2 정규형

테이블이 제 1정규형에 속하고,
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형

보이스/코드 정규형

테이블의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형

규칙 완화나 파괴가 가능한 상황

테이블이 '사건'형 테이블인 경우

사건형 테이블? 역사적이고 시간 의존적인 데이터를 저장 및 기록하는 테이블

테이블에 수정 또는 삭제 거의 X

성능에 문제

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글