Computer Science/Database, SQL 23

[HUFS/데이터베이스] #17 회복

장애와 회복 장애란 시스템이 정해진 명세대로 작동하지 않는 상태이며, 장애의 원인으로는 ‘하드웨어 결함 / 소프트웨어의 논리오류 / 사람의 실수’ 등이 있다 트랜잭션 장애: 논리적 오류 입력 데이터의 불량 시스탬 장애: 하드웨어의 오동작 미디어 장애: 디스크 헤드 붕괴 또는 고장 회복(Recovery)이란 DB를 장애 발생 이전의 일관된 상태로 복원시키는 것으로, 일관된 상태(consistent state)란 오류가 없고 DB 내용에 모순이 없는 상태이다. 회복의 기본 원리는 데이터를 중복(redundancy)으로 기록하는 것이며, 다른 저장장치에 그대로 복제는 덤프(dump) 방식이나 데이터 파일의 변경된 부분만 별도의 파일에 기록하는 로그(log, journal) 방식을 사용할 수 있다 회복을 위한 ..

[HUFS/데이터베이스] #16 질의어 처리

질의어 처리 SQL(고급 질의어)가 scanner를 거치면서 token(의미)이 생성되고 내부 형태 질의문으로 변환된다 내부 형태 질의문(= tree -> 관계 대수)이 질의어 최적기를 거쳐 plan으로 선택된다 plan이 질의문 실행 코드, DB 처리를 거쳐서 결과적으로 질의어 결과를 도출한다 질의어 최적화 중간 과정의 질의어 최적화란? 더 성능이 빠른 (효율적) 실행을 위해 디스크 I/O횟수, 중간 결과의 크기, 응답시간을 감소시킨다 ‘질의문 내부표현 -> 효율적 내부형태로 변환 -> 후보 프로시저 선정 -> 평가 및 결정’ 질의문 트리의 단말 노드에는 피연산자인 릴레이션이, 내부 노드에는 관계대수 연산자가 들어간다 질의문 트리는 상향식으로 실행되며, 마지막으로 루트 노드가 실행되며 질의문 결과를 출..

[HUFS/데이터베이스] #15 인덱스

B-트리 데이터가 입력되는 순서대로 쌓이는 순차 방법은 레코드들의 논리적 순서가 저장 순서와 동일 ~ 물리적 순서대로 레코드에 접근하며 파일 복사, 순차적 일괄 처리에 응용 인덱스의 종류) 기본키에 대한 인덱스라면 기본 인덱스, 아니라면 보조 인데스 레코드가 키 값 순으로 정렬되었다면 집중 인덱스, 아니라면 비집중 인데스 모든 키에 대해서 인덱스 엔트리가 있다면 밀집 인덱스, 아니라면 희소 인데스 * 인덱스 엔트리: 레코드 키 값 + 포인터 디스크에 인덱스를 만들 때, 데이터를 저장하는 탐색 트리 m-원 탐색 트리 중 모든 자식 노드가 균형을 유지하는 경우 B-트리라고 한다 B-트리의 조건) 공백이거나 높이가 1이상인 m-원 탐색 트리 루트와 리프를 제외한 내부 노트는 최소 m/2, 최대 m개의 서브트리..

[HUFS/데이터베이스] #14 데이터베이스 설계

설계 단계는 개념적/논리적/물리적 설계로 나뉘며 개념적 설계 단계에서는 E-R 다이어그램 스키마 설계(정적) 및 트랜잭션 모델링(동적), 논리적 설계 단계에서는 목표 DBMS(관계형 DB)의 스키마 설계 및 트랜잭션 인터페이스 설계, 물리적 설계 단계에서는 목표 DBMS에 맞는 물리적 설계 및 트랜잭션 세부 설계가 진행된다 * 목표 DBMS는 관계형 DB 중에서도 Oracle, DB2, mySQL 등 다양하다! 데이터베이스를 설계할 때 고려사항은 다음과 같다 무결성(integrity): 데이터의 모든 제약조건을 만족시켜야 함 일관성(consistency): 데이터간 응답(트랜잭션의 시작과 끝)이 일치해야 함 회복(recovery): 컴퓨터 셧다운 및 응용프로그램 장애에 대한 복구 이 외에도 불법 접근을 ..

[HUFS/데이터베이스] #13 데이터 모델링과 E-R 모델

데이터 모델링 데이터 모델링은 현실의 대상을 컴퓨터상의 데이터로 매핑(mapping)하는 것이다 개념적 데이터 모델링은 값을 E-R모델로 모델링 하는 것이며, 관계 데이터 모델 릴레이션을 최종적으로 물리적 구조로 변환한다 데이터 모델이란? D(데이터 모델) = S(구조): 릴레이션 및 데이터의 정적 성질 O(연산): 카티션프로덕트, 합집합 등 데이터의 동적 성질이자 조작 기법 C(제약 조건): 관계 데이터 모델의 논리적 제약들 * 최근에는 객체 지향 데이터 모델 및 객체-관계 데이터 모델도 사용한다 개체는 다른 것과 구별되는 객체로 개체 타입(entity type)을 통해 표현된다 ~ 개체 인스턴스들의 집합인 개체 집합으로 개체의 이름과 애트리뷰트들로 정의된다 1. 단순 애트리뷰트: 더 이상 작은 구성 ..

