본문 바로가기

Programming/DataBase System

Chapter 1 - 관계형 데이터베이스

관계형 데이터베이스



관계형 데이터베이스는 관계형 모델에 기반하여 데이터와 데이터들의 관계를 나타내기 위해 테이블들의 집합을 사용한다. 관계형 데이터베이스는 또한 DMLDDL을 포함한다. 대부분의 상업적인 관계형 데이터베이스 시스템은 SQL 언어를 사용한다.



  • 테이블

각 테이블은 고유한 이름을 가진 여러 개의 열(column)로 구성된다. 아래의 그림은 두개의 테이블을 가진 관계형 데이터베이스의 예로서, 고객과 그들의 계좌를 나타내는 관계형 데이터베이스를 보이고 있다. 첫 번째 테이블은 대학교 교수들에 대한 상세 정보를, 두 번째 테이블은 대학교의 여러 학과들에 대한 정보를 담고 있다.

    

첫 번째 instructor 테이블은 이름이 El Said 이고 32343라는 ID를 갖는 교수가 역사학과의 일원이며 60000달러의 연봉을 받고 있음을 나타낸다. 두 번째 department 테이블은 생물학과가 Watcon 건물에 위치해 있으며 90,000$ 의 예산을 갖고 있음을 나타낸다. 물론 실세계의 대학교는 더 많은 학과와 교수들을 가지고 있다. 여기에서는 개념들을 보여주기 위해 작은 테이블들을 사용한다. 같은 스키마를 갖는 더 큰 예제는 온라인에서 구할 수 있다.

    관계형 모델은 레코드-기반 모델의 한 예이다. 레코드-기반 모델이라 명명한 것은 데이터베이스가 몇 개의 형으로 이루어진 고정 형식의 고정 형식의 레코드로 구성되기 때문이다. 각 테이블은 특정한 형(type)의 레코드들을 포함한다. 각 레코드형은 정해진 수의 필드(또는 속성)를 정의한다. 테이블의 각 열은 레코드형의 속성에 대응한다.

    테이블이 파일 안에서 어떻게 저장되는지를 살피는 것은 어렵지 않은 일이다. 예를 들어, 하나의 레코드 안에서 각각의 속성은 특정 문자(컴마와 같은)로 구분되며, 각각의 레코드는 또 다른 문자(\n같은)로 구분되어 저장된다. 관계형 데이터베이스는 하위 수준의 상세한 구현을 데이터베이스 개발자나 사용자로부터 숨긴다.

    관계형 모델에서 정보의 불필요한 중복 문제를 가진 스키마가 있을 수도 있다는 것에 주의하라 예를 들어, department 의 budget을 instructor 레코드의 속성으로 저장했다고 하자. 그러면 언제라도 특정 예산의 값(예를 들어 물리학과의 예산)이 바뀌면 그 변화는 물리학과와 연관되어 있는 모든 교수들의 레코드에 반영될 것이다.




  • 데이터 조작 언어

SQL 질의 언어는 비절차적 언어이다. 입력으로 몇 개의 테이블(오직 한개도 가능하다)을 받아 항상 한 개의 테이블을 반환한다. 다음은 역사학과의 모든 교수들의 이름을 찾는 SQL 질의언어의 예이다.


select instructor.name                       
from instructor                                
where instructor.dept name = 'History'; 


위의 질의는 instructor 테이블로 부터 dept name 이 History 인 행을 검색하여 해당 행의 name 속성 값을 보여주라는 명령이다. 좀 더 구체적으로 보면 위 질의의 실행 결과는 레이블 값이 name 인 한 개의 열과 dept_name 이 History 인 교수들의 이름을 가지는 행들의 집합으로 된 테이블이다. 위 질의가 위의 그림의 테이블에서 실행된다면 결과는 두 개의 행으로 이루어지는데, 한 행은 El Said 이고 나머지 하나는 Califieri 이다.
    질의의 하나 이상의 테이블에 있는 정보를 포함한다. 예를 들면, 아래의 질의는 예산이 95,000$보다 많은 학과의 모든 교수들의 ID와 학과 이름을 찾아준다.


select instructor.ID, department.dept_name
from instructor, department
where instructor.dept_name = department.dept_name and
department.budget > 95000;



이 질의가 위의 그림의 테이블에 대하여 실행되면, 시스템은 95,000 달러보다 많은 예산을 가진 두 학과 - Computer Science 와 Finance - 를 찾고, 이 학과들의 교수 다섯 명을 찾아낸다. 결과는(12121, Finance), (45565, Computer Science), (10101, Computer Science), (83821, Computer Science), (76543, finance)와 같이 두개의 열(ID, dept_name) 과 다섯 개의 행으로 구성된 테이블이다.



  • 데이터 정의 언어

SQL 은 테이블, 무결성 제약조건, 주장 등을 정의할 때 많은 DDL 을 제공한다. 예를 들어 다음의 SQL 언어는 department 테이블을 정의한다.


create table department                   
(dept_name   char(20),                
building     char(15),             
budget     numeric(12,2));   


위의 DDL 문장의 실행은 dept_name, building, budget 의 세 열을 갖는 department 테이블을 생성하며, 각 열은 특정한 데이터 형을 갖는다. 데이블의 스키마는 메타데이터의 예이다.



  • 응용 프로그램에서의 데이터베이스 접근

SQL은 범용 튜링 머신만큼 강력하지 않다. 즉 SQL 로는 불가능하지만, 일반적인 목적의 프로그래밍 언어를 사용하면 가능한 몇몇의 계산이 존재한다. SQL 은 사용자의 입력, 디스플레이로의 출력, 네트워크를 통한 통신 등과 같은 동작은 지원하지 않는다. 이러한 계산과 동작은 데이터베이스에 있는 데이터에 접근할 수 있는 내장형 SQL 호스트 언어(host language) - 예를 들어 C, C++, 혹은 자바- 로 작성된다. 응용 프로그램은 데이터베이스와 상호 작용하는 데 이용되는 프로그램들이다. 대학교 시스템에서 예를 들면학생의 수강 신청, 수업 명단 생성, 학생 평점 계산, 임금 표 생성을 위한 프로그램을 들 수 있다.
    데이터베이스에 액세스하기 위해, 호스트 언어에 있는 DML 문이 실행되어야 한다. 다음은 이를 실행하기 위한 두 가지 방법이다.


  • DMLDDL 문을 데이터베이스에 보내기 위한 응용 프로그램 인터페이스 제공. C언어를 위한 표준인 ODBC(Open Database Connectivity)가 응용 프로그램 인터페이스(API) 표준으로 사용된다. Java를 위한 표준으로는 JDBC(Java Databse Connectivity)가 있다.
  • 호스트 프로그램 안에 DML 을 내장하기 위한 호스트 언어 문법의 확장. 보통은 특별히 정한 문자가 DML 호출의 시작을 알리고, DML 선 컴파일러(DML precompiler)라 부르는 처리기가 DML문을 호스트 언어의 프로시저 호출로 바꾸어 준다.