2. DDL
1) DDL: Data Definition Language 데이터 정의어
2) DDL 대상
1] 스키마(Schema): DB 구조, 제약조건 등 정보를 담고 있는 기본적 구조
외부스키마(External Schema):
- 사용자나 개발자의 관점에서 필요로 하는 DB의 논리적 구조
- 사용자 뷰를 나타냄
- 서브 스키마
개념 스키마(Conceptual Schema):
- DB의 전체적인 논리적 구조
- 전체적인 뷰를 나타냄
- 개체 간 관계, 제약조건, 접근 권한, 무결성, 보안에 대한 정의
내부 스키마(Internal Schema):
- 물리적 저장 장치의 관점에서 보는 DB 구조
- 실제로 DB에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등 표현
2] 테이블: Data 저장하는 항목(필드 Field)들로 구성된 Data 집합
Tuple / Row : 행, Record. 튜플은 테이블에서 같은 값을 가질 수 없다.
Attribute / Column : 열
Cardinality : Tuple의 개수
Degree : 차수. 속성(열)의 개수.
Domain : 하나의 속성이 취할 수 있는 같은 타입의 원자값 들의 집합
3] 뷰(View): 논리 테이블. 사용자의 관점에서 테이블과 동일
장점
1. 논리적 독립성 제공: DB 영향 주지 않고 App 원하는 형태로 Data 접근 가능
2. 데이터 조작 연산 간소화: App이 원하는 형태의 논리적 구조 형성. 단순 질의어 사용 가능
3. 보안 기능(접근제어) 제공: 중요 보안 데이터 저장 중인 테이블, 컬럼 접근 불허
단점
1. 뷰 자체 인덱스 불가: 논리적 구성인 뷰 자체는 인덱스 가지지 못함
2. 뷰 변경 불가: 뷰 정의 변경 시 뷰 삭제 후 재생성. ALTER 사용 불가
3. 데이터 변경 제약 존재: 뷰의 내용에 대한 삽입, 삭제, 변경 제약
4] 인덱스(Index): 검색 연산 최적화 위한 주소 정보로 구성된 데이터 구조
특징
- PK 컬럼은 자동으로 인덱스 생성
- 연월일이나 이름을 기준으로 하는 인덱스는 자동으로 생성되지 않음
- 테이블의 컬럼에 인덱스 없을 경우 전체 내용 검색(Table Full Scan)
- Index Range Scan 빠름
- 조건절에 '='로 비교되는 컬럼을 대상으로 인덱스를 생성 시 검색 속도를 높일 수 있음
3) DDL 명령어
CREATE: 생성
ALTER: 변경
DROP: DB 오브젝트 삭제텍스트
TRUNCATE: DB 오브젝트 내용 삭제
CREATE TABLE
CREATE TABLE 사원(
사번 VARCHAR(10) NOT NULL,
부서번호 VARCHAR(20),
생년월일 DATE NOT NULL,
성별 CHAR(1),
PRIMARY KEY(사번),
FOREIGN KEY(부서번호) REFERENCES 부서(부서코드).
CONSTRAINT 성별제약 CHECK 성별 IN('M', 'F')
)
ALTER TABLE
ALTER TABLE 사원 ADD 전화번호 VARCHAR(11) UNIQUE; //추가
ALTER TABLE 사원 ALTER 이름 VARCHAR(30) NOT NULL; //수정
ALTER TABLE 사원 DROP COLUMN 생년월일; //삭제
DROP TABLE
DROP TABLE 사원 {RESTRICT | CASCADE}; //테이블 삭제{삭제할 테이블이 참조 중이면 제거 하지 않는다 | 참조하는 테이블까지 연쇄적으로 제거한다}
TRUNCATE TABLE
TRUNCATE TABLE 사원; //사원 테이블 내 모든 데이터 삭제
5) VIEW 관련 DDL
CREATE VIEW 사원뷰 AS
SELECT 사번, 이름(select문에 UNION, ORDER BY 사용 가능)
FROM 사원,
WHERE 성별='M';
CREATE OR REPLACE VIEW 뷰이름 AS 조회쿼리;
DROP VIEW 뷰이름;
6) INDEX 관련 DDL
CREATE [UNIQUE] INDEX 사번인덱스 ON 사원(사번);
ALTER [UNIQUE] INDEX 사번인덱스 ON 사원(사번);
DROP INDEX 사번인덱스;