[TIL] RDBMSCS/DataBase2024. 10. 10. 23:54
Table of Contents
개요
- 관계형 데이터베이스 관리 시스템
- 데이터를 테이블(관계) 형태로 관리
- 행(Row)과 열(Column)로 구성
- 테이블 간 관계를 통해 데이터를 조작하고 검색
- 주로 SQL을 사용
SQL
RDBMS에서 데이터를 관리하기 위한 표준화된 언어로, 주로 데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL), 트랜잭션 관리(TCL) 명령어로 구성됩니다.
- DDL (Data Definition Language): 데이터베이스와 테이블 구조를 정의하는 언어
- 예시: CREATE, ALTER, DROP
- DML (Data Manipulation Language): 데이터를 삽입, 수정, 삭제, 조회하는 언어
- 예시: SELECT, INSERT, UPDATE, DELETE
- DCL (Data Control Language): 데이터베이스에 대한 접근 권한을 관리하는 언어
- 예시: GRANT, REVOKE
- TCL (Transaction Control Language): 트랜잭션의 시작과 종료를 제어하는 언어
- 예시: COMMIT, ROLLBACK, SAVEPOINT
특징
스키마를 기반으로 미리 정의된 데이터 구조를 가짐. (NoSQL과 다른점, 이로인해 테이블 설계가 중요함)
정규화 과정을 통해 중복 데이터를 최소화. (정규화로 인한 성능 저하가 발생할 경우 반정규화를 통해 개선할 수 도 있음)
RDBMS에서 데이터는 테이블 간의 관계를 통해 저장
주요 관계 모델로는 아래와 같다.
- 1:1 관계: 한 테이블의 한 레코드가 다른 테이블의 한 레코드와 연관됨
- 예시) 사용자 테이블 - 사용자 프로필 테이블
- 1:다 관계: 한 테이블의 한 레코드가 다른 테이블의 여러 레코드와 연관됨
- 예시) 사용자 테이블 - 주문 테이블
- 다:다 관계: 여러 레코드가 여러 레코드와 연관되며, 조인 테이블이 필요함
- 예시) 학생 테이블 - 강의 테이블
ACID 트랜잭션을 통해 데이터 무결성을 보장함.
또한 테이블 내에서 키(외래키, 기본키 등) 설정을 통해 데이터 무결성을 보장함.
트랜잭션
데이터베이스 내에서 하나의 일관된 작업 단위로, 여러 작업을 하나의 작업처럼 처리하여 데이터의 무결성을 보장합니다. 트랜잭션의 목적은 작업 도중 발생할 수 있는 오류나 장애로부터 데이터베이스의 상태를 안전하게 보호하는 것입니다.
또한 트랜잭션은 여러 DML(INSERT, UPDATE ..)작업이 일관성 있게 처리되는 것을 보장하며, 아래와 같은 ACID 특성을 따릅니다.
ACID 속성
- Atomicity (원자성)
- 트랜잭션 내의 모든 작업은 하나의 단위로 처리.
- 트랜잭션이 완료되면 모든 작업이 성공적으로 완료되거나, 그렇지 않으면 전부 취소
- 하나라도 실패하면 전체 트랜잭션이 ROLLBACK되어 변경 사항이 원래 상태로 복구.
- Consistency (일관성)
- 트랜잭션이 실행되기 전과 후에 데이터베이스의 무결성 제약 조건이 항상 유지.
- 무결성 제약 조건 : 개체 무결성, 참조 무결성, 도메인 무결성, 고유 무결성, NULL 무결성, 키 무결성
- Isolation (고립성)
- 트랜잭션이 실행 중일 때, 다른 트랜잭션이 해당 트랜잭션의 중간 상태를 볼 수 없어야 함.
- 고립성 수준은 데이터베이스의 동시 처리 성능과 무결성 간의 균형을 조정.
- 다양한 격리 수준(Isolation Level)을 통해 설정할 수 있음.
- Durability (지속성)
- 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 반영.
- 즉, 트랜잭션 완료 후에는 그 데이터가 디스크에 영구적으로 기록되어 데이터 유실이 방지.
RDBMS 사용 시 고려할 점
- 수평 확장성 제한: RDBMS는 수평적 확장이 어려워 대규모 분산 데이터 처리에 비효율적일 수 있다. 이로인해 수직적 확장이 권장된다.
- 스키마 제약: 데이터 구조가 고정되어 있어, 비정형 데이터를 다루는 데는 어려움이 있다.
추가로 학습할 부분
1. 정규화 및 반정규화
2. 인덱스 및 B-Tree 자료구조
3. Spring에서 트랜잭션 및 격리 수준
4. 성능 최적화 - 캐싱 및 파티셔닝, 클러스터링, 샤딩
5. 주문 서비스로 실습하는 테이블 관계
'CS > DataBase' 카테고리의 다른 글
[MySQL] 인덱스(INDEX) (1) | 2023.12.29 |
---|---|
[MySQL] View (0) | 2022.10.26 |
[Mysql] 스토어드 프로시저 (0) | 2022.10.24 |
@Beemo9 :: BeHinD
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!