📍 "면접을 위한 CS 전공지식 노트 (저: 주홍철)"을 읽고 정리
📍 4장 데이터베이스
레코드-테이블-데이터베이스로 이루어져 있다.도큐먼트-컬렉션-데이터베이스로 이루어져 있다.


Q. 언제 CHAR 또는 VARCHAR를 사용하는 것이 좋을까?
A. 속도 면에서 CHAR가 이점이 있고 공간 면에서 VARCHAR가 이점이 있다.
하지만 CHAR와 VARCHAR는 속도 차이가 거의 없기 때문에 VARCHAR가 좀 더 선호되는 추세이다.
테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있다.

사진 출처: 링크
기본키(Primary Key): 유일성과 최소성을 만족하는 키이다. 테이블의 데이터 중 고유하게 존재하는 속성이기 때문에 중복되어서는 안된다. 기본키는 자연키 또는 인조키 중에 골라 설정한다.
자연키: 중복된 값들을 제외하며 중복되지 않은 것을 '자연스레' 뽑다가 나오는 키를 자연키라고 한다. 자연키는 언젠가는 변하는 속성을 가진다.
인조키: 인위적으로 아이디를 부여한다. 이를 통해 고유 식별자가 생겨난다. 오라클은 sequence, MySQL은 auto increment 등으로 설정한다.
외래키(Foreign Key): 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다. 외래키는 중복되어도 괜찮다.
후보키(candidate key): 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키이다.
대체키(alternate key): 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들을 말한다.
슈퍼키(super key): 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키이다.
Q. 비정형 데이터란?
A. 비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말한다.
Q. 이행적 함수 종속이란?
A. A->B와 B->C가 존재하면 논리적으로 A->C가 성립하는데, 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 한다.
Q. 인덱스가 효율적인 이유는?
A. 인덱스가 효율적인 이유는 효율적인 단계를 거쳐 모든 요소에 접근할 수 있는 균형 잡힌 트리 구조와 트리 깊이의 대수확장성 때문이다.
대수확장성이란 트리 깊이가 리프 노드의 수에 비해 매우 느리게 성장하는 것을 의미한다. 기본적으로 인덱스가 한 깊이씩 증가할 때마다 최대 인덱스 항목의 수는 4배씩 증가한다.
인덱스 최적화 기법: 데이터베이스마다 조금씩 다르지만 기본적인 골조는 똑같다. 여기서는 MongoDB를 기반으로 인덱스 최적화 기법을 설명한다.
1. 인덱스는 비용이다.
2. 항상 테스팅하라
3. 복합 인덱스는 같음, 정렬, 다중 값, 카디널리티 순이다.