DDL
- 데이터를 정의하는 언어로서 데이터를 담는 그릇을 정의하는 언어
- 대상
- 도메인
- 하나의 속성이 가질 수 있는 원자값들의 집합
- 스키마
- 데이터베이스의 구조, 제약조건 등의 정보를 담고있는 기본적인 구조
- 유형
- 외부 스키마
- 사용자나 개발자의 관점에서 필요로 하는 데이터 베이스의 논리적 구조
- 사용자 뷰를 나타냄
- 개념 스키마
- 데이터 베이스의 전체적인 논리적구조
- 전체적인 뷰를 나타냄
- 개체 간의 관계, 제약조건, 접근권한, 무결성, 보안에 대해 정의
- 내부 스키마
- 물리적 저장장치의 관점에서 보는 데이터 베이스 구조
- 실제로 데이터 베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 순서 등을 표현
- 외부 스키마
- 테이블
- 데이터를 저장하는 항목인 필드들로 구성된 데이터의 집합체
- 데이터 저장공간
- 구성조건
- 테이블에 포함된 행들은 유일해야 하고 중복된 행이 존재하지 않아야 한다.
- 테이블에 포함된 행들 간에는 순서가 존재하지 않는다.
- 테이블을 구성하는 열들 간에는 순서가 존재하지 않는다.
- 용어
-
튜플
- 행- 테이블 내의 행을 의미하여 레코드라고도 함
- 튜플을 릴레이션에서 같은 값을 가질 수 없음
-
애트리뷰트
- 열- 테이블 내의 열을 의미, 열의 개수를 디그리(Degree)라고 함
- 식별자
- 여러 개의 집합체를 담고 있는 관계형 데이터 베이스에서 각각을 구분할 수 있는 논리의 개념
- 카디널리티
- 튜플의 수
- 차수
- 애트리뷰트의 수
- 도메인
- 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합
- 인스턴스
- 들어간 값
-
- 도메인
- 인덱스
- 검색을 빠르게 하기 위한 데이터 구조
- 인뎃스는 데이터를 빠르게 찾을 수 있는 수단으로서 테이블에 대한 조회 속도를 높여주는 자료구조이다.
- 유일해야 하며 중복되지 않음
- 종류
- 순서 인덱스
- 데이터가 정렬된 순서로 생성되는 인덱스
- 해시 인덱스
- 해시함수에 의해 직접 데이터에 키와 값으로 접근하는 인덱스
- 비트맵 인덱스
- 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
- 함수기반 인덱스
- 수식이나 함수를 적용하여 만든 인덱스
- 단일 인덱스
- 하나의 컬럼으로만 구성한 인덱스
- 결합 인덱스
- 두개 이상의 컬럼으로 구성한 인덱스
- 클러스터드 인덱스 기본키(PK)
- 기준으로 레코드를 묶어서 저장하는 인덱스
- 순서 인덱스
- 명령어
- 인덱스 생성
-
- 인덱스 생성
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);
- 인덱스 삭제
- ```sql
DROP INDEX 인덱스명;
- 인덱스 변경
- ```sql
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);
- 인덱스 스캔 방식
- 범위
- 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔
- 전체
- 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식
- 단일
- 수직적 탐색 만으로 데이터를 찾는 스캔 방식
- 생략
- 선두 칼럼이 조건 절에 빠졌어도 인덱스를 활용하는 스캔 방식
- 뷰
- 논리 테이블로서 사용자에게(생성 관점 아닌 사용 관점에서) 테이블과 동일하다
- 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
- 특징
- 논리적인 데이터 독립성 제공, 데이터 조작 연산 간소화
- 보안기능(접근제어) 제공, 뷰 변경 불가
- 목적
- 단순질의어 사용을 위해
- FROM 절에 있는 하나의 뷰를 통해 뷰를 구성하는 복수의 테이블을 대체
- 테이블의 중요 데이터 일부 만을 제공할 수 있는 장단점이 있따.
- 명령어
- 테이블 A 그대로
- ```sql
CREATE VIEW W_A AS
SELECT *
FROM A;
- 테이블 A 아무 컬럼
- ```sql
CREATE VIEW VW_B AS SELECT * FROM A, B WHERE A. 컬럼 1 = B. 컬럼 2;
- 테이블 A와 테이블 B 조인 결과
- ```sql
CREATE VIEW VW_C AS
SELECT *
FROM A, B
WHERE A. 컬럼 1 = B. 컬럼 2;
- 뷰 삭제/변경
- 뷰는 정의 자체를 변경하지 못함
- 삭제와 재생성을 통해 뷰에 대한 정의 변경이 가능
- ```sql
DROP VIEW 뷰이름;
- 뷰를 통해 접근 가능한 데이터에 대한 변경이 가능하다.
- 모든 경우에 데이터의 변경이 가능한 것이 아니라 일부 제약이 존재한다.
- 명령어
- CREATE TABLE
- ```sql
CREATE TABLE 테이블 명;
---
(
속성명 데이터 타입 [NOT NULL], _,
PRIMARY KEY (기본키),
UNIQUE (속성명1, 속성명2, ...),
FOREIGN KEY(외래키) REFERENCES 참조테이블(기본키),
CONSTRAINT 제약조건명 CHECK(조건식)
);
- 속성
- PRIMARY KEY
- 테이블의 기본키를 정의, 유일하게 테이블의 각 행을 식별
- FORIGN KEY
- 외래키를 정의, 참조 대상을 테이블(컬럼명)으로 명시
- 열과 참조된 테이블의 열 사이의 외래키 관계를 적용하고 설정
- UNIQUE
- 테이블 내에서 얻은 유일한 값을 갖도록 하는 속성
- NOT NULL
- 해당 컬럼은 NULL 값을 포함하지 않도록하는 속성
- CHECK
- 개발자가 정의하는 제약조건, 참(TRUE)이어야 하는 조건을 지정
- DEFAULT
- 해당 필드의 기본 값을 설
- ALTER
- 컬럼 추가, 컬럼 수정, 컬럼 삭제, 컬럼명 수정
- 명령어
- ADD: 컬럼 추가
- ```sql
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입;
- MODIFY: 컬럼 수정
- ```sql
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입[DEFAULT 값][NOT NULL];
- DROP: 컬럼 삭제
- ```sql
ALTER TABLE 테이블명 DROP 컬럼명;
- RENAME: 컬럼명 수정
- ```sql
ALTER TABLE 테이블명 RENAME COLUMN 변경전_컬럼명 TO 변경후_컬럼명;
- DROP
- 테이블 삭제
- CASCADE | RESTRICT
- CASCADE는 참조하는 테이블까지 연쇄적으로 제거하는 옵션
- RESTRICT는 다른 테이블이 삭제할 테이블을 참조중이면 제거하지 않는 옵션
- ```sql
DROP TABLE 데이터 명;
- TRUNCATE
- ```sql
TRUNCATE TABLE 명령어;
- 테이블 내의 데이터들을 삭제하는 명령
- VIEW
- ```sql
CREATE VIEW 뷰이름 AS SELECT 사번 FROM 사원 WHERE 성별 = ‘M’;
- ```sql
DROP VIEW 뷰이름;
-