3 분 소요

면접을 위한 CS 전공지식 노트 CHAPTER 4


SECTION 4.1 데이터베이스의 기본

  • 데이터베이스: 데이터 모음
  • DBMS: 제어, 관리하는 통합 시스템(MySQL)
  • 응용 프로그램: Node.js, php

4.1.1 엔터티

여러 개의 속성을 지닌 명사
(A가 B의 종속적이라면 A는 약한 엔터티, B는 강한 엔터티)


4.1.2 릴레이션

데이터베이스에서 정보를 구분하여 저장하는 기본 단위
테이블, 컬렉션


4.1.3 속성

릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보


4.1.4 도메인

각 속성들이 가질 수 있는 값의 집합
ex) 속성: 성별, 도메인: {남, 여}


4.1.5 필드와 레코드

필드: 속성
레코드: 행 단위(=튜플)

✏️ 필드 타입

  • 숫자 타입: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
  • 날짜 타입: DATE, DATETIME, TIMESTAMP
  • 문자 타입: CHAR, VARCHAR(가변), TEXT, BLOB, ENUM, SET

4.1.6 관계

  • 1:1 관계
  • 1:N 관계
  • N:M 관계

4.1.7 키

그림1

기본키

유일성과 최소성 만족, 중복x
자연키: 자연스레 중복되지 않은 키(주민번호) 인조키: 인위적인 키(유저 아이디)

외래키

다른 테이블의 기본키를 그대로 참조하는 값
중복 가능

후보키

기본키가 될 수 있는 후보들
유일성, 최소성 만족

대체키

후보키가 두 개 이상일 때 기본키가 아닌 후보키


SECTION 4.2 ERD와 정규화 과정

4.2.1 ERD의 중요성

  • ERD 기반으로 데이터베이스 구축
  • 설계도 역할

4.2.3 정규화 과정

- 잘못된 종속 관계로 이상 현상 일어났을 때 해결
- 저장 공간 효율적으로 사용하기 위해 릴레이션 여러 개로 분리
- 중복성 감소, 각 릴레이션은 독립적

제1 정규형

원자 값만으로 구성
반복 집합 제거

제2 정규형

제1 정규형 + 부분 함수 종속성 제거
부분 함수 종속성: 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
동등한 릴레이션, 무손실 분해

제3 정규형

제2 정규형 + 이행적 함수 종속 제거
이행 함수 종속: A → B이고 A → C일 때, A → C

보이스/코드 정규형

제3 정규형 + 후보키가 아닌 함수 종속 관계를 제거


SECTION 4.3 트랜잭션과 무결성

4.3.1 트랜잭션

- 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 쿼리들을 하나로 묶는 단위
- ACID: 원자성, 일관성, 독립성, 지속성

원자성

Atomicity, “all or nothing”
트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장

✏️ 커밋

  • 여러 쿼리가 성공적으로 처리되었다고 확정
  • 트랜잭션 단위로 수행, 영구적으로 저장

✏️ 롤백

  • 트랜잭션 전으로 돌려야 함
  • 데이터 무결성 보장

일관성

Consistency
허용된 방식으로만 데이터를 변경


격리성

Isolation
트랜잭션 수행 시 서로 끼어들지 못함


지속성

Durability
성공적으로 수행된 트랜잭션은 영원히 반영

4.3.2 무결성

이름 설명
개체 무결성 기본키는 빈 값 허용x
참조 무결성 참조 관계 두 테이블은 일관된 값 유지
고유 무결성 고유한 값 조건있을 때 고유한 값 가짐
NULL 무결성 NULL 될 수 없는 제약조건

SECTION 4.4 데이터베이스의 종류

4.4.1 관계형 데이터베이스

- 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스
- SQL 언어로 조작

MySQL

가장 많이 쓰는 데이터베이스
많은 서비스

PostgreSQL

디스크 조각 회수 가능
JSON으로 접근 가능

4.4.2 NoSQL 데이터베이스

- SQL을 사용하지 않는 데이터베이스

MongoDB

키-값 데이터 모델에서 확장된 도큐먼트 기반의 데이터베이스
확장성 뛰어남, 빅데이터 성능 좋음

redis

인메모리 데이터베이스, 키-값 데이터 모델 기반
문자열, 셋, 해시


SECTION 4.5 인덱스

4.5.1 인덱스의 필요성

데이터를 빠르게 찾을 수 있는 하나의 장치

4.5.2 B-트리

루트 노드, 리프 노드, 브랜치 노드

4.5.3 인덱스 만드는 방법

MySQL

클러스터형 인덱스: primary key, unique not null, 성능 좋음
세컨더리 인덱스: create index…, 여러 필드 보낼 때

MongoDB

자동으로 ObjectID가 형성

4.5.4 인덱스 최적화 기법

1. 인덱스는 비용이다

인덱스 리스트 → 컬렉션 순으로 탐색
컬렉션 수정되면 인덱스도 수정

2. 항상 테스팅 하라

explain() 함수를 통해 인덱스를 만들고 테스팅함

3. 복합 인덱스는 같음, 정렬, 다중 값 카디널리티 순이다

  1. ==, equal
  2. 정렬
  3. 다중 값(>, <)
  4. 카디널리티 높은 순

SECTION 4.6 조인의 종류

조인: 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것

  • 내부 조인: 모두 일치하는 행만(교집합)
  • 왼쪽 조인: 왼쪽 테이블 모든 행
  • 오른쪽 조인: 오른쪽 테이블 모든 행
  • 합집합 조인: 두 테이블의 모든 행(누락된 값은 null)

SECTION 4.7 조인의 원리

4.7.1 중첩 루프 조인

중첩 for 문
비용 많이 증가

4.7.2 정렬 병합 조인

조인할 필드 기준으로 정렬, 이후에 조인
적절한 인덱스 없을 때, 대용량 테이블, 조인 조건이 비교 연산자

4.7.3 해시 조인

해시 테이블 기반
동등 조인에서만 사용

카테고리:

업데이트:

댓글남기기