kbsoo

Database Languages

데이터베이스 시스템은 데이터베이스 스키마(database schema)를 지정하기 위한 **Data-Definition Language(DDL)**와 데이터베이스 쿼리(query) 및 업데이트를 표현하기 위한 **Data-Manipulation Language(DML)**를 제공합니다.

Data-Definition Language

데이터베이스 스키마(database schema)는 데이터 정의 언어(DDL, Data-Definition Language)라는 특수 언어로 표현된 정의 집합으로 지정됩니다. DDL은 데이터의 추가적인 속성을 지정하는 데에도 사용됩니다.

데이터베이스 시스템에서 사용되는 저장 구조와 접근 방법은 **데이터 저장 및 정의 언어(data storage and definition language)**라는 특수한 DDL 유형의 문장 집합으로 지정됩니다. 이러한 문장은 데이터베이스 스키마의 구현 세부 사항을 정의하며, 이는 일반적으로 사용자에게 숨겨져 있습니다.

데이터베이스에 저장된 데이터 값은 특정 일관성 제약 조건(consistency constraints)을 만족해야 합니다. 예를 들어, 대학에서 학과의 계좌 잔액이 절대 음수가 되지 않도록 요구한다고 가정해보겠습니다. DDL은 이러한 제약 조건을 지정할 수 있는 기능을 제공합니다. 데이터베이스 시스템은 데이터베이스가 업데이트될 때마다 이러한 제약 조건을 확인합니다. 일반적으로 제약 조건은 데이터베이스와 관련된 임의의 조건(predicate)이 될 수 있습니다. 그러나 임의의 조건을 테스트하는 것은 비용이 많이 들 수 있습니다. 따라서 데이터베이스 시스템은 최소한의 오버헤드로 테스트할 수 있는 무결성 제약 조건(integrity constraints)만 구현합니다:

DDL 문장의 처리는 다른 프로그래밍 언어의 처리와 마찬가지로 일부 출력을 생성합니다. DDL의 출력은 **데이터 사전(data dictionary)**에 저장되며, 이는 메타데이터(metadata), 즉 데이터에 대한 데이터를 포함합니다. 데이터 사전은 데이터베이스 시스템 자체에서만 접근하고 업데이트할 수 있는 특수한 유형의 테이블로 간주되며, 일반 사용자는 접근할 수 없습니다. 데이터베이스 시스템은 실제 데이터를 읽거나 수정하기 전에 데이터 사전을 참조합니다.

The SQL Data-Definition Language

SQL은 데이터 타입(data types)과 무결성 제약 조건(integrity constraints)을 포함한 테이블을 정의할 수 있는 풍부한 DDL을 제공합니다. 예를 들어, 다음 SQL DDL 문장은 department 테이블을 정의합니다:

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

위의 DDL 문장을 실행하면 dept_name, building, budget이라는 세 개의 열(column)을 가진 department 테이블이 생성됩니다. 각 열은 특정 데이터 타입과 연관되어 있습니다.

SQL DDL은 또한 다양한 유형의 무결성 제약 조건을 지원합니다. 예를 들어, dept_name 속성 값이 기본 키(primary key)라고 지정할 수 있으며, 이는 두 개의 학과가 동일한 학과 이름을 가질 수 없도록 보장합니다. 또 다른 예로, 강사 레코드에 나타나는 dept_name 속성 값은 department 테이블의 일부 레코드의 dept_name 속성에도 나타나야 한다고 지정할 수 있습니다.

Data-Manipulation Language

**데이터 조작 언어(DML, Data-Manipulation Language)**는 사용자가 적절한 데이터 모델에 따라 데이터를 접근하거나 조작할 수 있게 하는 언어입니다. 접근 유형은 다음과 같습니다:

데이터 조작 언어에는 기본적으로 두 가지 유형이 있습니다:

선언적 DML은 일반적으로 절차적 DML보다 배우고 사용하기 쉽습니다. 그러나 사용자가 데이터를 가져오는 방법을 지정하지 않기 때문에, 데이터베이스 시스템이 효율적인 데이터 접근 방법을 스스로 찾아야 합니다.

