검수요청.png검수요청.png

데이터 정의어

위키원
qkfkrpf98 (토론 | 기여)님의 2021년 8월 12일 (목) 14:38 판
이동: 둘러보기, 검색

데이터 정의어(DDL, Data Definition Language)는 새로운 데이터베이스를 구축하기 위해 스키마(schema)를 정의하거나, 기존 스키마의 정의를 삭제 또는 수정하기 위해 사용하는 데이터 언어(data language)로, 새로 만들려는 데이터베이스의 전체적인 구조를 설명하거나, 데이터의 종류와 관계, 이미 정의된 스키마의 구조나 제약조건 등을 변경 또는 삭제하고 싶어 이를 데이터베이스 관리 시스템(database management system, DBMS)에 알릴 때 사용한다. 데이터 정의어로 정의된 스키마는 데이터 사전(Data Dictionary)이라는 특별한 파일에 여러 개의 테이블로서 저장이 된다. 저장되고, 삭제나 수정이 발생하면 이 내용도 데이터 사전에 반영된다. 데이터 사전에 저장된 스키마 정보는 사용자나 데이터베이스 관리 시스템이 필요할 때 참고할 수 있다.[1]

개요

데이터베이스 언어인 DDL, DCL, DML 중 DML 즉, 데이터 정의어는 데이터베이스 내의 객체 생성, 삭제, 변경을 명령을 의미하며 주로 관리자가 사용하는 명령이다. 데이터 정의어는 데이터 조작어와 달리 명령어를 수행하자마자 데이터베이스에 수행한 내용이 바로 반영되는 특성(COMMIT)이 있다. ROLLBACK을 통한 실행취소가 불가능 하기때문에 사용할 때 주의해야 한다. 명령어 중 CREATE, DROP, ALTER, TRUNCATE 등이 있으며 CREATE는 새로운 데이터 베이스 관계, (view), 인덱스(index), 저장 프로시저(stored procedure) 만들기 등을 수행할 수 있다. DROP명령어는 이미 존재하는 데이터 베이스 관계, 뷰, 인덱스, 저장 프로시저를 제거할 수 있고, ALTER는 이미 존재하는 데이터베이스 개체에 대한 변경, 이름 변경의 역할 을 한다. TRUNCATE는 관계에서 데이터를 제거하며 다시 복구할 수 없다.[2][3]

생성

CREATE 문은 관계형 데이터베이스 관리시스템의 관리 하에 객체를 생성하는 데이터 정의 언어(DDL) 명령이다. 사용하는 데이터베이스 관리시스템의 구현을 통해 CREATE 문장으로 만들 수있는 개체의 유형은 다르다. 그러나 대부분의 RDBMS의 구현은 표(테이블), 정의 영역(도메인), 색인(인덱스), 이용자(사용자), 별명(별칭), 저장프로시저 및 데이터베이스 작성을 지원하고 있다.[4]

테이블 생성

테이블을 생성하기 위해 테이블 이름, 속성이름, 속성의 데이터 타입을 지정할 때 CREATE TABLE 명령을 사용한다. 테이블을 생성할 때 여러 속성을 지정할 수 있기 때문에 필요한 만큼 기술할 수 있으며, 필드의 NULL 값의 허가여부, 기본키(primary key)와 그를 참조하는 외래키(Foreign key)의 지정, 속성의 제약조건을 기술할 수 있다. [5]

  • 일반적 테이블 생성문
CREATE TABLE 테이블명 
(속성명 데이터_타입 [제약 조건],
 속성명 데이터_타입 [제약 조건],
 PRIMARY KEY (속성명)
 FOREIGN KEY (속성명) REFERENCES 참조할 테이블명(속성명)
    [ON UPDATE [NO ACTION┃CASCADE┃SET NULL┃SET DEFAULT]]  
    [ON DELETE [NO ACTION┃CASCADE┃SET NULL┃SET DEFAULT]]
 CONSTRAINT 제약조건명 CHECK(제약조건));

속성에 들어갈 데이터의 타입을 설정해 줄 수 있다. 각 데이터베이스 관리시스템별로 지원하는 데이터 타입이 있고 지원하지 않는 데이터 타입이 있으니 사용하는 데이터 타입이 지원되는 지 확인하고 사용해야한다.[6]

데이터 타입[6]
데이터 타입 의미
CHAR 특정 문자열 개수를 지정할 때 사용
(보통 글자수가 정해져있을 때, 주민등록번호, 전화번호 등)
VARCHAR 가변길이의 문자열을 저장할 때 최대 길이를 지정
(글자수가 정해져 있지 않을 때, 이름, 주소 등)
VARCHAR2 가변길이의 문자열을 저장할 때 최대 길이를 지정, 속성 데이터 길이의 편차가 심할 경우 사용
(MySQL, MariaDB 지원안함)
NUMBER 숫자에 사용되는 테이터 타입으로 소수점 저장이 가능
(MySQL, MariaDB는 INT로 사용)
LONG VARCHAR2와 유사하며 긴 가변길이의 문자를 저장할 때 사용
DATE 날짜에 사용되는 데이터 타입

