- 프로그래밍 언어의 데이터형(스키마)과 값(인스턴스)의 개념과 비슷함
1. 데이터 정의 언어 (DDL) : 스키마(Schema)
– 데이터베이스의 전체적인 구조
- 예: 데이터베이스는 고객 및 계좌 집합에 대한 정보와 그들 사이의 관계로 구성됨
- 프로그램의 변수 선언(형 정의)와 유사
- 물리적 스키마(Physical schema) : 물리적 단계에서 데이터베이스 설계 기술
- 논리적 스키마(Logical schema) : 논리적 단계에서 데이터베이스 설계 기술
- 서브 스키마(Subschema) : 뷰 단계의 스키마
- 데이터베이스 스키마 구현상의 세부 사항을 정의
- 릴레이션의 집합과 각 릴레이션에 대한 정보 명시
- 각 릴레이션의 스키마
- 각 속성들과 관련된 값들의 타입
- 무결성 제약조건
- 각 릴레이션에서 유지하여야 할 인덱스들의 집합
- 각 릴레이션의 보안과 권한 정보
- 각 릴레이션의 디스크에서의 물리적인 저장 구조
# create 명령어
create table instructor (
ID char(5),
name varchar(20),
dept_name varchar(20),
salary numeric(8,2) )
- DDL 컴파일러는 데이터 사전에 저장된 테이블 템플릿 집합을 생성함
- 데이터 사전은 메타데이터(데이터를 위한 데이터)를 포함함
- 데이터베이스 스키마
- 주장
- 권한 : 읽기 권한, 삽입 권한, 갱신 권한, 삭제 권한
# cascade (default는 on delete no action)
create table course ( … dept_name varchar(20),
foreign key (dept_name) references department
on delete cascade
on update cascade, . . . )
cascade의 작업: set null, set default, restrict(참조되어지는 row를 삭제 못함) no action
# 무결성 제약조건
- Primary key (ID는 강사를 고유하게 식별함)
- 참조 무결성 (SQL 참조 제약조건) – 존재하지 않는 사실은 참조하지 않음
예) 모든 instructor 튜플의 dept_name 값은 department 릴레이션에 나타나야 함
- not null
- primary key (A1, ..., An ) : 널 값 갖지 않고 유일
- foreign key (Am, ..., An ) references s
- 데이터베이스의 손상 방지
- 교수 이름은 null 이 될 수 없음
- 서로 다른 교수가 같은 ID를 가질 수 없음
- course 릴레이션에서 모든 학과이름은 department 릴레이션의 학과이름과 일치해야 함
- 학과의 예산은 $0.00보다 항상 커야 함
개체무결성 – 존재하는 사실은 유일하게 식별 (주키)
# drop 명령어
- 릴레이션 제거. 존재 자체
- drop table course;
# alter table
- alter table r add A D : 존재하는 릴레이션에 속성 추가
r은 릴레이션 이름, A는 추가될 속성의 이름, D는 그 속성의 도메인
릴레이션의 모든 투플들에 대해서 새로운 속성을 위한 값으로 null이 할당됨
- alter table r drop A : 릴레이션에서 속성 제거
r은 이미 존재하는 릴레이션의 이름, A는 속성의 이름
많은 데이터베이스 시스템은 속성의 제거는 지원하지 않음
2. 데이터 조작 언어 (DML) : 인스턴스(Instance)
– 특정한 순간에 데이터베이스에 저장되어 있는 정보의 모임
- 변수에 저장된 값과 유사, 실체가 만들어지는 것
- 적절한 데이터 모델로 구성된 제이터를 접근하거나 조작할 수 있도록 하는 언어
- DML 은 질의어
# 두 가지의 형태의 DML
1) 절차식(Procedural) DML
- 어떤 데이터가 필요하며 그 데이터를 어떻게 구할지 지정할 것을 요구함
2) 선언적(Declarative) DML(비절차식(nonprocedural))
- 필요한 데이터를 어떻게 구할지 명시할 필요 없이, 어떠한 데이터가 필요한지 지정할 것을 요구함
- SQL 은 가장 널리 쓰이고 있는 질의어
- select, insert, update, delete 명령어
# 응용 프로그램에서의 데이터베이스 접근
- 호스트 프로그램 안에 DML을 내장하기 위한 내장형 SQL, 호스트 언어 문법의 확장(DML 선컴파일러가 DML문을 호스트 언어의 프로시저 호출로 바꾸어 줌)
- DML과 DDL 문을 데이터베이스에 보내기 위한 응용 프로그램 인터페이스 제공(API : ODBC-C언어/JDBC-Java)
# 릴레이션 스키마와 인스턴스
- A1, A2, …, An : 속성
- R(A1, A2, …, An ) : 릴레이션 스키마
예: instructor(ID, name, dept_name, salary)
- D1, D2, …. Dn 집합 릴레이션 r 은 D1 x D2 x … x Dn 의 하위 집합
- 릴레이션은 각 에 대한 (a1, a2, …, an) n-투플의 집합
- 릴레이션의 현재 값(릴레이션 인스턴스)은 테이블에 의해 변경됨
- r 의 요소 t 은 테이블에 행으로 표시되는 투플
- 순서 자체는 의미가 없음. 각각의 row를 집합의 원소로 봄
어떤 강좌 담당 릴레이션 - teaches(ID, course_id, sec_id, semester, year)
교수 릴레이션 – instructor(ID, name, dept_name, salary)
학과 릴레이션 - department(dept_name, building, budget)
과목 릴레이션 – course(course_id, title, dept_name, credits)
강좌 릴레이션 - section(course_id, sec_id, semester, year, building, room_number, time_slot_id)
선수 과목 – prereq(course_id, prereq_id)
교실 – classroom(building, room_number, capacity)
학생 – student(ID, name, dept_name, tot_cred)
이수 – takes(ID, course_id, sec_id, semester, year, grade)
지도 – advisor(s_ID, i_ID)
시간표 – time_slot(time_slot_id, day, start_hr, start_min, end_hr, end_min)