용's
[Chap 1]데이터베이스 기본 개념 및 용어 본문
1.1 데이터베이스와 데이터베이스 관리 시스템
1) 데이터베이스(DB: database)
- 자료(data)를 많이 모은 것(base)
- 많은 자료를 어떻게 잘 처리할 것인지가 데이터베이스의 주요 관심사
#아무 연관도 없는 자료를 모아둔 것이 아님!
- 데이터베이스 자료는 서로 연관성이 있어야 함
ex) 대학에 관한 데이터베이스라면, 학생정보, 교수정보, 일반 직원정보, 교과 과정정보 등등
2) 데이터베이스 관리 시스템(Database Management System)
- 데이터베이스와 데이터베이스 관리 시스템은 아주 다른 개념
- 데이터베이스 관리 시스템(DBMS):
=> 사용자가 만든 것이 아니라, DBMS 개발 회사에서 만든 것을 사거나 가져와서 씀.(DB를 관리하는 프로그램의 모음)
=> 마치 컴파일러(및 라이브러리)를 만들어 쓰지않고, 사서(혹은 가져와서) 쓰는 것처럼!
- DBMS의 목적
=> 쉽게 그리고 효율적으로 데이터베이스에 자료를 넣을 수 있어야함.
=> DB에서 자료를 가져올 수 있는 환경을 만들어야함
3) 응용 프로그램(Application/User Program)
- 각 기관에서 DB를 관리하기 위하여
=> DBMS에 있는 프로그램을 활용하여, 그 기관의 실정에 맞게 응용 프로그램을 만들어야 한다.
- 예로서, 대학교는 입학 사정, 신입생 처리, 수강 신청, 성적 처리, 성적 확인 등을 하는 프로그램이 필요함
- 응용프로그램은 DBMS에 따라오지 않는다. (C Compiler/lib가 있어도 c program은 각자 짜야하는 것 처럼...)
- 응용 프로그램은 각 기관에서 만들어야 함.
- 이와 같이 기관에서 개발한 프로그램을 응용 프로그램 또는 사용자 프로그램이라고 함.
1.2 DBMS와 File Processing 접근 방식
- 파일 처리(File Processing) 방식만으로는 지원하지 못하는 기능을 보강하기 위하여 나온 것이 DBMS
- DBMS는 1960년대부터나오기 시작(오늘날 많이 쓰고 있는 관계형(rerational) DBMS는 1970대 부터 시작)
1) 파일 처리 접근 방식의 문제점
첫째, 자료 중복(data redundancy과 자료 불일치(data inconsistency): 같은 정보가 여러군데 되풀이되어 저장
예) 대학교에서 학생의 전화번호가 바뀔 때, 동일 학생의 정보가 여러 부서에 중복 저장과 부서에 따라 다른 전화 번호 값을 저장하면, 자료불일치가 생길 수 있음(부서마다 업데이트가 되지 않은...)
#이와 같은 일이 일어나는 이유는? 파일처리 방식은 디스크 마다 저장된 정보가 다름. (매일 같게 해주지 않으면)
둘째, 파일 처리를 쉽게 할 수 없음: 파일 처리 접근 방식의 경우, 파일에 있는 자료를 보거나 파일에 자료를 넣으려면 주 로 고급 프로그래밍 언어로 응용프로그램을 만듦(상당한 수준의 훈련과 많은 시간 소요) DBMS의 경우 SQL로 쓰기 편함
셋째, 자료의 고립(data isolation)문제: 원하는 자료가 흩어져 있을 때, 한꺼번에 모아서 쓰기가 어렵다.
예) 원하는 자료가 file1에서 data1, file2에서 data2와 data3가 필요할 때, 새 파일을 만든다면? 자료의 중복 및 불일치 문제가 또 발생
넷째, 자료의 무결성(data integrity): 자료의 불일치는 자료의 무결성을 깨게 됨(무결성이 더 큰 개념). 즉, 무결성이란 자 료에 잘못이 없어야 한다는 개념.
다섯째, 원자성(atomicity): 예를 들어 보자. 학생이 CS200이라는 과목 01분반을 수강 신청했고, 시간이 맞지 않아 02분 반으로 옮기는 상황. 분반을 바꾸려다가, 다음과 같이 일부만 처리되고 일부는 처리되지 않을 수가 있다.
경우 |
01분반 수강 취소 |
02분반 수강신청 |
결과 |
1 |
처리됨 |
처리됨 |
제대로 바뀜(o) |
2 |
처리되지 않음 |
처리되지 않음 |
분반이 안바뀌고 그대로 남음(o) |
3 |
처리됨 |
처리되지 않음 |
한 분반에도 신청되지 않음(x) |
4 |
처리되지 않음 |
처리됨 |
두 분반에 모두 신청됨(x) |
위의 표에서 파일 처리 접근방식은 경우 3과 4번과 같은 일이 발생할 수 있음. 허나 DBMS에서는 Transaction(두 개를 묶어 같이 처리되도록 하는 일. 프로그램 같은 것으로 처리하는 것) 개념을 도입하여 그렇지 않음
여섯째, 동시 접근 문제: 어떤 자료를 여러 프로그램이 같은 시각에 바꾸려고 할 때, 자료의 값이 잘못 될 수 있음
예) 한 데이터에 두명이 동시에 접근하는데, 처리되는 과정이 읽기->올림->쓰기의 순으로 진행된다고 하면, 한명이 값을 읽고 올린 뒤 쓰기를 할려고 할때 다른 학생이 읽기를 할 수 있음. 그럼 쓰기 전에 읽었으므로 잘못되게 읽을 수 있는 경우가 발생!
반면에, DBMS의 경우는 동시 접근 제어(Concurrency control) 기능이 위에 같은 에러가 안나도록 보장.
일곱째, 보안 문제: 파일처리 접근 방식은 파일별 접근 제한을 둠으로써 보안을 실현. 허나 이 방법으로는 정교한 자료 보 안이 어려움.
1.3 뷰와 자료 독립성
- 자료 추상화(Data abstraction) 세 단계
=> 물리적 수준(Physical level): 자료가 실제로 저장되는 수준이며, 가장 아래 수준
=> 논리적 수준(Logical level): 데이터베이스 관리자(Database Administrator)가 처리하는 수준
=> 뷰(Virtual table) 수준(View level): 일반 사용자가 쓰는 수준
- 물리적, 논리적 수준은 관리자 수준이며, 뷰는 유저 수준으로 분류.
- 자료 추상화는 개념적인 것으로 실제 DBMS에서는 세 수준으로 잘 안 나뉠 수도 있음.
- 자료 독립성(data independence)
=> 어느 단계의 스키마를 바꾸었을 때, 그 윗 단계의 스키마에 영향을 주지 않는 것을 가리킴.
1) 물리적 자료 독립성
- 맨 아랫 단계인 물리적 단계의 스키마를 바꾸어도, 논리적, 뷰 단계의 스키마는 영향을 주지 않고 응용 프로그램에도 주지 않음을 말함
2) 논리적 자료 독립성
- 가운데 단계인 논리적 단계의 스키마를 바꾸어도 그 윗 단게인 뷰 단계의 스키마에 영향을 주지 않고 그 결과 응용프로그램에도 영향을 주지 않음을 말함. (하지만 실제 DBMS에서 물리적/논리적 자료의 독립성이 잘 나누어지지 않을 수 있음)
예) 색인(index): 보통은 색인이 있으면 검색 속도가 빨라지나 SQL프로그램에는 영향이 없음
create table 학생(학번 char(7), 이름 char(20)); //학생이라는 스키마
select* from 학생 where 이름 = '홍길동';
위의 코드는 SQL에서 학생을 찾는 SQL 명령이다. 그렇다면 색인을 추가한다면?
create index 이름_색인 on 학생 (이름);
select* from 학생 where 이름 = '홍길동';
색인(index)를 새로 create하여도 학생을 찾는 select명령은 전혀 바꾸지 않고도 똑같은 결과를 얻을 수 있다.
이것이 바로 자료 독립성이고 색인이 있든 없든, select 명령은 바뀌지 않고 그대로 이다. 다만 실행 속도가 달라진다(무조건 색인이 빠른것이 아니다. 예를 들면 '=홍길동'이 아니라 '>홍길동'과 같이 연산 조건이 바뀌면 Sequential이 더 빠르다.)
파일 처리 접근 방식에서는 index가 없다면 sequential search, 있다면 Binary Search를 이용하여 찾을 수 있음
=> 파일 처리 방식에서는 자료의 독립성이 없다. (index를 쓸 때와 안 쓸때의 프로그램이 크게 바뀜)
허나 DBMS에서는 index가 있든 없든 SQL 명령은 바뀌지 않음.
예) 뷰(View): 뷰는 실제로 디스크에 있는 Table이 아니라 가상의 Table을 뽑아내는방식(필요한 정보만 뽑아내는 방식)
create table 학생(학번 (char(9), 집전화 (char(15), 이름 char(20))); //학생 테이블 생성
create view 학생3v as select 학번, 이름 from 학생; //학생 테이블에서 학번과 이름만 뽑아 학생3v라는 뷰 생성
select* from 학생3v where 학번='9902101'; //응용프로그램에서 학생v3 view를 씀.
만약 위의 코드에서 휴대전화라는 속성이 학생 테이블에 추가 된다면? 학생 테이블의 스키마는 바꼈지만, 학생3v의 create 명령이나 select 문장을 전혀 바꾸지 않아도 결과는 제대로 나온다. 이것이 바로 자료 독립성!
만약에 파일처리 방식에서 새로운 필드(field 또는 레코드)가 들어가게 되면, 프로그램이 짜여진 방식이 따라 프로그램이 바뀜. 이것은 곧 자료의 독립성이 없다는 뜻!
1.4 스키마(schema)와 인스턴스(instance)
- 데이터베이스, 테이블등에서 스키마와 인스턴스를 구별함.
=>테이블의 스키마와 테이블의 인스턴스 / 데이터베이스의 스키마와 데이터베이스의 인스턴스
- 테이블의 스키마와 테이블의 인스턴스
=> 테이블의 스키마
create table 학생(학번 char(7), 이름 char(20));
- 이 명령은 테이블의 틀(=뼈대, 스키마)만 나타낼 뿐, 테이블 안에 어떤 자료가 실제로 들어 있는지는 말하지 않음
=> 테이블의 인스턴스
학생 |
학번 |
이름 |
|
9902101 |
김예솔 |
|
9902102 |
홍두리
|
- 어떤 트정 시점에 테이블 안에 있는 구체적인 값의 집합을 인스턴스라 함. (위의 표와 같이 실제로 값이 들어가 있는 것.)
=> 테이블 스키마같은 경우는 한번 만들면 잘 바뀌지 않지만 테이블 인스턴스는 자주 바뀌는 것이 보통이다.
1.5 자료 모델(Data Models)
1) 개체-관계 모델(E-R: Entity-Relationship model)
- 실제 세계에 대한 인식에 바탕을 두고 있음
- "개체(entity)", "개체와 개체 사이의 관계(relationship)" 이 두가지를 기본으로 함
- 실행할 수 있는 프로그램은 포함하지 않고 설계 과정에서 많이 쓴다는 사실!!!
2) 객체 지향 모델(OO model)
-ER관계 모델 개념을 많이 포함. 자료 뿐만 아니라 실행할 수 있는 프로그램까지 모두 포함
3) 관계형 모델(relational model)
- 오늘날 가장 널리 쓰고 있는 관계형 데이터베이스의 모델
- "자료(data)"와 "자료 사이의 관계(relationship)"를 모두 관계(relation = 테이블:table)로 나타냄
- 데이터베이스에서 가장 중요한 모델이며 다른 모델과 차별성으로 포인터를 사용하지 않는다는 점!!(중요!!)
4) 그 외, 네트워크 모델과 계층적 구조도 있다.
1.6 자료 정의어(DDL)와 자료 조작어(DML)
1) 자료 정의어(DDL: Data-Definition Language)
- 자료 정의어란, 스키마를 정의하는 언어
- SQL에서 자료 정의어는 create table 학생(학번 char(7), 이름 char(2)); //즉 정의만 하고 틀만 잡는 것!!
2) 자료 조작어(DML: Data-Manipulation Language)
- 데이터베이스 안에 있는 자료를 가져오거나(retrieve), 없애거나(delete), 바꾸거나(update), 새 자료를 넣거나(insert)하는 일을 한다.
- 그 전에는 자료 정의어와 자료 조작어를 처리하는 프로그램이 달랐으며, 그 때 이 둘을 구별하는 하는 것이 중요했음. 하지만 요즘은 SQL등에서는 이 둘을 구별하는 것이 크게 중요하지 않음
1.7 자료 조작어의 성질: 비절차적, 집합 결과
- 두 가지 독립적인 기준에 따라서 나눌 수 있으며, 그 결과 4가지로 총 나눌 수 있음
=> 절차적(procedural, P1)이냐 비절차적(P2)이냐, 그 결과가 집합(S1)이냐 하나의 레코드(S2)이냐
1) 절차적 조작어(P1)
- C언어 등과 같은 고급 프로그래밍 언어: 원하는 결과를 얻기 위해 프로그래머가 자세한 절차를 적음
예) A=1; b=A*3;
- DB 분야: 절차적 자료 조작어의 예로는 관계 대수(relational algebra, 나중에 배울 것임!)
2) 비절차적 조작어(P2)
- 관계형 해석(ralational calculus, 나중에 배울 것임!)
- SQL 명령어들은 비절차적인 조작어에 해당
- 표의 스키마를 만들고 자료를 가져오는 예를 들어보자
예) create table 수강(학번, 과목번호, 성적등급);
해당 테이블이 만들어졌다고 가정하고 성적 등급이 A인 모든 학생의 학번을 찍어내고 싶을 떄,
절차형 조작어인 관계대수를 쓸 경우, 성적 등급이 A인 줄을 먼저 찾고(select) -> 속성 세 개 가운데 학번 속성만 찍는다(project). 즉, select -> project와 같은 순서가 지정됨. (사용자가 지정)
하지만, SQL의 select 경우, select 학번 from 수강 where 학번 = 'A'; 에서 보면 어떤 절차에 따라 할지 select 명령에는 나와 있지 않다. 즉, 학번과 등급 속성만 먼저 뽑아낸 뒤 A인 사람을 찾을 수도 있고, 성적이 A인 사람을 먼저 찾은 뒤 학번을 찍을 수 있음.
그렇다면 비 절차적 조작어를 실행할 때 그 처리 절차는 누가 정함? SQL의 경우 SQL 질의 처리기(프로그램)가 사용자의 SQL 명령을 보고 알아서 결정해줌
3) 결과가 집합인 자료 조작어(S1)
- 관계 해석 명령의 결과는 집합이며 SQL 명령의 결과 또한 늘 집합이다!!#
예) select 명령어를 이용하여 과목번호가 CS123인 자료만 보고 싶다고 할 때 그 결과는 집합이라는 뜻
4) 결과가 레코드 한 개인 자료 조작어
- 결과가 집합이 아니라 레코드
- 데이터베이스 수업에서는 다루지 않음.
- Embedded SQL이라는 것도 있으나 잘 안 쓰임. 이건 Select 명령을 실행하면 결과는 집합이지만 한 줄씩 읽어오는 것
#SQL의 경우 비절차저이고 결과가 집합이라는 것을 기억하자!
1.8 질의어(Query Language)와 자료 조작어
1) 질의어(Query)
- 원래 뜻은 묻다, 물어보다
- 따라서 Query는 데이터베이스에서 '이미 있는 자료나 정보를 가져오는 것'
- SQL에서 보면 Select만 해당되고 insert, update, delete 등은 해당되지 않음. (허나, 실제로 많은 사람들이 더 넓은 뜻으로 많이들 씀)
2) 자료 조작어(DML)
- 엄밀한 뜻은 질의어보다 더 넓은 개념. 실제로는 질의어와 DML은 같은 뜻으로 보통 씀. 무엇인지는 앞서 설명 함
1.9 데이터베이스 관리자와 사용자
1) DBA(Database Administrator)
- 자료 접근 권한을 정하고 바꾸는 일, 무결성 제약 조건을 정하는 일을 함. 이는 한명일수도 여러명일 수도 있다.
2) 데이터베이스 사용자
- 응용 프로그래머(SQL 사용자): 전산실에서 프로그램 개발하는 사람들과 같은...
- 일반 사용자: SQL에 신경쓰지 않고 응용 프로그램을 그냥 쓰기만 하는 사람: 은행 창구 직원, ATM을 쓰는 손님.. 등등..
'Computer Science > Database' 카테고리의 다른 글
[Chap 6] 도메인, 참조 무결성, 함수적 종속 (0) | 2014.12.04 |
---|---|
[Chap 2-2] 개체-관계 모델(Entity-Relationship mode) (0) | 2014.10.13 |
[Chap 2-1] 개체-관계 모델(Entity-Relationship model) (0) | 2014.10.12 |