데이터의 무결성 유지를 위하여 속성의 제약조건을 부여한다. 속성을 기본키와 외래키로 지정해 주거나 속성에 조건을 설정할 수 있다.

제약 조건[6]
제약조건 의미
NOT NULL 값이 꼭 입력되어야 할 때 사용, NULL을 허용하지 않음
UNIQUE 해당 속성에 중복 값을 허용하고 싶지 않을 때 사용
PRIMARY KEY 기본키를 지정할 때 사용하는 조건으로 테이블 당 한 개의 기본키만 생성 가능
FOREIGN KEY 외래키를 지정할 때 사용. REFERRENCES와 같이 사용하여 참조할 테이블의 속성을 지정해야 함
CHECK 속성에 입력되는 데이터를 특정 조건에 맞는 데이터만 입력받고 싶을 때 사용
DEFAULT 값이 입력되지 않았을 때 디폴트에 지정된 값(기본 값)으로 입력
INDEX 인덱스를 지정할 때 사용

간단히 예를 들어 적용해보면, '이름','학번', 전공', '성별', '생년월일'로 구성된 학생 테이블을 정의하는 SQL문을 작성한다고 가정한다. 각 속성마다 제약조건과 입력되는 데이터 타입을 확인해주어야 한다. 다음과 같이 속성에 제약조건이 있다고 가정한다.[7]

  • '이름'속성은 값은 무조건 존재해야하며 '학번'속성은 기본키로 지정된다.
  • '전공'속성은 다른 '학과'테이블의 '학과 코드'라는 속성을 참고하게 되는 외래키로 지정되며 학과 테이블에 삭제가 일어나면 관련 튜플은 NULL값이 되며, 변경이 일어나면 '전공'의 속성도 같이 변경되게 해야 한다.
  • '생년월일' 속성은 1980-01-01 이후에 데이터만 입력될 수 있으며, 제약 조건의 이름은 '생년월일 제약'으로 정의한다.
  • '성별'속성은 도메인'GANDER'를 사용한다.
CREATE TABLE 학생
  (이름 VARCHAR(15) NOT NULL,
   학번 CHAR(8),
   전공 CHAR(5),
   성별 GANDER,
   생년월일 DATE,
   PRIMARY KEY(학번),
   FOREIGN KEY(전공) REFRRENCES 학과(학과코드)
        ON DELETE SET NULL,
        ON UPDATE CASCADE,
   CONSTRAINT 생년월일제약 CHECK(생년월일>='1980-01-01'));

처음 테이블명에 있어서 생성 규칙이 존재한다. 테이블명은 문자로 시작해야한다. 즉, 숫자가아닌 한글,영어로 시작해야 한다. 테이블명의 길이는 30byte이하여야 되며 특수문자의 사용이 가능하다. 테이블명의 중복은 허용되지 않는다. 이 점들을 잘 기억하여 테이블명을 작성해야한다. 이 후 각 속성을 정의하면 되는데 각 속성명과 데이터 타입을 지정해주게 된다. 이름은 사람마다 글자수가 다르기 때문에 최대 15자리로 제한한 VARCHAR(15)을 사용하는 것을 볼 수 있다. 데이터 타입 지정 후 속성의 조건을 설정하게 되는데 '이름'속성의 값은 무조건 존재해야 하기 때문에 NULL 값이 될 수 없음을 의미한다. 데이터 타입 뒤에 NOT NULL을 사용하게 되면서 설정된다. '성별'속성은 지정된 'GANDER'도메인(Domain)을 사용하기에 속성명 뒤에 기입하면 된다. 속성의 기본적 정의 후에 기본키, 외래키를 지정해 준다. '학번'속성이 기본키로 지정되었기에 PRIMART KEY(학번)을 기입하면 된다. 외래키는 '전공' 속성이며 '학과'테이블에 있는 '학과코드' 속성을 참조(reference)하기에 FOREIGN KEY(전공) REFRRENCES 학과(학과코드)를 기입해준다. 외래키의 참조 조건은 다음과 같다.

외래키 옵션[8]
조건 옵션 의미
삭제 시(ON DELETE) CASCADE 참조하는 테이블의 속성 데이터 삭제 시 따라 삭제됨
SET NULL 참조하는 테이블 속성 데이터 삭제 시 NULL 값으로 변경
SET DEFAULT 참조하는 테이블 속성 데이터 삭제 시 기본값으로 변경
NO ACTION RESTRICT과 동일, 옵션을 지정하지 않았을 경우 자동 선택됨
RESTRICT 참조하는 테이블이 있을 경우, 데이터 삭제 불가
변경 시(ON UPDATE) CASCADE 참조하는 테이블의 속성 데이터 변경 시 따라 변경됨
SET NULL 참조하는 테이블 속성 데이터 변경 시 NULL값으로 변경
SET DEFAULT 참조하는 테이블 속성 데이터 변경 시 기본값으로 변경
NO ACTION RESTRICT과 동일, 옵션을 지정하지 않았을 경우 자동 선택됨
RESTRICT 참조하는 테이블이 있을 경우, 데이터 변경 불가

