교재: https://www.db-book.com
Database vs Database Management Systems
데이터베이스: 데이터의 모음
DBMS: 데이터베이스를 관리하는 시스템 소프트웨어
Database
대학 관리 시스템을 개발하기 위해 어떤게 필요할까?
요구사항 분석
- Stakeholder 정의
- Students
- Courses
- Faculty
- Departments
- 각 이해관계자의 행동
- 학생은 강의를 들음
- 교수는 강의를 가르침
- 교수는 학생을 가르침
기본적으로, 이런 작업이 'Data Abstraction'이다.
Data Abstraction의 세가지 단계

Conceptual level
struct employee {
string name;
string street;
integer salary;
}
이는 각 employee 레코드가 어떻게 생겼는지 묘사함
- 특정 타입의 세 개 필드를 포함함
- 하지만 각 레코드가 어떻게 저장될 지를 명시하지는 않음
Physical level
어떻게 employee 레코드가 저장될지를 묘사함
- Eg. B-tree, Hash Table, etc
View level
데이터베이스가 유저에게 보이는 부분만을 의미함
예를 들어 각 employee들의 연봉은 노출되지 않음
Data Model
- 모델은 실제 세상의 부분을 관리하거나 시험하는데 유용함.

모델은 간략화하고 불필요한 디테일을 숨김.
- 데이터 모델은 어떻게 데이터가 구조화되고 사용될지를 나타내는 고수준 명세
- Relational model (Entity-Relationship data model)
- Object-based data models
- Semi-structured data model
- Less popular old models:
- Network model
- Hierarchical model
Relational Model
-
Entity-Relationship model
- 실제 세상은 object들로 이루어짐.
- 실제 세상은 object들 간의 관계로 이루어짐
-
Entity
- Entity는 특정 attribute 들의 집합으로써 다른 객체들과 구분되는 객체임
-
Relationship
- Relationship은 여러 entity들간의 관계임
-
Entity Set: 같은 타입을 갖는 모든 entity들의 집합
-
Relationship Set: 같은 타입을 갖는 모든 Relationship들의 집합
-
Mapping Cardinalities: relationship 집합을 통해 연관될 수 있는 entity들의 수
ER-Diagram

- 직사각형: Entity set
- 타원: Entity attribute
- 마름모: Entity set 간의 relationship
- Lines: Entity set과 Entity arribute, entity set과 relationship
Schema and Instance
Schema
- 프로그래밍 언어에서의 type과 변수랑 비슷함
- Logical schema : 데이터베이스의 전체적인 논리 구조
- Physical schema : 데이터의 전체적인 물리적 구조 (B+tree table, Hash table, etc)
Instance
특정 시점에 데이터베이스에 있는 실제 내용
Physical Data Independence
logical schema를 변경하지 않고, physical schema를 변경할 수 있는 능력
- Application은 logical schema에 의존함

SQL
SQL: Structured Query Language
- 시퀄 또는 에스큐엘로 발음
- IBM의 SEQUEL(Structured English Query Language) 때문에 시퀄로 많이 읽음
- DML (Data Manipulation Language)와 DDL (Data Definition Language)로 이루어짐
프로그래밍 언어의 종류
- Procedural - 유저가 데이터를 어떻게 얻을지를 명시함
- e.g.) C, C++, Java, Python
- Declarative - 유저가 데이터를 어떻게 얻을지 명시하지 않음
Data Definition Language (DDL)
create table instructor (
ID char(5),
name varchar(20),
dept_name varchar(20),
salary numeric(8,2)
);
- 테이블 정의는 DBMS에서 data dictionary (metadata catalog 라고도 불림)에 저장됨.
Data Manipulation Language (DML)
select name
from instructor
where dept_name = 'Comp. Sci.';
- DML은 query language라고도 불림
- 보통 고수준 언어에 내장되어있음
Normalization Theory

- 이 설계에는 어떤 문제가 있을까?
- Normalization Theory: 어떤 설계가 나쁜지 규격화하고, 테스트함
Storage Management
- DBMS가 데이터베이스를 관리하기 위해 설계된 시스템 소프트웨어라면
- 왜 DB를 관리할 때 그냥 file system을 사용하면 안될까?
DBMS 대신 파일 시스템을 사용한다면,
def add_student(name, student_id, major):
with open(FILE_PATH, "ab") as f:
packed_data = struct.pack(
STUDENT_STRUCT_FORMAT,
name.encode('utf-8')[:20].ljust(20, b'\x00'),
student_id.encode('utf-8')[:10].ljust(10, b'\x00'),
major.encode('utf-8')[:20].ljust(20, b'\x00')
)
f.write(packed_data)
- 파일에서 특정 학생 데이터를 찾고 업데이트하기 위해서 코드를 수정해야 한다면?
- 파일에 수백만개의 레코드가 있을 때, 상사가 휴대폰 번호도 관리하라고 시킨다면 어떻게 파일을 업데이트할까?
- 상사가 어플리케이션이 너무 느리다고 불평한다면?
- 어플리케이션이 동시에 여러 쿼리를 사용해야 할 때, 파일을 동시에 접근하면서 발생하는 충돌을 막는 방법은?
파일 시스템 대신 DBMS를 사용하는 이유
- 데이터에 대한 균일한 접근 및 제어 방법
- 중복 제어
- 무결성
- 데이터 독립성
- Storage 구조가 기능에 영향을 주지 않음
- 동시성 제어
- Recovery 보장
- 보안
- 일관성
- 등등..
| DBMS (추상화 & 자동화) | File System (유연성 & 제어) |
|---|
| 목적 | 구조화된 데이터 관리 | 일반적인 파일 저장 |
| 데이터 접근 | SQL query, 인덱싱, 트랜잭션 | 직접 파일 IO |
| 유연성 | 고정된 스키마, 쿼리 최적화 | 어떤 파일 포맷이든, 유저가 정의한 구조 |
| 동시성 & 무결성 | ACID 원칙, 자동화된 제어 | 직접 동시성 제어가 필요 |
| 성능 | 복잡한 쿼리를 위해 최적화 | 간단한 I/O는 더 빠름 |