본문 바로가기

Programming/DataBase System

Chapter1 - 데이터베이스 언어

데이터베이스 언어


데이터베이스 시스템은 데이터베이스 스키마를 기술하는 데이터 정의 언어(Data Definition Language : DDL) 와 데이터베이스 질의 및 갱싱을 표현하는 데이터 조작 언어(Data Manipulation Language : DML) 를 제공한다. 실제로, 데이터 정의 언어와 데이터 조작 언어의 경계는 명확히 구분되어 있지 않다. 오늘날 널리 쓰리고 있는 질의어SQL에서 이들 두 언어는 단일 데이터베이스 언어의 한 부분을 이룬다.




  • 데이터 조작 언어

데이터 조작 언어(Data Manipulation Language : DML) 는 사용자가 적절한 데이터 모델로 구성된 데이터를 접근하거나 조작할 수 있도록 하는 언어이다. 접근의 형태는 다음과 같다.



  • 데이터베이스 내에 저장된 정보를 검색 - Select(Read)
  • 데이터베이스에 새로운 정보를 삽입 - Insert
  • 데이터베이스로부터 정보를 삭제 - Delete
  • 데이터베이스 내에 저장된 데이터를 수정 - Update

기본적으로 두 가지 형태의 DML이 있다.


  • 절차식(procedural) DML 어떤 데이터가 필요하며 그 데이터를 어떻게(How) 구할지 지정할 것을 요구한다.(C, C++)
  • 선언적(declartive) DML (비절차식 DML(nonprocedural DML)) 필요한 데이터를 어떻게 구할지 명시할 필요 없이, 어떠한 데이터(what)가 필요한지 지정할 것만을 사용자에게 요구한다.
    
    선언적 DML은 보통 절차식 DML보다 배우기 쉽고 사용하기도 쉽다. 그러나 사용자가 데이터를 어떻게 구할지를 구체적으로 명시하지 않기 때문에, 데이터베이스 시스템이 ㅅ스로 데이터에 효율적으로 액세스하는 방법을 찾아야 한다.
    질의(query) 정보의 검색을 요청하는 문장이다. 데이터 조작 언어에서 정보의 검색을 담당하는 부분을 질의어(query language)라고 한다. 기술적으로 온당하지는 않지만, 질의어(query language) 데이터 조작 언어(Data Manipulation language)를 같은 의미로 사용하는 것이 보통이다.
    
    상업적인 용도 또는 연구를 위한 용도로 현재 소개되어 있는 데이터베이스 질의어는 매우 많다. 이중 가장 널리 쓰이고 있는 질의어인 SQL이다. 추상화 단계는 데이터를 정의하고 구조화하는 데 적용되기도 하지만, 데이터를 조작하는 데에도 사용된다. 물리적 단계에서 볼 때, 효율적으로 데이터에 접근하는 알고리즘을 정의하는 것이 매우 중요하다. 상위 단계에서는 사용의 편의성을 염두에 두어야 한다. 이로써 인간과 시스템이 효율적으로 상호 작용하게 하자는 것이다. 데이터베이스 시스템의 질의 처리기는 DML 질의를 물리적 단계의 하위 명령으로 변환해 준다.




  • 데이터 정의 언어

