데이터베이스 DB

[데이터베이스/DB] 데이터베이스 언어_DDL, DML, DCL, SQL의 DDL기능

DBMS는 여러가지 데이터베이스 언어를 지원합니다.

기능으로 나누면  DDL, DML, DCL 이렇게 분류할 수 있습니다.

표현방법으로 나누면 절차적언어(Procedural)와 비절차적/선언적(Non-procedural(declaritive)) 언어로 나눌 수 있습니다.

 

 

DDL(data definition language)

데이터베이스 스키마에 대한 조작을 담당하는 영역이에요.

DDL은 스키마생성, 스키마 삭제, 스키마 변경 등을 담당합니다.

 

DDL을 통해 정의된 스키마에 대한 정보는 데이터 사전(data dictionary)에 저장 관리합니다.

 

DML(data manipulation language)

데이터베이스 인스턴스를 조작하는 언어를 DML이라고 하며, 인스턴스의 생성, 조회, 삭제, 변경 등의 기능을 사용자에게 제공합니다. 

사용자는 DML을 이용하여 질의를 생성하여 데이터베이스 시스템에 전달, 처리하기 때문에, DML을 질의어(query language)라고도 부릅니다.

 

DCL(data control language)

데이터베이스 시스템의 스카마와 인스턴스를 제외한 다른 객체를 조작하는 언어를 DCL이라고 합니다.

예를 들어, 트랜잭션  시작, 트랜잭션 종료, 세션 시작, 세션 종료, 회복 및 복구 등이 있어요.

 

 

Procedural vs Declarative ( 절차적 vs 비절차적 언어 )

표현방법으로 나누었을 경우에  절차적 언어와 비절차적 언어로 구분할 수 있어요.

 

절차적 언어는 처리 방법 및 절차를 명시하고,

비절차적 언어는 방법 및 절차에 대한 언급 없이 원하는 데이터만 명시합니다.

 

SQL언어는 비절차적 언어로, 사용자는 원하는 데이터를 선언적으로 표현할 뿐, 어떻게 데이터를 구하는지를 명시하지는 않습니다.

 

비절차적 언어가 절차적 언어보다 진보되었지만 언어처리가 어렵고 복잡해요.

 

 

 

 

순수 관계형 데이터베이스 언어 중 하나가 관계 대수이며

이는 DML부분입니다. 순수 언어로 이론적으로만 개발되고 상용화는 되어있지 않아요.

[데이터베이스 DB] - [데이터베이스/DB] 관계 대수 Relational Algebra_1 기본대수

 

[데이터베이스/DB] 관계 대수 Relational Algebra_1 기본대수

관계 대수 Relational Algebra 관계 대수는 관계에 대한 다수 개의 연산을 제공하고 관계 대수를 통해 데이터베이스로부터 구하고싶은 정보를 표현할 수 있습니다. 관계 대수는 기본적인 6개의 연

hidemasa.tistory.com

[데이터베이스 DB] - [데이터베이스/DB] 관계 대수 Relational Algebra_2(추가) 확장관계대수

 

[데이터베이스/DB] 관계 대수 Relational Algebra_2(추가) 확장관계대수

저번 글에서는 기본적인 관계 대수를 알아보았는데요 [데이터베이스 DB] - [데이터베이스/DB] 관계 대수 Relational Algebra 이번엔 추가적으로 사용되는 관계 대수를 설명해보겠습니다 할당 연산 Assign

hidemasa.tistory.com

상용화 되어있는 언어의 대표적 언어는 SQL입니다.

 

SQL은 structured query language의 약어로 관계형 데이터베이스 모델을 위한 데이터베이스 언어에요.

SQL언어는 관계형 데이터베이스 시스템의 실질적인 또한 공식적인 데이터베이스 언어 표준입니다.

( the de facto and de jure standard in the relational database world)

 

 

 

DDL SQL

SQL의 DDL 부분을 담당하는 기능은 이렇습니다

-relation의 각 schema

-각 attribute의 domain

-integrity constraints 무결성 제약

-관계에 연관되는 인덱스

-관계에 연관되는 보안 및 권한 부여

-관계 저장 위한 디스크 상 물리적 구조

 

 

 

SQL 명칭은 대소문자 구분이 없습니다.

Name, NAME, name, nAme 모두 같습니다.

인용부호 내에서만 대소문자를 구분합니다.

SQL 문장에서 ; 세미콜론은 문장의 끝을 나타내는 기호입니다. 

 

테이블 생성

Create table professor (

  pID           char(5),

  name        varchar(20) not null,

  deptName  varchar(20),

  salary         numeric(8,2));                                    //DDL(creat 명령어)

Insert into professor values( '10', 'Lee', 'CS', 7500);

Insert into professor values( '11', 'Choi', 'CS', 7000);      //DML(insert 명령어)

 

professor 테이블은 4개의 속성을 가지고 있고, name은 널값허용 안하는 not null 무결성 제약을 가지고 있어요.

Insert 두 번을 통해서 두 개의 터플이 professor 테이블에 추가됩니다.

데이터 타입이 문자형이면 값들에 인용부호가 붙어있어요.

 

 

무결성 제약

무결성 제약의 대표적 3 가지는

널 값을 허용 안하는 not null, 테이블의 주 키를 선언하는 primary key, 외래 키를 선언하는 foreign key

 

foreign key는 참조하는 속성을 명시적으로 언급하지 않아도 되며, 이는 외래 키는 참조되는 테이블의 주 키만을 참조하기 때문입니다.

ex) foreign key(deptName) references department;

 

 

스키마 삭제 및 변경

스키마 삭제는 DROP문장으로 하고

스키마 변경은 ALTER문장을 사용해요. (속성 추가나 제거)

 

DROP과 DELETE의 차이는 

DROP문장은 스키마(관계터플까지)를 삭제하는 DDL기능을 하고,

DELETE문장은 관계의 내용물(터플)을 삭제하는 DML 문장입니다.

 

SQL의 DDL부분은 그래서 기본적 키워드가 CREATE/ALTER/DROP입니다.