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 뷰이름;
    -