1.3 관계형 데이터베이스 🗄️
📖 개요
관계형 데이터베이스(RDBMS)의 기본 개념과 SQL에 대해 학습합니다.
1. 관계형 데이터베이스란?
관계형 데이터베이스는 데이터를 Table 형식으로 저장하며, 각 테이블 간의 관계를 정의하여 만들어지는 데이터베이스이다.
특징 : 고정된 스키마(구조), 데이터 무결성(정확성), SQL을 이용한 데이터 조작
- 스키마 : 데이터의 구조와 규칙을 정의하는 설계도
2. SQL 기초
SQL은 관계형 데이터베이스와 대화하기 위한 표준언어.
- DDL(Definition): 데이터 테이블을 생성, 수정 (CREATE, DROP, ALTER)
- DML(Maipulation): 데이터 자체를 조작 (SELECT, INSERT, DELETE, UPDATE)
- DCL(Control): 권한을 부여하거나 회수 (GRANT, REVOKE)
3. 데이터베이스 설계
데이터베이스를 설계는 올바른 데이터베이스 테이블을 정의하기 위한 과정이다.
크게 3개의 단계로 구성된다.
- 개념적 설계 (ERD 그리기) 비즈니스 요구사항을 바탕으로 개념적 설계에 들어간다. (어떤 데이터가 필요한가?)
- 엔티티: 관리해야할 대상
- 속성: 대상이 가진 특성
- 관계: 대상 간의 연결
- 논리적 설계 (정규화) 개념적 설계로 실제 테이블 형태로 만든 후, 데이터 중복을 제거하는 과정
- 제1정규화: 각 Cell에는 하나의 값만 들어가야 함.
- 제2정규화: 기본키(PK)가 아닌 컬럼은 기본키 전체에 의존해야함.
- 이게 무슨 말이야? -> 관련 없는 애들 싹 다 쳐내!
- 제3정규화: 기본키(PK)가 아닌 컬럼들끼리 의존관계가 있으면 안됨.
- 이게 또 뭔 말이야.. -> 다리 건너 아는 걸 방지 (A -> B -> C)
- 물리적 설계 (성능 최적화) 실제 DBMS에 맞게 최적화하는 작업
- 데이터 타입 결정, 인덱스 설정, 반정규화(의도적으로 성능 향상을 위해 정규화를 위반)
4. 트랜잭션과 ACID
데이터의 일관성을 위해 작업의 단위를 지정하는데, 이를 트랜잭션이라고 한다.
예를 들어, 은행의 돈을 A에서 B로 이동하는데 A의 출금과 B의 입금 중 하나만 진행되면 큰 문제가 발생한다.
때문에, 이를 묶어서 둘다 성공하거나 둘다 실패하게 하는 작업의 단위로 만드는 것이다.
ACID는 트랜잭션이 안전하게 수행된다는 것을 보장하는 4가지 조건이다.
- Atomaicity (원자성)
- Consistency (일관성)
- Isolation (격리성)
- Durability (지속성)
5. 인덱스
인덱스는 “색인 번호”와 유사하다. 수만 페이지를 처음부터 세지 않고, 페이지 번호를 바로 찾는 것
가장 일반적으로 사용되는 인덱스의 자료구조는 “B-Tree”
검색(SELECT)에 유리해짐, 하지만 수정(INSERT) 발생 시에는 자료구조를 다시 만들어야 하기 때문에 성능 저하. 또한 저장공간을 차지해서 유의해야 함.
6. Migration
데이터베이스의 Git
버전 공유나 관리가 필요할 때, Migration.sql 파일을 생성하여 버전 관리를 할 수 있다.
7. N+1문제
데이터를 1개를 조회 했을때, 그와 연관된 N개의 데이터베이스가 추가로 조회될 때 발생하는 성능 저하