[HUFS/데이터베이스] #12 데이터 종속성과 정규화

데이터의 논리적 표현 스키마 설계 = 데이터베이스의 논리적 설계 애트리뷰트, 엔티티, 관계성 파악 관련된 애트리뷰트들을 릴레이션으로 묶기 (데이터 종속성 고려: 학번 ~ 학생) 데이터 변경(삽입, 삭제, 변경) 시 이상현상 대비 이상(anomaly)현상이란? 삭제 이상: 연쇄 삭제에 의한 정보 손실 삽입 이상: 원하지 않는 정보의 강제 삽입 갱신 이상: 중복 데이터의 일부 갱신으로 정보의 모순성 발생 해결책: 애트리뷰트들 간의 여러 종속관계를 분해하여 각각의 릴레이션으로 표현 하나의 종속성을 하나의 릴레이션으로 -> 정규화 과정 정규형(normal form): 이상 현상이 발생하지 않도록 제약 조건을 만족하는 릴레이션 스키마 변환: 애트리뷰트들과 제약조건(종속성)을 수집한 후 여러 릴레이션으로 분할 외부..

[HUFS/데이터베이스] #11 View & Embedded SQL

SQL 뷰(view) 기존 테이블에서 유도되어 만들어지는 가상 테이블(virtual table)로 외부 스키마를 구성한다 물리적 구현X, 카탈로그에 SELECT-FROM-WHERE 형태 SQL문으로만 저장된다 테이블을 들여다보는 창문 역할이기에 뷰를 변경하면 테이블도 변경된다 이렇게 생성된 뷰는 마치 테이블처럼 활용할 수 있으며 기존 테이블로 치환이 가능하다 뷰의 제거는 DROP VIEW를 하면 되는데,, 다만 기본키를 포함하는 경우에도 이론상 변경이 가능할 뿐, 다음과 같은 경우에는 불가능 상수나 연산자, 함수가 포함된 산술 식으로 뷰의 열이 구성된 경우 DINSTINCT나 GROUP BY, HAVING이 사용된 경우 두 개 이상의 테이블이 관련된 경우 변경할 수 없는 뷰를 기초로 정의된 경우 뷰의 장..

[HUFS/데이터베이스] #10 SQL 조작문

SQLite는 한 문장이 하나의 Transaction(작업 단위)로 처리됨 (begin -> commit or rollback) 데이터 검색 SELECT - FROM - WHERE 을 통해 가장 기초적인 검색이 가능하다 SQL의 테이블과 relation의 차이? 추상적인 릴레이션은 SQL의 테이블로 구체화되어 보여지는데,, 한 테이블 내에 똑같은 레코드(행) 중복이 가능하고 따라서 기본키가 반드시 필요하진 않다 ~ 이론상 SQL의 테이블은 튜플의 집합이 아니라 중복을 허용하는 다중 집합(multiset)인 셈이다 테이블의 SELECT 결과가 또 다시 테이블이 되는 폐쇄 시스템(closed system)이다! COUNT: 해당 테이블의 중복을 허용한 튜플의 수를 반환한다 (distinct 추가 가능) AV..

[HUFS/데이터베이스] #9 SQL 정의문

SQL의 특징 SQL(Structured Query Language): 표준화된 종합 DB 언어, 구조화 질의어 약간의 관계 대수와 확장된 튜플 관계 해석으로 이루어진 비절차적 DB언어이다 ~ 선언적(비절차적) 언어이기 때문에 접근 경로 등 절차에 대한 명세가 필요없다 DDL(데이터 정의어), DML(데이터 조작어). DCL(데이터 제어어)의 기능을 모두 제공 Java, C, C++, COBOL 등 범용 언어 기반 응용 프로그램에 삽입된 형태로 활용 SQL에서는 편의상 (릴레이션 = 테이블 / 튜플 = 행 / attribute = 열) 스키마(schema): 데이터(사용자)에 속하는 메타 데이터(테이블 및 구성요소)를 정의하는 것 (CREATE SCHEMA = CREATE DATABASE 데이터베이스의 ..

[HUFS/데이터베이스] #8 QBE & SQLite

QBE (Query by Example) 도메인 관계 해석에 기반해 그래픽 상에서 테이블 형태의 DB에 질의를 할 수 있는 구문 언어 SQLite SQLite Home Page SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bu sqlite.org 임베디드 시스템에 보편적으로 사용되는 SQL 데이터베이스..