데이터베이스 스키마는 데이터 정의 언어(Data Definition Language : DDL) 라는 특수한 언어로써 표현된 정의들의 집합으로 구체화된다. 또한 DDL은 데이터의 추가적인 특성을 표현하는 데에도 사용된다. 
    데이터베이스 시스템에 의해 사용되는 저장 구조(storage structure) 와 액세스 방법은 데이터 저장 및 정의 언어(data storage and definition language) 라고 하는 특별한 형태의 DDL 문의 집합으로 지정된다. 이 DDL 문들은 보통 사용자에게는 보이지 않는 데이터베이스 스키마 구현상의 세부 사항을 정의한다. 
    데이터베이스에 저장된 데이터들은 해당 데이터베이스가 요구하는 일관성 제약조건을 만족해야만 한다. 예를 들어, 대학교에서 학과의 계좌 잔고가 음수가 되는 것을 원하지 않는다고 하자. DDL 로 이러한 제약조건을 기술할 수 있따. 데이터베이스 시스템은 데이터베이스와 관계된 임의의 술어(predicate)라 할 수 있다. 하지만 이런 술어를 검증하는 데에는 처리 비용이 많이 든다. 그래서 데이터베이스 시스템은 최소한의 비용으로 검증될 수 있는 무결성 제약조건을 이행한다.




  • 도메인 제약조건(Domain Constraints) : 가능한 값들의 도메인은 모든 속성들(예를 들면, 정수형, 문자형, 날짜/시간형)과 연관되어 있어야 한다. 속성을 선언하는데 있어서 각가의 도메인들은 값에 대한 제약조건으로서 작용한다. 도메인 제약조건은 가장 기본적인 형태의 무결성 제약조건이다. 이는 새로운 데이터 항목이 데이터베이스에 입력될 때 시스템에 의해 쉽게 검증될 수 있다.
  • 참조 무결성(Referential Integrity) : 주어진 속성들의 집합에 대한 릴레이션(Relation)의 한 값이 다른 릴레이션(Relation)에 대한 속성 집합의 값으로 반드시 나타나야 할 경우가 있다(참조 무결성). 예를 들어, 각 수업에 열거된 학과가 실제로 존재해야 한다고 하자. 좀 더 정확하게, course 레코드의 dept_name 값은 department 릴레이션(Relation)의 일부 레코드의 dept_name 속성에 나타나야만 한다. 데이터베이스의 수정은 참조 무결성을 위한발 수 있다. 참조 무결성이 위반되었을 때의 기본적인 절차는 위반을 유발시킨 동작을 거부하는 것이다.
  • 주장(Assertions) : 주장은 데이터베이스가 항상 만족시켜주어야 하는 조건이다. 도메인 제약조건과 참조 무결성 제약조건은 주장의 특수한 형태이다. 하지만 이 특수한 형태만으로는 표현할 수 없는 많은 제약조건이 존재한다. 예를 들면 "모든 학과는 매 학기에 최소 다섯개의 수업을 개설해야만 한다" 는 주장으로 표현되어야 한다. 주장이 생성되었을 때 시스템은 그것이 타당한지 검증을 한다. 만약 주장이 타당하다면 데이터베이스에 대한 수정은 주장을 위반하지 않는 경우에만 허용이 된다.
  • 권한(Authorization) : 데이터베이스의 다양한 데이터들에 대해서 사용자들마다 접근을 다르게 하고 싶을 때 이러한 차별을 일반적으로 권한(Authorization) 이라 표현한다. 읽기 권한(Read Authorization)읽기 데이터를 허용하지만 데이터의 수정은 허용하지 않으며, 삽입 권한(Insert Authorization)새로운 데이터의 삽입을 허용하지만 존재하는 데이터의 수정은 허용하지 않는다. 갱신 권한(Update Authorization)수정은 허용하지만 데이터의 삭제는 허용하지 않으며, 삭제 권한(delete autorization)데이터의 삭제를 허용한다. 이러한 여러 유형의 권한을 사용자에게 전부 허가하거나 혹은 전혀 할당하지 않거나 조합해서 일부만 할당할 수도 있다.

    DDL은 다른 프로그래밍 언어와 마찬가지로 명령문(statements)을 입력으로 받아 결과를 생성한다. DDL결과메타데이터(metadata)-즉 데이터를 위한 데이터 - 를 수록하는 데이터 사전(data dictionary)에  위치한다. 데이터 사전은 특별한 형태의 테이블로서 오직 데이터베이스 시스템(일반 사용자가 아닌)에 의해서만 접근되고 갱신될 수 있다. 데이터ㅔ이스 시스템이 실제 데이터를 읽거나 갱신할 때에는 데이터 사전을 참조하여 작업을 수행한다.