데이터베이스 시스템
데이터 베이스 특징
- 실시간 접근성
- 계속적인 변화
- 동시 공유
- 내용에 따른 참조
DBMS의 장점
- 데이터의 독립성
- 물리적 독립성 : 데이터베이스 사이즈를 늘리거나 성능 향상을 위해 데이터 파일을 늘리거나 새롭게 추가하더라도 관련된 응용 프로그램을 수정할 필요가 없다.
- 논리적 독립성 : 데이터베이스는 논리적인 구조로 다양항 응용 프로그램의 논리적 요구를 만족시켜줄 수 있다.
- 데이터의 무결성
- 여러 경로를 통해 잘못된 데이터가 발생하는 경우의 수를 방지하는 기능으로 데이터의 유효성 검사를 통해 데이터의 무결성을 구현하게 된다.
- 데이터의 보안성
- 인가된 사용자들만 데이터베이스나 데이터베이스 내의 자원에 접근할 수 있도록 계정 관리 또는 접근 권한을 설정함으로써 모든 데이터에 보안을 구현할 수 있다.
- 데이터의 일관성
- 연관된 정보를 논리적은 구조로 관리함으로써 어떤 하나의 데이터만 변경했을 경우 발생할 수 있는 데이터의 불일치성을 배제할 수 있다. 또한 작업 중 일부 데이터만 변경되어 나머지 데이터와 일치하지 않는 경우의 수를 배제할 수 있다.
- 데이터 중복 최소화
- 데이터베이스는 데이터를 통합해서 관리함으로써 파일 시스템의 단점 중 하나인 자료의 중복과 데이터의 중복성 문제를 해결할 수 있다.
데이터 베이스 개념적 구조
- 외부 스키마
- 전체 데이터베이스 중에서 하나의 논리적인 부분
- 서브 스키마라고도 하며, 뷰의 개념
- 여러 개의 외부 스키마가 있을 수 있음
- 개념 스키마
- 전체 데이터베이스의 정의
- 하나의 데이터베이스에는 하나의 개념 스키마가 존재
- 물리 스키마
- 물리적 저장장치에 데이터베이스가 실제로 저장되는 방법을 표현
- 인덱스, 데이터 레코드의 배치 방법, 데이터 압축 등에 관한 사항 포함
관계 데이터 모델
키
- 슈퍼키
- 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 집합
- 후보키
- 튜플을 유일하게 식별할 수 있는 속성의 최소 집합
- 기본키
- 여러 후보키 중 하나를 선정하여 대표로 삼는 키 ( primary key )
- 외래키
무결성 제약 조건
- 데이터 무결성
- 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것
- 도메인 무결성 제약조건
- 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건
- 개체 무결성 제약조건 (기본키 제약)
- 기본키는 null 값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야 한다
- 참조 무결성 제약조건 (외래키 제약)
- 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다
SQL
DML - 검색
SELECT [ ALL | DISTINCT ] 속성 이름
FROM 테이블 이름
WHERE 검색 조건
GROUP BY 속성 이름
HAVING 검색 조건
ORDER BY 속성 이름 [ASC | DESC]
DML - INSERT
INSERT INTO 테이블이름(속성 리스트)
values (값 리스트)
DML - UPDATE
UPDATE 테이블 이름
SET 속성이름 = 값
WHERE 검색조건
DML - DELETE
DELETE FROM 테이블 이름 WHERE 검색조건
DDL - CREATE
CREATE TABLE 테이블 이름
( {속성 이름, 데이터 타입 [NULL | NOT NULL | UNIQUE | DEFAULT 기본값 | CHECK 체크조건]}
PRIMARY KEY 속성이름
FOREIGN KEY 속성이름 REFERENCES 테이블이름
ON DELETE {CASCADE | SET NULL}
)
DDL - ALTER
ALTER TABLE 테이블 이름
ADD 속성이름 데이터타입
DROP COLUMN 속성이름
ALTER COLUMN 속성이름 데이터 타입
ALTER COLUMN 속성이름 [NULL | NOT NULL]
ADD PRIMARY KEY(속성이름)
[ADD | DROP] 제약이름
DDL - DROP
DROP TABLE 테이블이름
인덱스
인덱스란?
- 자료를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조
- 원하는 데이터를 빨리 찾기 위해 튜플의 키 값에 대한 물리적 위치를 기록해둔 자료구조
- RDBMS의 인덱스는 대부분 B-TREE 구조로 되어있음
B-tree
- B-tree의 각 노드는 키 값과 포인터를 가진다
- 항상 정렬상태를 유지, 균형 상태 유지
- 검색할 때 특유의 트리 구조를 이용하기 때문에 한 번 검색할 때마다 검색 대상이 줄어 접근 시간이 적게 걸림
- 데이터의 변경이나 추가가 잦을 경우 B-tree의 모양을 유지하기 위해 노드의 분할 및 이동이 자주 발생하는 단점이 있음
인덱스 특징
- 테이블에서 한 개 이사의 속성을 이용하여 생성
- 빠른 검색과 함께 효율적인 레코드 접근
- 순서대로 정렬된 속성과 데이터의 위치만 보유하므로 테이블보다 작은 공간을 차지
- 저장된 값들은 테이블의 부분집합이 됨
- 데이터의 수정, 삭제 등의 변경이 발생하면 인덱스의 재구성이 필요함
클러스터 인덱스, 보조 인덱스
- 클러스터 인덱스
- 연속된 키 값의 레코드를 묶어서 같은 블록에 저장하는 방법
- B-tree 인덱스의 리프 노드에서 페이지의 주소 값 대신 테이블의 열 자체가 저장되는 형태
- 보조 인덱스
- 속성의 값으로 B-tree 인덱스를 구성하며 리프 노드의 각 행은 해당 페이지의 주소 값을 저장
인덱스 생성
- 데이터의 양이 별로 없거나 데이터 값이 몇 종류 안되어 선택도가 높을 경우 인덱스가 없는 게 더 빠를 수 있음
- 의미 없이 인덱스를 생성하면 검색이 더 느려지고 저장 공간만 낭비
CREATE INDEX ix_Book ON BOOK(bookname)