📍 "면접을 위한 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. 복합 인덱스는 같음, 정렬, 다중 값, 카디널리티 순이다.