R-DBMS
Database란
Database는 현실 세계의 일부를 모델링한, 서로 관련된 데이터의 조직화된 집합이다. 핵심은 "관련된 데이터끼리 모아둔다"는 점이다. 일반적인 파일 시스템에서는 데이터가 여기저기 흩어져 있지만, Database는 연관된 정보를 체계적으로 묶어서 저장한다.
Database System의 등장 배경
데이터를 저장하는 방식은 시대에 따라 발전해 왔다.
- Magnetic Tape: 순차 접근(Sequential Access)만 가능하던 시절
- SSD, HDD: 임의 접근(Random Access)이 가능해지면서 검색 속도가 비약적으로 향상
- File System: CSV 파일 등으로 데이터를 저장하는 저수준 방식
File System만으로 데이터를 관리하면 어떤 문제가 생길까?
데이터 무결성(Data Integrity) 문제가 발생한다. 같은 데이터인데 서로 다른 내용이 저장될 수 있다. 값의 타당성을 어떻게 검증할 것인가?
구현(Implementation) 문제도 있다. 특정 레코드를 찾으려면? 같은 데이터를 활용하는 새로운 애플리케이션을 만들려면? 매번 상황에 맞게 기능을 따로 구현해야 한다.
내구성(Durability) 문제도 빠질 수 없다. 파일을 쓰는 도중에 시스템이 다운되면 데이터는 어떻게 되는가?
이런 문제들을 해결하기 위해 Database System이 등장했다. Database System과 File System 모두 추상화(Abstraction) 계층 역할을 하지만, Database System은 훨씬 높은 수준의 추상화를 제공한다.
DBMS (Database Management System)
DBMS는 애플리케이션이 Database에 정보를 저장하고 분석할 수 있도록 해주는 소프트웨어다. 핵심은 파일 I/O 수준의 세부 사항을 신경 쓰지 않고 데이터에 접근할 수 있다는 것이다.
범용 DBMS는 Database의 정의(Definition), 생성(Creation), 질의(Querying), 갱신(Update), **관리(Administration)**를 모두 지원하도록 설계된다.
DBMS의 역할: 데이터 저장소
DBMS는 Database 추상화를 통해 저수준 구현과 유지보수 부담을 줄여준다.
- 단순한 데이터 구조로 Database를 저장한다
- 고수준 언어를 통해 데이터에 접근한다
단, Database 추상화가 포함하지 않는 영역도 있다. 스토리지나 관계를 어떻게 구현할 것인가는 추상화 아래에 숨겨진 영역이다.
DBMS의 역할: 인터페이스
DBMS는 두 가지 언어를 인터페이스로 제공한다.
- DDL (Data Definition Language): 데이터 구조를 정의하는 언어
- DML (Data Manipulation Language): 데이터를 조작하는 언어
**SQL (Structured Query Language)**은 DDL과 DML을 모두 포함하는 통합 언어다.
Relational Data Model
Data Model이란
Data Model은 Database의 구조를 기술하기 위한 기본 틀이자, 데이터나 정보를 설명하기 위한 개념 체계다.
Data Model은 세 가지 요소로 구성된다.
- Structure: 데이터의 구조
- Operations: 데이터에 대한 연산
- Constraints: 데이터에 대한 제약 조건
Data Model의 종류는 다양하다.
| Data Model | 특징 |
|---|---|
| Relational | 가장 보편적인 모델 (이 글의 주제) |
| NoSQL | Hadoop, MongoDB(JSON) 등 |
| Machine Learning | Array, Matrix 기반 |
| 기타 | Hierarchical, Network 등 |
Data Model의 변천사
Network Data Model
통합 데이터 저장소를 Linked List로 구현하는 방식이다. 유지보수가 어렵고 질의 작성이 복잡하다는 단점이 있다.
Hierarchical Data Model
트리 구조로 데이터를 표현한다. 하지만 데이터 독립성을 잃게 되고, 데이터 중복이 발생하는 문제가 있다.
Object-Oriented Data Model
객체 지향적으로 데이터를 표현한다. 전화번호처럼 개수가 정해지지 않은 데이터 인스턴스를 다룰 수 있다는 장점이 있다. 현재도 존재하지만 보편적이지는 않다 (JSON 등).
Relational Data Model
효과적인 데이터 모델이면서, SQL이라는 일반화된 연산 방법을 제공하기 때문에 가장 널리 사용된다.
Relational Data Model은 데이터를 **관계(Relation)**의 관점에서 기술하는 모델이다.
Relation이란, **Entity를 표현하는 Attribute들의 관계를 담고 있는 비순서 집합(Unordered Set)**이다. 즉, 순서는 중요하지 않다.
Relation (Table)
Relation은 곧 테이블이다. 테이블의 구성 요소를 하나씩 살펴보자.
Attribute (열)
Attribute는 열(Column)이다. Feature, Variable이라고도 부른다.
- Attribute의 값은 반드시 **원자적(Atomic)**이어야 한다. 즉, 더 이상 나눌 수 없는 데이터 타입이어야 한다.
- 원자적 데이터 타입: int, float, string 등. 반대로 class나 structure는 원자적이지 않다.
- 각 Attribute에 허용되는 값의 범위를 Domain이라 한다.
- NULL은 모든 Domain에 속하는 값으로, "알 수 없음(Unknown)"을 의미한다. 결측값이거나 해당 사항 없음(N/A)을 나타낸다.
Tuple (행)
Tuple은 행(Row)이다. Record, Data Instance라고도 부른다.
- Tuple은 Relation 내에서 Attribute 값들의 집합이다.
- 각 Tuple은 Relation의 모든 Attribute에 대해 하나의 값을 가진다.
- 값은 일반적으로 Atomic/Scalar이다.
**Schema(Header)**는 테이블의 구조, 즉 Attribute 목록과 각 Attribute의 타입을 정의한 것이다.
표기법 (Notation)
Relation은 테이블로 표현할 수도 있고, 집합 표기법으로 표현할 수도 있다.
집합 표기법의 예시는 다음과 같다.
- Structure: instructor(ID, name, dept_name, salary) - 여기서 ID에 밑줄을 긋는 것은 Primary Key를 의미한다
- Tuple: (76766, Crick, Biology, 72000.00), (83821, Brandt, Comp. Sci., 92000.00), (45565, Katz, Comp. Sci., 75000.00)
주의할 점은 Tuple 내의 Attribute는 **순서가 있는 집합(Ordered Set)**이라는 것이다. 따라서 (76766, Crick, Biology, 72000.00)과 (72000.00, Biology, Crick, 76766)은 다른 Tuple이다.
Key
Key는 Relation 내에서 레코드를 식별하기 위한 장치다.
- **제약 조건(Constraint)**의 한 종류로, **유일성(Unique)**을 보장한다
- 하나 이상의 Attribute로 구성된다
- Key Attribute 값의 중복을 허용하지 않는다
Primary Key
Primary Key는 하나의 Tuple을 유일하게 식별하는 Key다. 예를 들어 instructor(ID, name, dept_name, salary)에서 ID가 Primary Key 역할을 한다.
Foreign Key
Foreign Key는 한 Relation의 Attribute가 다른 Relation의 Tuple에 반드시 대응되어야 함을 명시하는 Key다. 한쪽 Relation의 값이 다른 Relation에 반드시 존재해야 한다는 제약이다. 참조하는 쪽(Referencing Relation)에서 참조되는 쪽(Referenced Relation)으로의 관계를 형성한다.
Data Language
DDL (Data Definition Language)
DDL은 Database에서 Relation과 정보를 어떻게 표현할 것인지 정의하는 언어다. Database Schema를 정의하는 데 사용된다.
DML (Data Manipulation Language)
DML은 Database에서 정보를 어떻게 저장하고 조회할 것인지 다루는 언어다. 절차적(Procedural) 방식을 따르며, 질의(Query)가 DBMS가 원하는 결과를 찾기 위한 고수준 전략을 명시한다. Relational Algebra에 기반한다.
Database Schema
마지막으로 용어를 정리하자.
- Database: Relation(Table)들의 집합
- Database Schema: Database의 논리적 구조
- Database Instance: 특정 시점에서의 Database 스냅샷
- Relation Instance: 특정 시점에서의 하나의 Relation(Attribute와 Tuple 포함) 스냅샷
HGU 전산전자공학부 홍참길 교수님의 23-1 Database System 수업을 듣고 작성한 포스트이며, 첨부한 모든 사진은 교수님 수업 PPT의 사진 원본에 필기를 한 수정본입니다.