**쿼리(query)**는 정보를 검색하도록 요청하는 문장입니다. DML에서 정보 검색과 관련된 부분을 **쿼리 언어(query language)**라고 합니다. 기술적으로 정확하지 않지만, 쿼리 언어와 데이터 조작 언어라는 용어를 동의어로 사용하는 것이 일반적입니다.

1.1

The SQL Data-Manipulation Language

SQL 쿼리 언어(query language)는 비절차적(nonprocedural)입니다. 쿼리는 여러 테이블(때로는 하나만)을 입력으로 받아 항상 단일 테이블을 반환합니다. 다음은 History 학과의 모든 강사 이름을 찾는 SQL 쿼리의 예입니다:

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

이 쿼리는 instructor 테이블에서 dept_name이 History인 행을 검색하고, 해당 행의 name 속성(attribute)을 표시하도록 지정합니다. 이 쿼리를 실행한 결과는 name이라는 단일 열(column)이 있는 테이블로, 각 행(row)은 dept_name이 History인 강사의 이름을 포함합니다. 만약 이 쿼리가 Figure 1.1의 테이블에서 실행된다면, 결과는 두 개의 행으로 구성되며, 하나는 이름이 El Said이고 다른 하나는 이름이 Califieri입니다.

쿼리는 여러 테이블의 정보를 포함할 수도 있습니다. 예를 들어, 다음 쿼리는 예산(budget)이 95,000달러를 초과하는 학과에 속한 모든 강사의 ID와 학과 이름을 찾습니다:

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

만약 위의 쿼리가 Figure 1.1의 테이블에서 실행된다면, 시스템은 예산이 95,000달러를 초과하는 두 개의 학과 — Computer Science와 Finance — 를 찾을 것이며, 이 학과들에는 총 다섯 명의 강사가 있습니다. 따라서 결과는 두 개의 열(ID, dept_name)과 다섯 개의 행으로 구성된 테이블이 됩니다: (12121, Finance), (45565, Computer Science), (10101, Computer Science), (83821, Computer Science), (76543, Finance).

Database Access from Application Programs

SQL과 같은 비절차적 쿼리 언어(non-procedural query languages)는 범용 튜링 머신(universal Turing machine)만큼 강력하지 않습니다. 즉, 범용 프로그래밍 언어(general-purpose programming language)를 사용하면 가능한 일부 계산(computations)이 SQL로는 불가능합니다. 또한 SQL은 사용자 입력(input), 디스플레이 출력(output), 또는 네트워크를 통한 통신과 같은 동작을 지원하지 않습니다. 이러한 계산과 동작은 C/C++, Java, Python과 같은 호스트 언어(host language)에 데이터베이스의 데이터에 접근하는 SQL 쿼리를 포함하여 작성해야 합니다.

**응용 프로그램(application programs)**은 이런 방식으로 데이터베이스와 상호작용하는 데 사용되는 프로그램입니다. 대학 시스템에서의 예로는 학생들이 수업을 등록하게 하는 프로그램, 수업 명단(class rosters)을 생성하는 프로그램, 학생 GPA를 계산하는 프로그램, 급여 수표를 생성하는 프로그램, 기타 작업을 수행하는 프로그램 등이 있습니다.

데이터베이스에 접근하기 위해, DML 문장은 호스트에서 데이터베이스로 전송되어 실행되어야 합니다. 이는 일반적으로 DML과 DDL 문장을 데이터베이스로 보내고 결과를 검색할 수 있는 응용 프로그램 인터페이스(application-program interface, 일련의 프로시저 집합)를 사용하여 수행됩니다. Open Database Connectivity (ODBC) 표준은 C 및 기타 여러 언어와 함께 사용하기 위한 응용 프로그램 인터페이스를 정의합니다. Java Database Connectivity (JDBC) 표준은 Java 언어에 대응하는 인터페이스를 정의합니다.


출처: Database System Concept - 1.4 Database Languages