CONSTRAINT문(제약조건문)으로 속성에 조건을 설정할 수 있다. '생년월일'속성의 값 범위를 지정하기 위해 '생년월일 제약'인 제약조건을 만들어 CHECK(생년월일>='1980-01-01')을 사용하여 1980년 1월 1일부터의 값을 넣을 수 있게 된다. CONSTRAINT문을 이용하여 외래키를 지정하는 방법도 있다.[9]

  • FOREIGN절에 CONSTRAINT절 사용
CREATE TABLE 학생
  (이름 VARCHAR(15) NOT NULL,
   학번 CHAR(8) PRIMARY KEY,
   전공 CHAR(5),
   성별 GANDER,
   생년월일 DATE,
   CONSTRAINT 생년월일제약 CHECK(생년월일>='1980-01-01'),
   CONSTRAINT 제약조건명 FOREIGN(전공) REFERENCES 학과(학과코드));

스키마 생성

스키마(schema)를 만들려면 CREATE SCHEMA명령을 사용한다.

  • 일반적 스키마 생성문
CREATE SCHEMA 스키마명;

스키마명을 지정하여 현재 연결된 데이터베이스에 새 스키마를 만든다. 스키마 이름은 임의의 이름을 지정할 수 있지만, 'pg_'로 시작하는 이름은 특별한 의미를 가지므로 사용할 수 없다. 스키마를 생성하려면 명령을 실행하는 역할이 슈퍼 유저이거나 스키마를 만들 데이터베이스에서 CREATE 권한을 가지고 있어야한다. 스키마의 소유자를 지정하여 스키마를 만들 수 있는데 형식은 다음과 같다.이 경우 소유자는 생성자의 직,간접적 구성원이거나 슈퍼 유저이여야 한다.[10]

  • 스키마 소유자 지정
CREATE SCHEMA 스키마명 AUTHORIZATION 소유자_ID;
CREATE SCHEMA 대학교 AUTHORIZATION 박교수;

뷰 생성

(view)는 쿼리의 결과를 가상 테이블로 만드는 것으로 SELECT문을 사용하여 지정한 테이블의 속성을 뷰로 나타낼 수 있다. 사용자가 필요한 정보만 요구에 맞게 가공할 수 있기 때문에 편리성이 증가하며, 가상의 테이블을 만듬으로써 실제 테이블의 변경, 수정이 일어나지 않아 보안성이 증가된다는 장점이 있다.[11]

  • 일반적 뷰 생성문
CREATE VIEW 뷰명(속성, 속성...)
AS SELECT 속성, 속성
FROM 테이블명
WHERE 조건
  • 뷰 생성문 예시
CREATE VIEW 인터넷 고객(성명, 전화번호)
AS SELECT 성명, 전화번호
FROM 고객
WHERE 사용 서비스 = '인터넷'

예시를 보면 인터넷 서비스를 사용하는 고객의 성명과 전화번호가 담긴 뷰를 생성하는 것이다. 데이터 조작어(Data Manipulation Language, DML)인 SELECT문을 사용하여 '고객'테이블의 사용 서비스가 '인터넷'인 고객의 '성명'과'전화번호'속성의 데이터를 뷰로 나타낼 수 있다.

인덱스 생성

도메인 생성

트리거 생성

변경

삭제

각주

  1. 데이터 정의어〉, 《네이버지식백과》
  2. 미니송, 〈데이터베이스 언어(DDL, DML, DCL) - DO의 IT〉, 《티스토리》, 2017-12-05
  3. pridiot, 〈(Oracle) 데이터 정의어 (DDL : Data Definition Language) - pridiot〉, 《티스토리》, 2019-09-29
  4. CREATE (SQL)〉, 《위키백과》
  5. SQL 데이터 정의 언어(DDL) – 1〉, 《helloblog.net》
  6. 6.0 6.1 6.2 IT 양햄찌(jhnyang), 〈(ORACLE, MYSQL, SQL) CREATE TABLE 테이블 생성하고 주키(기본키)지정하기, 테이블생성법, 제약조건 설정(NOT NULL)〉, 《티스토리》, 2020-07-19
  7. 1D1C, 〈2020 정보처리기사 필기 - 3.3 SQL 응용(1) 〉, 《티스토리》, 2020-03-02
  8. ehdtnn , 〈외래키, 외래키 옵션〉, 《티스토리》, 2021-08-12
  9. PRO HYEON, 〈[1]〉, 《깃허브》, 2018-06-28
  10. 스키마 생성(CREATE SCHEMA)〉, 《데브쿠마》, 2020-10-31
  11. solacci, 〈DataBase[뷰 개념, 생성, 삭제, 수정[뷰 권한 오류]]〉, 《티스토리》, 2018-11-12

참고자료

같이 보기


  검수요청.png검수요청.png 이 데이터 정의어 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.