MySQL의 InnoDB스토리지 엔진은 기본키를 바탕으로 테이블 자체가 클러스터링 인덱스가 되어 자연키를 기본키로 할 경우 이 자연키를 위해 따로 인덱스 구성할 필요X
커버링 인덱스가 작용할 가능성 높다
커버링 인덱스?
데이터베이스에서 효율적인 쿼리 실행을 위한 인덱스 일종.
일반적으로 데이터베이스에서 특정 컬럼에 대한 인덱스 생성시,
해당열에 대한 검색은 빨라지지만, 일부 쿼리는 여러 개의 열에 대한 정보를 가져와야할 수 있다.
이러한 경우 인덱스만으로는 원하는 결과를 얻기 위해 디스크에서 추가적인 데이터를 읽어와야해 성능저하 발생
커버링 인덱스는 이러한 성능 문제를 해결하기 위해 사용.
원하는 쿼리의 결과를 인덱스 자체만으로 가져올 수 있도록 설계된 인덱스.
즉, 인덱스가 원하는 쿼리의 모든 필드를 이미 갖고있어 디스크에서 실제 데이터를 읽지 않고도 쿼리 결과를 가져올 수 있다.
장점
1. 더 적은 디스크 I/O
2. 더 작은 인덱스 크기
우선순위 - 유연성 > 성능
다중 값 필드와 다중 부분 필드는 그 안에 데이터를 수정, 삭제, 정렬, 그룹화하기 어려워 피하는게 좋다.
많은 데이터가 중복이 될 경우 다중값 필드라 한다.
만약 주소라는 하나의 필드가 서울시 / 강남구 / 개포동 등 이렇게 나눌 수 있는걸.
다중부분 필드라고한다.
계산된 필드는 계산에 참여하는 필드의 값이 바뀔 때 갱신되지 않고,
갱신 작업의 책임이 응용 프로그램으로 넘어가 피하는 것이 좋다.
중복되는 필드들은 불필요하게 저장공간을 차지할 뿐만 아니라 수정이 일어났을 때 같이 수정이 이뤄지지 않아
무결성을 무너뜨리기 쉽다.
중복데이터가 많으면 모든 레코드를 수정해야하기 때문에 X
테이블 구성이 어느정도 완료되었을 시,
각 필드마다 필드 이름, 데이터 종류, 허용 가능한 데이터의 길이, 값의 범위, 유일성, NULL 지원, 기본값 어떻게 할지 등 정해야함.
CHAR - 고정길이 - 저장되는 데이터의 길이가 일정하지 않으면 저장공간의 낭비 발생
VARCHAR - 가변길이 - 저장되는 데이터 크기에 맞게 공간배정.
TIMESTAMP는 시간을 UTC로 저장해 TIME ZONE에 따라 그 TIME ZONE에 맞는 시간으로 저장된 시간을 볼 수 있다는 장점.
데이터베이스에서 하나의 열(컬럼)에 대해 사전에 정의된 값 중 하나만 저장할 수 있도록 하는 데이터타입.
해당 열에 저장 가능한 값들을 미리 지정해 열의 값이 그 값들 중 하나로 제한되게함
데이터베이스에서 데이터를 정규화하는 데 사용되는 테이블
정규화? 데이터를 중복없이 구조화해 데이터 일관성과 유지 보수를 향상시키는 프로세스
테이블에 속한 모든 필드의 값은 원자값으로만 이뤄져야함
테이블이 제 1정규형에 속하고,
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형
테이블의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형
사건형 테이블? 역사적이고 시간 의존적인 데이터를 저장 및 기록하는 테이블