1. Introduction
Data, Database, DBMS์ DB App: ์ง๊ด์ ๊ฐ๋ ๋ค
- Data: '๋๊ตฐ๊ฐ'์ ๊ด๋ จ (๋์ ์ํธ๋กํผ)
- Database, DBMS: '์กฐ์ง'๊ณผ ๊ด๋ จ
- DB App: '์ฌ์ฉ์'์ ๊ด๋ จ (๋ฎ์ ์ํธ๋กํผ)
Database์ DBMS
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: ๊ด๋ จ๋ ๋ฐ์ดํฐ์ ๋
ผ๋ฆฌ์ ์งํฉ
- ์ฃผ์ ๋ชฉํ
- ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ '๋ ผ๋ฆฌ์ ์ผ๋ก ์กฐ์งํ'ํ๋ ๊ฒ
- ๋ฐ์ดํฐ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์งํ๋ฉด์
- ๋ฐ์ดํฐ ์ค๋ณต์ ์ต์ํํ๋ฉด์
- ์ฃผ์ ๋ชฉํ
- Database Management System(DBMS): ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ์ง๋ฅ์ ์๋น์ค
- ์ฃผ์ ๋ชฉํ
- ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ '๋ฌผ๋ฆฌ์ ์ผ๋ก ์กฐ์งํ'ํ๋ ๊ฒ
- ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋นจ๋ฆฌ ์ฒ๋ฆฌํ๋ฉด์
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ํตํฉ์ฑ์ ์ ์งํ๋ฉด์
- ์ด๋ ์ ๋์ ์์ธก ๋ถ๊ฐํ ์ค๋ฅ๋ฅผ ์ฉ์ธํ๋ฉด์
- ์ฃผ์ ๋ชฉํ
๋ฐ์ดํฐ ๋ชจ๋ธ
- ๊ด๊ณํ ๋ชจ๋ธ (by Ted Codd)
- ํ ์ด๋ธ์ ์งํฉ์ด ๊ณง ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ฐ ํ ์ด๋ธ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ (๋ ์ฝ๋)์ ์งํฉ์ ๋ํ๋
(98345, Kim, Elec. Eng. and 80000)๋ ์๋ก ๊ด๋ จ๋์ด ์์
- Entity-Relationship ๋ฐ์ดํฐ ๋ชจ๋ธ (Database ๋์์ธ์ ์ฃผ๋ก ์ฌ์ฉ๋จ)
- (์ค์ ์ธ๊ณ์) ๊ฐ์ฒด์ ๊ทธ๋ค์ ๊ด๊ณ๋ฅผ ํํ
- ๋์์ธ (E-R ๋ชจ๋ธ) -> ๊ตฌํ (๊ด๊ณํ ๋ชจ๋ธ)
- Semi-structured ๋ฐ์ดํฐ ๋ชจ๋ธ (JSON, XML)
- ๋์ผํ type์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ธฐ ๋ค๋ฅธ ์์ฑ์ ๊ฐ์ง ์ ์์
Schema์ Instance
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ variable๊ณผ value์ ๊ฐ๋ ๊ณผ ์ ์ฌ
- Logical Schema: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ ์ธ ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ, ๋์์ธ
- ์: ๊ทธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ํ ๊ณ์ข๋ค๊ณผ ์๋น์๋ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ๊ด๊ณ์ ๋ํ ์งํฉ์ ๊ดํ ์ ๋ณด๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ํ๋ก๊ทธ๋จ ๋ด ๋ณ์์ ํ์ ์ ๋ณด์ ์ ์ฌ
- ์: ๊ทธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ํ ๊ณ์ข๋ค๊ณผ ์๋น์๋ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ๊ด๊ณ์ ๋ํ ์งํฉ์ ๊ดํ ์ ๋ณด๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ๋ฌผ๋ฆฌ ์คํค๋ง: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ ์ธ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ, ๋์์ธ
- ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ ๋
๋ฆฝ: ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ ์์ด ๋ฌผ๋ฆฌ์ ์คํค๋ง๋ฅผ ์์ ํ ์ ์๋ ability
- ๋ ผ๋ฆฌ์ ์คํค๋ง์ ์์กดํ๋ Applications
- ์ผ๋ฐ์ ์ผ๋ก, ๋ค์ํ ๋ ๋ฒจ๊ณผ ๊ตฌ์ฑ ์์๋ค ๊ฐ์ ์ธํฐํ์ด์ค๋ ํ ๋ถ๋ถ์์์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๋ถ๋ถ์ ์ฌ๊ฐํ ์ํฅ์ ์ฃผ์ง ์์์ผ ํจ.
- ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ ๋
๋ฆฝ: ๋
ผ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ ์์ด ๋ฌผ๋ฆฌ์ ์คํค๋ง๋ฅผ ์์ ํ ์ ์๋ ability
- ์ธ์คํด์ค (Instance): ํน์ ์์ ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์ ๋ด์ฉ(contents)
Data Definition Language (DDL, ๋ฐ์ดํฐ ์ ์์ด)
- Database schema๋ฅผ ์ ์ํ๊ธฐ ์ํ ๋ช ์ธ์ ํ๊ธฐ
create table instructor (
ID char(5),
name varchar(20),
dept_name varchar(20),
salary numeric(8,2)
)
- DDL compiler๋ ๋ฐ์ดํฐ dictionary์ ์ ์ฅ๋ ํ ์ด๋ธ ํ ํ๋ฆฟ์ ์งํฉ์ ์์ฑํจ.
- ๋ฐ์ดํฐ ์ฌ์ ์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ํฌํจ (์ฆ, ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง
- ๋ฌด๊ฒฐ์ฑ ์ ์ฝ
- Primary key (ID๋ uniqueํ๊ฒ instructors๋ฅผ ์๋ณํจ)
- Authorization(์น์ธ, ๊ถํ)
- ๋๊ฐ ๋ฌด์์ ์ ๊ทผํ ์ ์๋์ง
Data Manipulation Language (DML, ๋ฐ์ดํฐ ์กฐ์์ด)
- ์ ์ ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ํด ์กฐ์ง๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ณ ์ ๋ฐ์ดํธํ๊ธฐ ์ํ ์ธ์ด
- ํฌ๊ฒ ๋ ์ข
๋ฅ๊ฐ ์์
- Procedural DML ์ ์ฐจ์ DML
- ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง ์ด๋ป๊ฒ ๊ทธ๊ฒ์ ์ป์ ๊ฒ์ธ์ง ์ฌ์ฉ์์๊ฒ ์๊ตฌํจ
- Declarative DML ์ ์ธ์ , ๋น์ ์ฐจ์ DML
- ํด๋น ๋ฐ์ดํฐ๋ค์ ์ด๋ป๊ฒ ์ป์ ๊ฒ์ธ์ง์ ๋ํ ๊ตฌ์ฒดํ ์์ด ๋ฌด์์ ํ์๋ก ํ๋์ง๋ง ์ฌ์ฉ์์๊ฒ ์๊ตฌ
- ์ ์ฐจ์ DML์ ๋นํด ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์
- ๋น์ ์ฐจ์ DML(non-procedural DML)์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ
- Procedural DML ์ ์ฐจ์ DML
- DML์์ ์ ๋ณด ํ์๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ query language๋ผ๊ณ ํจ
SQL Language
- SQL language๋ DDL๊ณผ DML ๋ชจ๋๋ฅผ ์ํ
- SQL query language๋ ๋น์ ์ฐจ์ ์.
- ํ๋์ ์ฟผ๋ฆฌ๋ ํ๋ ์ด์์ ํ ์ด๋ธ๋ค์ ์ ๋ ฅ์ผ๋ก ๋ฐ๊ณ , ํญ์ ๋จ์ผ ํ ์ด๋ธ์ ๋ฐํํจ
- Comp. Sci ํ๋ถ์ ๋ชจ๋ ๊ต๊ฐ์ฌ ์ถ๋ ฅ ์์)
select name
from instructor
where dept_name = 'Comp. Sci.'
- SQL์ ํ๋ง ๋จธ์ ๊ณผ ๋๋ฑํ ์ธ์ด๊ฐ ์๋
- ๋ณต์กํ ํจ์ ์ฐ์ฐ์ ๊ฐ๋ฅ์ผ ํ๊ธฐ ์ํด์, SQL์ ์ฃผ๋ก ๋ ๋์ level์ ์ธ์ด์ embedded๋๊ณค ํจ.
์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์ค ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ
- embedded SQL์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํ ์ธ์ด ํ์ฅ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL query๋ฅผ ๋ณด๋ผ ์ ์๊ฒ๋ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋จ ์ธํฐํ์ด์ค(ODBC๋ JDBC์ ๊ฐ์)
Database design
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๋ฐ์ ๊ตฌ์กฐ๋ฅผ ๋์์ธํ๋ ๊ณผ์
๋ ผ๋ฆฌ์ ๋์์ธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์์ ๊ฒฐ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋์์ธ์ ๊ด๊ณ ์คํค๋ง์์ "์ข์" ์งํฉ์ ์ฐพ์ ๊ฒ์ ์๊ตฌํจ
- ๋น์ฆ๋์ค์ ๊ฒฐ์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ค ์์ฑ๋ค์ ๊ธฐ๋กํด์ผ ํ ๊น?
- ์ปดํจํฐ ๊ณผํ์ ๊ฒฐ์ : ์ด๋ค ๊ด๊ณ ์คํค๋ง๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ , ์ด๋ป๊ฒ ๋ค์ํ ๊ด๊ณ ์คํค๋ง์ ๊ทธ ์์ฑ๋ค์ด ๋ถํฌ๋๊ฒ ํ ๊น?
๋ฌผ๋ฆฌ์ ๋์์ธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌผ๋ฆฌ์ ๋ ์ด์์์์์ ๊ฒฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ ์ฒด ์์คํ ์ ๊ฐ ์ฑ ์์ ์ฒ๋ฆฌํ๋ module๋ก ๋ถํ ๋จ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๊ธฐ๋ฅ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถํ ์ ์์
- The storage manager
- The query processor
- The transaction management
Storage Manager
DB์ low-level ๋ฐ์ดํฐ์ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์์คํ ์ ์ ์ถ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋จ ๋ชจ๋
์คํ ๋ฆฌ์ง ๋งค๋์ ๋ ๋ค์ ์์ ๋ค์ ์ฑ ์์ ์ ธ์ผ ํ๋ค.
- OS ํ์ผ ๋งค๋์ ์์ ์ํธ์์ฉ
- ํจ์จ์ ์ธ ์ ์ฅ, ํ์, ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ
์คํ ๋ฆฌ์ง ๋งค๋์ ๊ตฌ์ฑ ์์๋ค์ ๋ค์์ ํฌํจํด์ผ ํ๋ค.
- Authorization๊ณผ ๋ฌด๊ฒฐ์ฑ ๊ด๋ฆฌ์
- ํธ๋์ญ์ ๋งค๋์ , ํ์ผ ๋งค๋์ , buffer ๋งค๋์
์คํ ๋ฆฌ์ง ๋งค๋์ ๋ ๋ฌผ๋ฆฌ์ ์์คํ ๊ตฌํ์ ์ผ๋ถ๋ก์ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ํ์ผ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ค๋ก๋ฅผ ์ ์ฅ
- ๋ฐ์ดํฐ dictionary(์ฌ์ ): ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ๊ดํ ๋ฉํ ๋ฐ์ดํฐ ์ ์ฅ, ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง
- Indices: ๋ฐ์ดํฐ ์์๋ค์ ๋น ๋ฅธ ์ ๊ทผ์ ๊ฐ๋ฅ์ผ ํจ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ ๊ทธ๋ฌํ ํน์ ํ ๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ ์์ดํ ์ ํฌ์ธํฐ๋ฅผ ์ ๊ณตํจ.
Query Processor
์ฟผ๋ฆฌ ํ๋ก์ธ์ ๊ตฌ์ฑ ์์
- DDL ์ธํฐํ๋ฆฌํฐ: DDL ๊ตฌ๋ฌธ์ ํด์ํ๊ณ , ๋ฐ์ดํฐ ์ฌ์ ์ ์ ์๋ค์ ๊ธฐ๋กํจ
- DML ์ปดํ์ผ๋ฌ: Query language์์ DML ๊ตฌ๋ฌธ์ ๊ฐ์ ธ์์ query evaluation ์์ง์ด ์ดํดํ ์ ์๋ low-level ์ง์นจ์ ์ํด ๊ตฌ์ฑ๋ evaluation ๊ณํ์ผ๋ก ๋ณํ
- DML ์ปดํ์ผ๋ฌ๋ ๋ค์ํ ๋์๋ค ์ค ์ต์ ๋น์ฉ evaluation ๊ณํ์ ์ฑํํ๋ ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์ํ
- ์ฟผ๋ฆฌ ํด์ ์์ง์ DML ์ปดํ์ผ๋ฌ์ ์ํด ์์ฑ๋ low-level์ ์ง์์ฌํญ๋ค์ ํด์ํจ
ํธ๋์ญ์ ๊ด๋ฆฌ
ํธ๋์ญ์ (Transaction)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฉ ํ๋ก๊ทธ๋จ์์ ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ผ๋ จ์ ์ฐ์ฐ(operations)๋ค์ ์งํฉ
ํธ๋์ญ์ ์ ๋ค ๊ฐ์ง ์ฃผ์ ํน์ฑ
- ์์์ฑ(Atomicity)
- ์ผ๊ด์ฑ(Consistency)
- ๊ฒฉ๋ฆฌ์ฑ(Isolation)
- ์ง์์ฑ(Durability)
ํธ๋์ญ์ ๊ด๋ฆฌ์๋ ๋ณต๊ตฌ ๊ด๋ฆฌ์(Recovery Manager)์ ๋์์ฑ ์ ์ด ๊ด๋ฆฌ์(Concurrency Control Manager)๋ก ๊ตฌ์ฑ๋จ
๋ณต๊ตฌ ๊ด๋ฆฌ์(Recovery Manager)
- ์ ์ ์ฅ์ ๋ ์ด์์ฒด์ ์ค๋ฅ ๋ฑ ์์คํ ์ฅ์ (system failure) ๋ฐ ํธ๋์ญ์ ์คํจ(transaction failure)๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๊ด๋๊ณ ์ฌ๋ฐ๋ฅธ ์ํ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅ
- ํธ๋์ญ์ ์ ์์์ฑ(Atomicity)๊ณผ ์ง์์ฑ(Durability) ์์ฑ์ ๋ณด์ฅ
๋์์ฑ ์ ์ด ๊ด๋ฆฌ์(Concurrency-Control Manager)
- ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋ ๋ ์ด๋ค ๊ฐ์ ์ํธ ์์ฉ์ ์ ์ดํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ(consistency)์ ์ ์ง
- ํธ๋์ญ์ ์ ์ผ๊ด์ฑ(Consistency)๊ณผ ๊ฒฉ๋ฆฌ์ฑ(Isolation) ์์ฑ์ ๋ณด์ฅ
