강의목차데이터 베이스의 이해파일 시스템의 문제데이터 베이스의 특징데이터베이스의 구성요소데이터베이스 모델링1. 사용자 요구사항 분석2. 데이터 모델링3. ER modal관계형 모델논리적 데이터 모델링관계형 모델 (relational model, relation)릴레이션의 특징키 (key)제약조건 관계 연산 (관계형 모델의 데이터 연산)데이터 저장과 파일인덱스해싱과 특수 인덱스
강의목차
- 4강. SQL (1)
- 5강. SQL (2)
- 6강. SQL (3)
- 7강. 정규화
- 8강. 연습문제 풀이1
- 9강. 데이터 저장과 파일
- 10강. 인덱싱
- 11강. 해싱과 특수 인덱스
- 12강. 트랜잭션
- 13강. 동시성 제어
- 14강. 회복 시스템
- 15강. 연습문제 풀이 2
데이터 베이스의 이해
파일 시스템의 문제
데이터의 독립 | 데이터 종속성 | ㅤ |
데이터의 확장 | 데이터의 중복 | ㅤ |
데이터의 무결성 훼손 | 중복데이터가 많아지게 되면 데이터의 모니터링, 관리가 어렵고 이는 제약조건들을 깨뜨려 | 데이터 무결성: 데이터의 정확성을 보장하며, 각 데이터들에 데한 제약조건을 만족시키는 것 |
동시 접근 이상 | ㅤ | ㅤ |
파일처리 시스템의 문제들을 해결하기 위해 등장한 것이 데이터 베이스 (Database)와 DBMS (데이터베이스 관리 시스템, database management system)
데이터 베이스의 특징
- 자기 기술성
- 애플리케이션과 데이터의 분리, 추상화
- 다중 뷰 : 사용자 입장에서 필요한 부분만 뷰 (외부 스키마)로서 정의하여 사용하고 데이터의 실체는 내부에 감추어 보안성을 높인다
- 3단계 구조 예시
트렌젝션
트랜잭션이란 데이터의 상태를 변화하기 위한 DB의 명령(논리적인 작업 단위)
데이터베이스의 구성요소
- 데이터베이스 언어
- CREATE : 데이터베이스, 테이블을 생성한다.
- ALTER : 테이블을 수정한다.
- DROP : 데이터베이스, 테이블을 삭제한다.
- TRUNCATE : 테이블을 초기화한다.
- SELECT : 데이터를 조회한다
- INSERT : 데이터를 삽입한다.
- UPDATE : 데이터를 수정한다.
- DELETE : 데이터를 삭제한다.
- GRANT : 특정 사용자에게 특정 작업에 대한 사용권한을 부여합니다.
- REVOKE : 특정 사용자로부터 특정 작업에 대한 사용권한을 제거합니다.
- ROLLBACK : 트랜잭션을 취소합니다.
- COMMIT : 트랜잭션을 데이터베이스에 반영합니다.
사용자는 데이터베이스에 접근할 때 질의어를 사용하여 접근하게 됩니다. 데이터베이스의 데이터에 접근하는 언어로서 SQL이라고도 합니다.
이 SQL에는 크게 DDL, DML, DCL이 있습니다.
먼저 DDL(Data Definition Language)은 데이터 정의어라고 하며 데이터의 전체 골격을 결정하는 언어로서 그 종류는 다음과 같습니다.
DML(Data Manipulation Language)은 데이터 조작어라고 합니다. 데이터베이스의 레코드를 수정하거나, 삭제하는 역할을 합니다.
DCL(Data Control Language)은 데이터 제의어라고합니다. 데이터베이스에 대한 접근, 권한에 대한 역할을 합니다.
- 아키텍쳐
중앙집중방식
분산 시스템 방식
클라이언트 - 서버 시스템 방식
데이터베이스 모델링
- 비즈니스적 관점 - 무슨 데이터를 저장하는가
- 컴퓨터 프로그래머적 관점 - 어떻게 데이터를 저장하는가
1. 사용자 요구사항 분석
요구사항 명세서
제안 요청서를 검토하여 요구사항을 도출하여 작성한 문서입니다.
요구사항 정의서
요구사항 명세서를 분석하여 각 요구사항을 정의하는 문서입니다.
2. 데이터 모델링
1. 개념적 데이터 모델링
추상화되어있는 실세계의 데이터들을 개념적으로 일반화시켜서, 데이터의 구조, 타입, 속성, 관계, 제약조건 등을 정리하는 과정입니다.
2. 논리적 데이터 모델링
DBMS(오라클, MySQL 등) 에 맞춰 데이터를 표현합니다. 이때 데이터 정의 언어 (CREATE, DROP, ALTER, TRUNCATE)로 기술된 개념 스키마가 생성됩니다.
3. 물리적 데이터 모델링
데이터베이스 내부의 저장구조, 파일구성, 인덱스, 접근 경로를 결정합니다.
3. ER modal
1976년 카네기 멜론 대학의 P.Chen 박사가 제안한 모델입니다. 개체(entity)와 개체 사이의 관계(relationship)를 정형화시킨 모델이며 개념적 모델링 단계에서 사용되는 모델입니다.
- 개체(entity)와 개체 집합
- 관계 집합
- 속성 (attribute)
- 단순 속성과 복합 속성
- 단일 값 속성과 다중 값 속성
- 다중값 속성 =
{다중값 속성}
로 표현 - 유도 속성과 저장 속성
- 유도속성 =
유도속성()
로 표현
- 제약조건
- 사상수
- 1:1 (일대일)
- 1:N (일대다)
- N:N (M:N, 다대다)
- 참가 제약조건
- 축구팀은 무조건 연고지 관계집합에 참여하기 때문에 전체적참가입니다.
- 그러나 모든 도시가 축구팀과 연고지관계를 가지진 않기 떄문에 도시 집합은 부분적 참가입니다.
- 키 속성
- 축구선수 개체 집합의 경우 "선수 코드"는 선수의 고윳값을 가진 일련번호이므로 유일 값을 가지는 키입니다.
- 또한 소속팀 코드는 축구팀 개체 집합과 소속팀 관계를 이을 수 있도록 하는 키입니다.
- 이렇게 선수 코드와 소속팀 코드는 키 속성이며 아래와 같이 밑줄을 그어 표시합니다.
- 특수 속성과 특수관계
- 관계 집합의 속성이란 두 개체 집합의 관계를 맺을 때 생성되는 값을 저장하는 속성입니다. 이를테면 축구선수 개체집합이 축구팀 개체 집합과 연관을 맺을때 "이적일자"라는 속성이 생성될 수 있습니다
- 하나의 개체집합 안에서 자신의 개체집합과 관계 집합을 형성하는 속성도 있습니다. (재귀적 관계)
- 약한 개체 집합은 개체의 존재 유무가 관계를 맺는 상대 개체의 존재에 종속되는 개체 집합입니다. 축구선수의 "신체정보" 개체집합은 축구선수 개체가 없다면 존재하지 않는 개체입니다.
- 이때 "신체정보" 개체집합은 약한개체집합이고 그 상대가 되는 축구선수 개체집합은 강한 개체집합입니다.
제약조건(constraints)의 종류는 아래와 같습니다.
관계형 모델
논리적 데이터 모델링
DBMS에서 사용하는 데이터 모델 구조에 맞게 데이터를 설계 (표현)하는 것
관계형 모델 (relational model, relation)
- 관계형 디비 (relational database management system, RDBMS)를 위한 관계형 모델
- 릴레이션 (relation, 관계)으로 데이터를 표현하는 모델로, 현재 대다수 DBMS가 RDBMS이기 때문에 가장 보편적인 논리적 모델링입니다.
- 레코들들이 모여있는 것, 즉 표가 하나의 인스턴스입니다.
- header를 schema라고 합니다.
- 컬럼 값 (데이터)는 2개 이상의 메타데이터로 이루어집니다. (예 : '아르헨티나' 값은 '메신', '바르셀로나'라는 메타데이터로 이루어진 주소 데이터)
- record=tuple=row
- column=field=attribute
- domain=컬럼이 가질 수 있는 값의 범위
- 컬럼의 수 = 차수=degree
- 열의 수=cardinality
릴레이션의 특징
- 레코드의 유일성 : 중복된 레코드는 존재하지 않음
- 레코드의 무순서성 : 레코드 간의 순서는 의미 없음
- 컬럼의 무순서성 : 컬럼 간의 순서는 의미가 없고, <컬럼이름, 데이터>가 한 쌍
- 컬럼 값의 원자성 : 컬럼 값은 더 이상 나눌 수 없는 데이터
키 (key)
유일성 (Uniqueness)과 최소성 (irreducibility, 유일성을 유지하기 위한 최소의 컬럼으로만 구성된다)를 가집니다.
- 수퍼키 (super key) : 유일성 만족
- 후보키 (cadidate key) : 유일성을 만족 and 최소성을 만족
- 기본키 (primary key, PK) : 후보키 중 릴레이션 안에 레코드 구분을 위해 선택된 키
- 외래키 (foreign key, FK) : 다른 릴레이션과의 참조를 위해 선택된 다른렐레이션의 기본키
제약조건
- 영역 제약조건 : 컬럼에 정의된 영역에만 해당하는 값이 들어감 (글자 수, 숫자의 크기 등)
- 키 제약조건 : 키는 레코드 간의 유일성을 유지할 수 있는 값으로 구성
- 개체 무결성 제약조건 : 기본키는 NULL이면 안됨
- 참조 무결성 제약조건 : 반드시 존재하는 다른 릴레이션 레코드의 기본키만 참조
관계 연산 (관계형 모델의 데이터 연산)
- 릴레이션들 간의 연산을 통해 새로운 릴레이션 (임시 릴레이션)으로 표현하는 것
- 사용자 (개발자) 측에서 보면 각 릴레이션들 중 필요한 데이터만 의도에 맞게 조건을 주어 연산하도록 하는 것입니다.
- SELECT 연산 : 릴레이션에서 조건에 만족하는 레코드를 선택하여 릴레이션을 생성
- 프로젝션 연산 : 필요한 컬럼만 골라서 릴레이션을 생성
- 관계대수 연산 : 특정 조건에 맞는 컬럼값을 릴레이션으로 생성
- 집합 연산 : 릴레이션을 하나의 집합, 레코드를 그 집합의 원소로 보고 연산
- 카티시언 프로덕트 연산 : 두 릴레이션 사이 레코드 간의 모든 조합을 생성하는 것 (cross join)
- 조인 연산 : 카티시언 프로덕트 연산 이후 특정 조건에 맞는 레코드를 릴레이션으로 생성하는 것
- 집계 함수 연산 : 집계 함수 (합계, 평균, 최댓값 등)를 특정 레코드의 집합에 적용하여 연산하는 것
데이터 저장과 파일
db는 어떻게 데이터를 효과적으로 관리하는가?
- 메모리
- 물리적 저장장치의 계층구조
레지스터 > 캐시 > 메인 메모리 > 자기 디스크, 플래시 메모리 > 광학 디스크, 자기 테이프
- 휘발성 = 전원 공급이 없을 때 데이터가 사라지는 휘발성 저장장치로는 주로 CPU가 이용하는 주기억장치인 레지스터, 캐시, 메인 메모리
- 비휘발성 = 전원 공급이 없어도 데이터가 보존되는 비휘발성 저장장치는 디스크와 같이 주기억장치보다 하위에 위치하는 보조 기억장치와 3차 기억장치인 광학 디스크 드라이브와 자기 테이프
- 파일
- 데이터베이스를 구성하는 논리적구조, 논리적 관점에서의 저장 객체, 물리적 단위인 블록에 나누어져 저장됨
- 블럭 = 메모리와 디스크간 데이터 전송 단위
- 레코드= 블럭을 구성하는 요소
- 고정 길이 레코드
- 고정 길이에서 남는 공간에 어떻게 할당할 것인가?
- 레코드 삭제 시
- 마지막 레코드로 공백 대체 -순서가 뒤바뀌어 검색이 오래걸리게 된다
- 삭제 레코드 이후의 레코드를 이동- 첫번째가 삭제되면 나머지를 모두 옮겨 오버헤드가 난다
- 가용 리스트 관리 - 공백 레코드 포인터(연결 리스트) 빈공간을 알고 있다
- 가변 길이 레코드
- 슬롯페이지 구조 = 블럭 헤더(레코드 요약 정보), 맨뒤부터 레코드 내용이 저장됨
- 멀티셋 = 한 레코드의 컬럼값이 여러 개인 컬럼
- 파일 구조화 방법의 종류
- 힙 파일 구조 = 저장 순서 상관없이 임의 위치에 파일 배치, 저장 속도 가장 빠름, 사용 효율이 가장 떨어짐
- 순차 파일 구조 = 정해진 탐색키 기준으로 정렬되어 저장, 저장 속도가 상대적으로 힙 파일보다 느리지만 이진탐색으로 탐색은 빠름
- 오버플로우 블럭
- 해시 파일 구조 = 레코드가 입력되면 레코드가 저장될 블록 주소를 반환해 주는 해시 함수를 사용, 해시 함수를 사용하여 블럭 주소를 계산, 계산에 많은 시간이 투자 필요
- 다중 테이블 클러스터링 파일구조 = 빈번히 조인되는 테이블을 하나의 파일에 저장하기 위해 미리 테이블이 조인되어 저장되어있는 구조
- 저장 장치 관리
- 논리적 단위인 파일과 다르게 물리적 단위인 블럭을 메모리에 적재하거나 할당 해지함
- 일반적으로 2kb~32kb
- 메모리 안 버퍼에 블럭 적재
- 버퍼관리자는 디스크와 메모리 사이 관리
- 어떤 메모리 블럭을 디스크로 내보내야 하는가?
- 버퍼 교체 전략
- 기법
- Least Recently Used: 최근에 가장 적게 참조된 블럭 교체
- Most Frequently Used: 특정 기간동안 가장 여러번 사용된 블럭 교체
- 고정 블럭 = 교체되는 것을 제한
- 블럭 강제 출력 = 민감 데이터를 영구적으로 기록하기 위해 버퍼 공간에 상관없이 강제로 디스크에 기록
인덱스
- 인덱스의 필요
- 인덱스= 데이터 파일에 대한 빠른 탐색을 지원하는 부가적인 자료구조이며
- 인덱싱= 인덱스를 생성하는 작업
- 탐색키
- 종류
- 순서 인덱스
- 해시 인덱스
- 평가기준
- 접근시간
- 유지비용
- 공간비용
- 순서 인덱스
- 순차 파일
- 인덱스 엔트리의 구조
- 탐색키값
- 포인트
- 블럭 아이디
- 오프셋
- 종류
- 밀집 인덱스
- 모든 레코드에 대한 인덱스의 엔트리에 모든 탐색키 값이 만들어져 있음
- 모든 레코드의 탐색키를 사용하여 인덱스를 생성하면 데이터의 크기가 커질수록 밀집 인덱스도 커지게 되어 메모리에 모두 적재되지 못하여 인덱스를 탐색하면서 추가적인 I/O비용이 발생할 수 있다.
- 희소 인덱스= 모든 레코드에 대한 인덱스의 엔트리에 일부 탐색키 값이 만들어져 있음
- 다단계 인덱스
- 밀집+희소 인덱스
- 내부 인덱스와 외부 인덱스
- B+-인덱스
- 원류는 이진 탐색 트리
- B+-트리 구조 - 루트 route/중간 internal/단말 leaf 노드
- B+-트리 노드 구조 - fanout개수가 노드 개수
- 중간노드 = ⌈n/2⌉과 n 사이의 자식을 갖는다
- 인덱스 세트 - 루트/중간노드로 구성, 찾아가는 경로를 제공, 그 노드가 어디에 있는가
- 순차세트 - 단말 노드로 구성, ∟작은 것 중 가장 큰 것
- B+-트리 상에서의 삽입/삭제
해싱과 특수 인덱스
- 정적 해싱
해싱은 수학적 함수 개념을 사용한 데이터 관리 기법으로 버킷의 개수가 정해진 정적 해싱과 데이터베이스이 크기에 따라 버킷의 개수가 변경되는 동적 해싱으로 구분된다.
해시 함수는 레코드의 탐색키 값과 저장되어야 하는 버킷의 주소를 대응시키는 역할을 수행하며, 레코드가 버킷에 균등하게 배푼되는 해시 함수가 가장 이상적이다.
충돌 발생으로 서로 다른 탐색키가 동일한 버킷에 대응될 수 있으며 이를 동거자라고 한다. 특정 버킷에 많은 충돌이 발생하여 더 이상의 레코드나 인덱스 엔트리가 저장될 수 없을 때 이를 오버플로라 한다.
- 동적 해싱
확장성 해싱은 데이터베이스의 크기에 따라 버킷이 확장되는 동적 해싱 기법의 일종으로 디렉토리와 버킷으로 구성되며 디렉토리의 주소와 버킷의 주소로 구성되는 모조키를 사용한다.
- 비트맵 인덱스
비트맵 인덱스는 다중키를 가진 질의를 보다 효율적으로 처리하기 위해 고안된 인덱스이다. 비트맵은 간단한 비트 배열로 이루어져 있다.
비트맵 인덱스를 사용하여 레코드를 검색 시 주어진 각각의 조건에 해당하는 비트열을 비트 AND 연산을 수행하여 최종적으로 생성되는 비트열로 조건을 만족하는 레코드의 위치를 빠르게 파악할 수 있다.
Share article