4.1 데이터베이스의 기본
데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음입니다.
DBMS: 해당 데이터베이스를 제어, 관리하는 통합 시스템
4.1.1 엔터티
엔터티는 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미
약한 엔터티: 종속적인 엔터티
강한 엔터티: 종속 받는 엔터티
4.1.2 릴레이션
릴레이션은 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
릴레이션은 관계형 데이터베이스에서는 '테이블'이라고 하며 NoSQL 데이터베이스에서는 '컬렉션'이라고 한다.
MySQL : 레코드 - 테이블 - 데이터베이스
MongoDB : 도큐먼트 - 컬렉션 - 데이터베이스
4.1.3 속성
속성은 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
4.1.4 도메인
도메인이란 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
4.1.5 필드와 레코드
4.1.6 관계
1:1 관계, 1:N관계, N:M 관계
4.1.7 키
테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있다.
기본키 (Primary Key): 유일성과 최소성을 만족하는 키
기본키는 자연키 또는 인조키 중에 골라 설정한다.
자연키는 연젠가는 변하는 속성을 가진다
인조키는 인위적으로 생성한 키로 잘 변하지 않는다, 보톤 기본키는 인조키로 설정한다.
외래키 (Foreign Key): 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다
후보키(candidate key): 기본 키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키
대체키(alternate key): 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들을 말한다.
슈퍼키(super key): 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키
4.2 ERD와 정규화 과정
ERD (Entity Relationship Diagram)는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계를 정의한 것이다.
정규화 과정
정규화 과정: 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정. 정규형 원칙을 기반으로 정규형을 만들어가는 과정이며, 정규화된 정도는 정규형(NF)으로 표현. 기본 정규형인 제 1, 2, 3 정규형, 보이스/코드 정규형이 있고 고급 정규형인 제 4, 5 정규형이 있음.
- 제 1 정규형: 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성
- 제 2 정규형: 제 1 정규형 + 부분 함수의 종속성 제거
- 제 3 정규형: 제 2 정규형 + 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 만족하지 않는 상태.
※ 이행적 함수 종속(transitive FD)
- A -> B와 B -> C가 존재할 때, 논리적으로 A -> C가 성립. 이때, C가 A에 이행적으로 함수 종속이 되었다고 함.
- 보이스 / 코드 정규형: 제 3정규형 + 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
4.3 트랜잭션과 무결성
4.3.1 트랜잭션
트랜잭션: 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위. 즉, 여러 개의 쿼리들을 하나로 묶는 단위. ACID 특징이 있다.(원자성, 일관성, 독립성, 지속성)
- 원자성: 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장.
- 커밋: 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것을 말함. "커밋이 수행되었다"는 "하나의 트랜잭션이 성공적으로 수행되었다"를 의미.
- 롤백: 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일.
- 일관성: 허용된 방식으로만 데이터를 변경해야 하는 것을 의미.
- 격리성: 트랜잭션 수행 시 서로 끼어들지 못하는 것. 격리성은 여러 개의 격리 수준으로 나뉘어 격리성을 보장.
- 지속성: 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미. 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻하며, 데이터베이스는 이를 위해 체크섬, 저널링, 롤백 등의 기능을 제공
- 체크섬: 중복 검사의 한 형태. 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
- 저널링: 파일 시스템 또는 데이터베이스 시스템에 변경 사항을 반영(커밋)하기 전에 로깅하는 것. 트랜잭션 등 변경 사항에 대한 로그를 남기는 것.
4.3.2 무결성
- 개체 무결성: 기본키로 선택된 필드는 빈 값을 허용하지 않음
- 참조 무결성: 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지
- 고유 무결성: 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성 값은 모두 고유한 값을 가짐.
- NULL 무결성: NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약 조건.
4.4 데이터베이스의 종류
4.4.1 관계형 데이터베이스
MySQL, PostgreSQL
4.4.2 NoSQL 데이터베이스
MongoDB, redis
4.5 인덱스
4.5.4 인덱스 최적화 기법
1. 인덱스는 비용이다
- 인덱스는 인덱스 리스트, 컬렉션 순으로 두 번 탐색하도록 강요하며 읽기 비용이 든다. 또한, 컬렉션이 수정되었을 때 인덱스도 수정되어야 한다. 그렇기 때문에 쿼리에 있는 필드에 인덱스를 무작정 설정하는 것이 답이 아니다.
2. 항상 테스팅하라
- 인덱스 최적화 기법은 서비스에서 사용하는 객체의 깊이, 테이블의 양 등 서비스 특징에 따라 달라진다. 그렇기 때문에 항상 테스팅 하는 것이 중요하다.
3. 복합 인덱스는 같음, 정렬, 다중 값, 카디널리티 순이다.
※ 카디널리티: 유니크한 값의 정도.
4.6 조인의 종류
4.7 조인의 원리
중첩 루프 조인: NLJ. Nested Loop Join. 중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방법. 랜덤 접근에 대한 비용이 많이 증가하므로 대용량의 테이블에서는 사용하지 않음.
정렬 병합 조인: 각각의 테이블을 조인할 필드 기준으로 입력하고 정렬이 끝난 이후에 조인 작업을 수행. 조인할 때 쓸 적절한 인덱스가 없고 대용량의 테이블을 조인하고 조인 조건으로 <, > 등 범위 비교 연산자가 있을 때 사용.
해시 조인: 해시 테이블을 기반으로 조인하는 방법.
'📚CS > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
[면접을 위한 CS 전공지식 노트] 6장 포트폴리오와 면접 (0) | 2023.12.07 |
---|---|
[면접을 위한 CS 전공지식 노트] 5장 자료 구조 (0) | 2023.12.04 |
[면접을 위한 CS 전공지식 노트] 3장 운영체제 (2) | 2023.11.21 |
[면접을 위한 CS 전공지식 노트] 2장 네트워크 (2) (1) | 2023.09.27 |
[면접을 위한 CS 전공지식 노트] 2장 네트워크 (1) (0) | 2023.09.22 |