대학교를 예로 들면 다음과 같은 정보를 관리해야 한다.
이 데이터를 개별 파일로만 관리하면 아래의 문제가 발생한다.
아래는 데이터베이스 시스템이 필요한 이유에 대해 설명한다.
| 과목 번호 | 교수 | 연구실 | 이메일 ID |
|---|---|---|---|
| 3178 | Wookhee Kim | New Eng. Bld. 1217 | wookhee |
| 4656 | Wookhee Kim | Eng. Bld. C422 | wookhee |
교수 이름과 이메일처럼 같은 정보가 여러 곳에 복사되어 있으므로 저장 공간이 낭비되고 수정 작업이 늘어난다.
중복 데이터 생성
-> 복사본 중 일부만 수정
-> 서로 다른 값이 공존
-> 데이터 불일치 발생
데이터를 다루기 편리함
SQL이라는 공통 쿼리 언어를 사용한다.데이터가 여러 파일에 흩어져 있고 파일 형식까지 다르면 통합 처리가 어려움
예시:
salary >= 0
급여가 음수가 될 수 없다는 규칙이 여러 프로그램에 흩어져 있으면, 일부 프로그램이 검사를 빠뜨릴 수 있다. DBMS에서는 이런 제약조건을 중앙에서 정의하고 관리할 수 있다.
성적도 마찬가지다. 최종 학점이 A+, A0, B+, B0처럼 정해진 값만 허용된다면, 허용 목록에 없는 값이 저장되지 않도록 제약조건을 둘 수 있다.
응용 프로그램마다 같은 검증 코드를 반복해서 작성하지 않아도 DBMS가 잘못된 입력을 거부한다.
A 계좌의 500달러 중 200달러를 B 계좌로 송금한다고 하자.
| 상태 | A 계좌 | B 계좌 | 판단 |
|---|---|---|---|
| 송금 전 | 500 | 100 | 정상 |
| 송금 완료 | 300 | 300 | 정상 |
| B에만 입금 | 500 | 300 | 비일관 상태 |
| A에서만 출금 | 300 | 100 | 비일관 상태 |
(500, 100) 또는 송금 완료 후의 (300, 300)만 정상이며,(400, 200)처럼 총합만 같은 임의의 중간 상태는 올바른 결과가 아니다.즉, Atomicity = All or Nothing
여러 사용자가 같은 데이터를 동시에 읽고 수정하면 잘못된 결과가 생길 수 있다.
잔액이 1,000달러인 계좌에서 동시에 다음 요청이 들어온다고 하자.
정상적인 최종 잔액은 700달러지만, 두 작업이 모두 1,000달러를 읽은 뒤 각자 결과를 덮어쓰면 900달러 또는 800달러가 남을 수 있다.
두 작업이 같은 값 1000을 읽음
-> A는 900을 계산
-> B는 800을 계산
-> 나중에 쓴 값이 앞선 결과를 덮어씀
DBMS는 동시성 제어를 통해 이러한 이상 현상을 방지해야 한다.
가장 단순한 해결 방식은 먼저 접근한 작업에 수정 권한을 주고, 그 작업이 끝날 때까지 다른 작업의 접근을 막는 것이다. 운영체제의 mutex와 유사한 lock을 사용해 두 작업을 순서대로 실행하면, 첫 출금 후 잔액을 다음 작업이 읽으므로 최종 잔액은 올바른 700달러가 된다.
모든 사용자가 데이터베이스의 모든 데이터에 접근할 수 있어서는 안 된다.
| 문제 | 핵심 내용 |
|---|---|
| 중복성과 불일치 | 같은 정보가 반복 저장되고 서로 다른 값이 될 수 있음 |
| 접근의 어려움 | 새로운 조회마다 프로그램 작성이 필요할 수 있음 |
| 데이터 고립 | 여러 파일과 형식에 흩어진 데이터를 통합하기 어려움 |
| 무결성 문제 | 데이터 규칙을 일관되게 적용하기 어려움 |
| 원자성 문제 | 작업 일부만 반영된 비정상 상태가 남을 수 있음 |
| 동시 접근 이상 | 동시에 갱신하면서 결과가 유실될 수 있음 |
| 보안 문제 | 사용자별 접근 범위를 통제하기 어려움 |
데이터베이스 시스템의 중요한 목적은 사용자에게 데이터의 추상화된 모습을 제공하는 것이다.
DBMS는 데이터가 실제로 저장되고 관리되는 복잡한 세부 사항을 숨긴다.
이런 시스템을 사용자가 모두 이해할 필요는 없다.

| 단계 | 설명 | 예시 |
|---|---|---|
| View level | 사용자별로 필요한 일부 데이터만 표현 | 급여가 제외된 교직원 정보 화면 |
| Logical level | 저장된 데이터와 데이터 사이의 관계를 표현 | instructor(ID, name, dept_name, salary) |
| Physical level | 데이터가 실제로 저장되는 방식을 표현 | B+-tree, 해시 테이블, slotted page |
Type instructor = record
ID : char(5);
name : char(20);
dept_name : char(20);
salary : numeric(8,2);
end;
데이터 모델은 다음 요소를 기술하는 도구들의 모음이다.
예시:
Reference:
Database System Concept-7th Edition
건국대학교 김욱희 교수님 - Database