CS

[컴퓨터과학개론] 데이터베이스

Grace 2023. 12. 4. 20:38

데이터 처리

  • 데이터
    • 관찰이나 측정을 통해 현실 세계에서 단순히 수집된 사실/ 값
    • 적절한 처리를 거쳐야만 정보로서 가치를 가짐
  • 정보처리 시스템
    • 데이터를 수집, 조직, 저장하고 정보를 생성, 분배하는 시스템
    • 데이터베이스: 실세계의 방대한 데이터를 효과적으로 저장/운영하기 위한 기술

파일 처리 시스템

  • 파일 단위의 데이터 저장 및 처리 시스템
    • 정보 표현에서 1차원적인 저장 시스템
    • 각 응용 프로그램이 특정한 응용을 위해 필요한 파일을 독립적으로 소유하고 관리
  • 데이터 종속성(data dependency): 응용 프로그램과 데이터 사이의 1:1 상호 의존 관계 → 파일 구성 요소, 접근 방식 등이 변경되면 해당 응용 프로그램도 함께 변경
  • 데이터 중복성(data redundancy): 한 시스템에 동일 데이터가 여러 개 존재 → 일관성, 보안성, 경제성, 부결성 확보 및 유지 곤란

데이터베이스 시스템

데이터를 데이터베이스에 저장하고 관리해서 필요한 정보를 생성하는 컴퓨터 중심의 시스템

데이터베이스 시스템의 구조

  • 외부 단계(뷰 단계): 각 사용자가 바라보는 개인적인 수준의 DB에 관한 것
  • 개념 단계(논리적 단계): 범기관적 입장에서 DB의 전체 구조를 추상화 하는 단계 → 물리적 저장구조의 세부 사항을 은폐하고, 어떤 데이터가 저장되었는지와 데이터 간에 존재하는 관계를 기술
  • 내부 단계(물리적 단계): 저장장치 입장에서 데이터가 실제로 어떻게 저장되는가를 기술

스키마(schema)

DB 구조에 대한 정의와 제약 조건의 명세를 기술한 것

  • 외부 스키마
    • 개별 사용자(응용 프로그래머)가 관심을 두는 DB의 일부분만 기술 → 전체 DB의 한 논리적 부분만을 표현하기 때문에 서브 스키마라고도 함
    • 개별 사용자마다 이에 대응하는 외부 스키마가 존재하므로 하나의 DB 시스템에는 여러 개의 외부 스키마가 존재할 수 있음
  • 개념 스키마
    • 모든 사용자/응용 프로그램이 필요로 하는 전체적이고 통합된 데이터베이스의 구조를 기술(하나만 존재)
    • 모든 데이터 개체들에 대한 정의, DB 접근 권한, 보안 정책, 무결성 규칙 등에 대한 명세를 포함
    • 모든 외부 스키마는 개념 스키마로부터 생성되고 지원됨
  • 내부 스키마(저장 스키마)
    • 물리적인 데이터 구조를 정의
    • 개념 스키마에 대한 저장 구조를 정의
    • 저장장치의 입장에서 데이터가 실제로 저장되는 방법을 기술
      • 저장 레코드 형식, 인덱스 유무, 저장 필드의 표현 방법, 저장 레코드의 물리적 순서 등을 기술
      • 물리적 레코드(페이지, 블록)와 저장장치의 특성(실린더, 트랙)은 고려하지 않음

각 단계의 사상

  • 외부/개념 사상: 특정 외부 스키마와 개념 스키마 사이의 대응 관계를 정의 → 논리적 데이터 독립성
    • 응용 프로그램에 영향을 주지 않고 DB의 논리적 구조의 변경이 가능
    • 하나의 논리적 구조로 많은 응용 프로그램이 요구하는 다양한 형태의 논리적 구조를 제공
  • 개념/내부 사상: 개념 스키마와 내부 스키마 사이의 대응 관계를 정의 → 물리적 데이터 독립성
    • 논리적 구조에 영향을 주지 않고 실제 데이터에 대한 저장 양식의 변경이 가능
    • 하나의 논리적 구조로 여러 가지 상이한 물리적 구조의 지원이 가능

데이터베이스

정의

한 조직의 여러 응용 시스템이 공유해서 사용하기 위한 통합, 저장, 운영 데이터의 집합

  • 공유: 여러 응용 프로그램이 공동으로 소유하고 사용
  • 통합
    • 중복된 데이터를 배제하여 각 데이터의 일관성 유지
    • 중복의 완전 배제가 아닌 최소한의 제한적으로 통제한 범위 내에서의 중복은 허용
  • 저장: 컴퓨터가 접근 가능한 저장매체에 저장
  • 운영
    • 어떤 조직의 목적과 유용성 측면에서 반드시 유지해야 할 데이터
    • 단순한 입출력 데이터 및 처리 과정에서의 일시적인 데이터는 제외

특징

  • 실시간 접근성: DB에 수시로 접근하는 사용자의 요구를 즉시 처리하여 응답을 제공
  • 계속적인 변화: 삽입/삭제/갱신 등의 연산을 통해 새로운 데이터로 내용을 지속적으로 변화시킴 → 현실 세계의 상태를 정확히 반영한 데이터를 유지
  • 동시 공유: 서로 다른 목적을 가진 여러 사용자가 동시에 원하는 데이터에 접근
  • 내용에 의한 참조: 데이터가 저장된 위치/주소가 아닌 내용/값에 따라 데이터를 참조
  • 데이터베이스 시스템의 자기 기술성: DB 자체 뿐만 아니라 DB에 대한 정의/설명까지 포함 → DB에 속하는 각 파일의 구조, 각 항목의 타입과 저장 형식, 데이터의 제약 조건 등이 시스템 카탈로그에 저장
  • 프로그램-데이터 독립성: 데이터 파일의 구조에 대한 정보가 응용 프로그램으로부터 분리되어 관리
  • 데이터 추상화: 사용자에게 상세 정보보다 데이터에 대한 개념적 표현을 제공 → 보다 용이한 데이터 접근이 가능
  • 다중 뷰 제공: 한 DB에 대한 여러 사용자의 서로 다른 관점의 데이터 요구에 따라 필요한 부분만을 선별적으로 추출해서 볼 수 있는 기능 제공
  • 데이터 공유: 여러 사용자가 동시에 DB에 접근할 수 있는 기능 제공
  • 다수 사용자의 트랜잭션 처리: 동시성 제어 기능을 통해 다수 사용자가 동일 데이터를 동시에 변경하는 경우에도 데이터의 일관성 보장

→ 장점: 일관성, 무결성, 보안, 백업과 롤백, 표준화, 응용 프로그램 개발 시간 단축, 융통성, 최신 정보의 가용성, 경제성

→ 단점: 운영비 증대, 백업과 롤백의 오버헤드, 복잡한 자료 처리, 시스템 취약성

데이터베이스 관리 시스템(DBMS, DataBase Management System)

  • 응용 프로그램이 데이터베이스를 공용할 수 있도록 관리해주는 소프트웨어 시스템 → 사용자와 데이터베이스 사이에 위치하여, DB의 구성, 접근 방법, 관리 유지 등에 관한 모든 책임과 권한을 갖고 모든 기능을 통합적으로 수행하여 사용자의 요구에 맞는 정보를 생성해주는 소프트웨어
  • 목적: 응용 프로그램이 데이터에 종속되지 않는 데이터의 독립성 제공
  • 개념적인 수준의 작업 과정
    • 사용자는 SQL과 같은 언어를 이용하여 데이터 접근을 요구
    • DBMS가 요구를 받아 분석
    • 외부스키마, 대응하는 외부와 개념 스키마 접속, 개념 스킴, 개념과 내부 스키마 접속, 그리고 기억장소 구조 정의 순으로 차례대로 검토
    • 저장된 데이터베이스에 필수적인 연산을 수행
  • 필수 기능
    • 정의(definition): 물리적으로 구현된 하나의 DB 구조로부터 여러 사용자들의 다양한 요구에 부응할 수 있도록 가장 적합한 DB 구조를 정의하는 기능
    • 조작(manipulation): 사용자와 DB 사이의 상호작용을 위한 수단 → 사용자가 연산 도구를 통해 DB에 체계적으로 접근하고 조작할 수 있는 기능
    • 제어(control): 공용 목적으로 관리되는 DB의 내용을 정확하고 안전하게 유지시키는 기능 → 데이터 무결성 유지, 보안 유지 및 권한 검사, 동시성 처리 등

데이터 언어

  • DBMS와의 통신 수단

데이터 정의어(DDL, Data Definition Language)

DB의 구조, 데이터 형식, 처리 방식 등을 정의하는 언어

  • 개념 스키마를 정의하기 위해서 주로 사용
  • 데이터베이스 설계자 또는 관리자가 주로 사용
  • 뷰 정의어: 외부 스키마를 정의하기 위한 언어
  • 기억장소 정의어: 내부 스키마를 정의하기 위한 언어

데이터 제어어(DCL, Data Control Language)

데이터 공유와 정확하고 안전한 사용을 위해 데이터 제어를 정의하고 기술하는 언어 → 데이터베이스 관리자가 사용해서 데이터 보안, 무결성, 데이터 회복, 동시성 제어 등과 관련된 명령어들을 통해서 데이터를 관리

데이터 조작어(DML, Data Manipulation Language)

DB에 대한 검색, 수정, 삽입, 삭제 등의 조작을 위한 언어

  • 절차적 데이터 조작어
    • 필요한 데이터를 어떻게 구하는지를 명시해야 하는 조작어
    • 응용 프로그램 속에 삽입되어 사용 → 한 번에 하나의 레코드를 검색하여 처리
    • one-record-at-a-time 데이터 조작어, 저수준 데이터 조작어
  • 비절차적 데이터 조작어
    • 어떻게 구하는지는 명시하지 않고, 어떤 데이터가 필요한지만을 명시
    • 선언적 언어, 고수준 데이터 조작어
    • SQL, 데이터 부속어

데이터베이스 사용자

  • 일반 사용자: 터미널에서 SQL과 같은 질의어로 DB의 정보에 단순히 접근하는 사람
  • 응용 프로그래머: 일반 호스트 언어와 데이터 부속어를 통해 DB에 접근하는 사람
  • 데이터베이스 관리자: 데이터베이스 시스템의 별도의 한 구성요소로 취급

데이터베이스 관리자(DBA, DataBase Administrator)

  • DDL과 DCL를 통해 DB를 정의하고 제어할 목적으로 접근하여 관리하는 사람 → 데이터를 여러 사람이 공용할 수 있도록 관리하고 제어하는 사람
  • DB에 대한 접근 권한 설정, 제작과 갱신, 보전과 관리, 성능 변경 요구에 대한 응답 등의 의무를 가짐 → 조직의 모든 전산 업무, DBMS, 관련 H/W와 S/W 등에 대한 상당한 지식이 필요

데이터베이스 컴퓨터

DB 관리 기능을 효율적으로 수행할 수 있도록 특화되어 설계된 하드웨어/소프트웨어 → 후위 처리기, 지능형 저장장치, 내용에 의한 참조 메모리, 병렬 처리, 데이터베이스 연산기 등을 포함

데이터 모델링

  • 현실 세계의 데이터를 데이터 모델 상의 데이터베이스 구조로 변환하는 과정
  • 실세계의 일부분을 DB 시스템이 지원하는 데이터 모델의 형태로 DB를 표현하는 과정

데이터 모델

데이터 타입, 데이터의 연산, 데이터의 의미 및 일관성 제약 조건 등의 DB 구조를 명시하기 위한 개념의 집합

개념적 모델

  • 현실 세계에서 주요 데이터를 추출하여 개념 세계의 데이터로 변환하는 과정에서의 모델 → 사용자가 데이터를 인식하는 방벙과 밀접한 개념 제공
  • 개체-관계 모델(E-R 모델)

논리적 모델(구현 모델)

  • 개념 세계의 데이터를 데이터베이스에 저장할 구조로 표현하는 과정에서의 모델
    • 개념적 모델과 물리적 모델의 중간에 위치한 모델
    • 데이터 구성에 대한 세부적인 사항은 숨기고 사용자가 이해할 수 있는 정도의 데이터 저장에 대한 개념 제공
  • 계층형 모델: 트리 형태로 표현 → 두 개체 사이의 관계: 1:n 관계 (부모-자식 관계)
  • 네트워크형 모델(망형 모델): 그래프 형태로 표현 → 링크로 표현된 데이터 간의 관계 (오너-멤버 관계)
  • 객체 지향형 모델: 데이터와 절차를 일체화된 단위로 다루는 객체지향의 개념을 잘 모아서 정의해놓은 집합 → 실세계에 존재하는 개념적 객체를 중심으로 모델링하는 방식
  • 객체 관계형 모델: 관계형 모델과 객체지향형 모델의 장점을 결합한 가장 진보된 형태 → 관계형 시스템에 새로운 객체 저장 능력을 추가한 형태
  • 관계형 모델

물리적 모델

저장장치 입장에서 데이터가 어떻게 저장되어 있는지에 대한 세부적인 사항을 기술하는 개념 제공

→ 레코드 형식, 레코드 순서, 접근 경로 등의 정보 제공

개체-관계 모델(E-R, Entity-Relationship Model)

개체 타입과 이들 간의 관계 타입을 이용해서 실세계를 사람이 이해할 수 있도록 개념적으로 표현하는 방법

→ 그래프에 기반을 둔 모델: ERD(개체 관계 다이어그램)

개체

  • 데이터로 표현하려는 실세계의 유무형의 모든 것 → 컴퓨터 파일구조에서 하나의 레코드에 대응
  • 하나 이상의 속성으로 구성
    • 속성: 데이터의 가장 작은 논리적 단위, 각 개체의 특성이나 상태를 설명하며 컴퓨터 파일구조에서 필드에 대응
    • 속성의 종류: 단일값 속성, 다중값 속성, 단순 속성, 복합 속성, 유도 속성 등

관계

  • 개체 집합 사이의 대응성(사상)을 의미
  • 개체 집합 간의 관계 정보를 표현하는 수단 → 미리 어떤 관계를 정의해놓고 주어진 값을 정의된 관계에 따라 해석하면 유용한 의미 표현 가능
  • 사상 원소의 수(mapping cardinality)에 따른 분류

관계형 모델

실세계 정보를 2차원 테이블(릴레이션)의 형식으로 표현

  • DB는 2차원 테이블의 집합으로 간주
  • 실제 데이터가 테이블 형태로 저장되는 것을 의미하지는 않음

릴레이션

  • 스키마(schema)
    • 논리적 구조: 릴레이션 이름과 속성으로 구성
    • 시간에 무관하며, 속성의 타입을 지정
  • 인스턴스(instance)
    • 어느 한 시점에 릴레이션이 가지고 있는 투플의 집합
    • 삽입, 삭제, 갱신 등을 통해 시간에 따라 변하는 릴레이션 값
  • 릴레이션의 특징
    • 투플의 유일성: 하나의 릴레이션에는 중복된 투플이 없음 (유일한 식별 가능)
    • 투플의 무순서성: 한 릴레이션에 포함된 투플들은 순서를 가지고 있지 않음
    • 속성의 무순서성: 하나의 릴레이션을 구성하는 속성들 사이에는 순서가 없음
    • 속성의 원자성: 모든 속성은 더 이상 분해할 수 없는 원자값을 가짐

투플들을 유일하게 구별하기 위한 속성 또는 속성의 집합

→ 유일성: 키 값으로 하나의 투플을 유일하게 식별

→ 최소성: 키는 모든 투플을 유일하게 식별할 수 있는 최소의 속성들로 구성

  • 슈퍼키(super key): 유일성을 만족하는 속성 또는 속성의 집합
  • 후보키(candidate key): 슈퍼키 중에서 최소성을 만족하는 것
  • 기본키(primary key): 후보키 중에서 기본적으로 사용할 키로 선택된 것
  • 대체키(alternate key): 후보키 중에서 기본키로 선택되지 않은 것
  • 외래키(foreign key)
    • 다른 릴레이션의 기본키를 그대로 참조하는 속성 또는 속성의 집합
    • 관련 있는 릴레이션 사이에서 데이터 일관성을 유지하는 수단

제약 조건

모든 릴레이션 인스턴스가 만족해야 하는 조건

  • 영역 제약 조건: 각 속성의 값은 반드시 해당 영역에 속하는 원자값이어야 함
  • 키 제약 조건: 서로 다른 두 투플도 모든 속성에 대해서 같은 속성값의 조합을 가질 수 없음
  • 개체 무결성 제약 조건: 어떠한 기본키 값도 널 값이 될 수 없음
  • 참조 무결성 제약 조건: 다른 투플에 의해 참조되는 투플은 반드시 해당 릴레이션 내에 존재해야 함

데이터베이스 설계

사용자의 요구 조건에서부터 DB 구조를 도출/구축하는 과정

데이터베이스 설계 과정

사용자 요구 사항 분석

사용자 요구 사항 목록의 문서화

  • 사용자가 의도하는 DB의 목적/용도 파악
  • 잠정적인 사용자 식별
  • 공식적인 요구 조건 명세 정의
    • 정적 정보 구조에 대한 요구 조건
    • 동적 DB 처리 요구 조건
    • 범기관적 제약 조건

개념적 설계

  • 특정 DBMS와는 무관한 개념적 데이터 모델을 사용하여 DB에 대한 개념적 구조를 생성 → 사용자의 요구 사항을 간단히 기술한 것으로, 데이터 타입, 관계, 제약 조건을 설명
  • E-R 모델: 관계형 DB를 위한 대표적 개념적 모델
  • 트랜잭션(응용 프로그램) 모델링

논리적 설계

  • 상용 DBMS를 사용해서 고수준의 개념적 구조를 목표 DBMS의 논리적 데이터 모델로 변환
    • 논리적 데이터 모델링: 개념적 구조 → 목표 DBMS의 구조(ERD로부터 관계 데이터 모델로의 변환 과정)
      • 개체 릴레이션: 개체 타입에 대한 속성은 해당 개체 릴레이션의 속성으로 포함
      • 관계 릴레이션: 연관된 개체 타입의 키 속성을 관계 릴레이션의 속성으로 포함하며, 관계에 관한 속성은 관계 릴레이션의 속성으로 포함
    • 결과: 목표 DBMS의 데이터 정의어로 기술된 스키마
  • 트랜잭션에 대한 인터페이스 설계

물리적 설계

  • 논리적 구조로부터 효율적이고 구현 가능한 물리적 DB 구조를 설계 → DB에 포함될 여러 파일 타입에 대한 저장 레코드의 양식, 순서, 접근 경로, 저장 공간의 할당 등을 표현
  • 트랜잭션에 대한 세부적인 설계

구현

  • 목표 DBMS의 데이터 정의어로 기술된 명령문을 컴파일하고 실행
    • 데이터 베이스 스키마와 빈 데이터베이스 파일 생성
    • 실제 데이터 적재
    • 데이터베이스 실행/운영
  • 트랜잭션의 구현

SQL(Structured Query Language)

  • 종합적인 데이터베이스 언어: 데이터의 정의, 조작, 제어 기능을 모두 제공
  • 온라인 단말기를 통한 대화식 사용 + 부속어(삽입어)로 사용
  • 테이블, 행, 열과 같은 용어 표현을 선호
  • 레코드 집합 단위로 연산을 수행하는 비절차적 언어
  • 데이터 정의어: SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의(CREATE)하거나 수정(ALTER) 및 제거(DROP) 하는 문장

기본적인 데이터 타입

  • 숫자
    • 정수: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
    • 실수: FLOAT, DOUBLE
    • 정형 숫자: DECIMAL(p, s), NUMERIC
  • 문자: CHAR(n), VARCHAR(n), TEXT
  • 날짜/시간: DATE, TIME, DATETIME

테이블 생성

CREATE TABLE 공급자 (
	공급자번호 CHAR(5) NOT NULL,
	공급자이름 VARCHAR(20),
	거래포인트 SMALLINT,
	도시     VARCHAR(20),
	PRIMARY KEY(공급자번호)
);

CREATE TABLE 부품 (
	부품번호  CHAR(5) NOT NULL,
	부품이름  VARCHAR(20),
	색상     CHAR(6),
	무게     SMALLINT,
	창고소재지 VARCHAR(20)
	PRIMARY KEY(부품번호)
);
CREATE TABLE 납품 (
	납품번호  CHAR(5) NOT NULL,
	공급자번호 CHAR(5),
	부품번호  CHAR(5),
	수량     INT,
	PRIMARY KEY(납품번호),
	FOREIGN KEY(공급자번호) REFERENCES 공급자(공급자번호),
	FOREIGN KEY(부품번호) REFERENCES 부품(부품번호)
);

테이블 변경

# 새로운 열의 추가
ALTER TABLE 테이블이름
	ADD 열이름 데이터타입 [NOT NULL] [DEFAULT 기본값];
ALTER TABLE 납품 ADD 납품일 DATETIME;

# 기존 열의 삭제
ALTER TABLE 테이블이름
	DROP 열이름 (CASCADE | RESTRICT);
ALTER TABLE 공급자 DROP 도시 CASCADE;

#기존 열에 대한 기본값 지정 및 삭제
ALTER TABLE 테이블이름
	ALTER 열이름 (DROP DEFAULT | SET DEFAULT 기본값);
ALTER TABLE 납품 ALTER 수량 SET DEFAULT 100;

테이블 삭제

DROP TABLE 테이블이름 [ CASCADE | RESTRICT ];
DROP TABLE 공급자 RESCRICT;
  • 명시된 기본 테이블이 시스템으로부터 제거됨
  • 기본 테이블에서 정의된 모든 인덱스와 뷰도 자동적으로 삭제됨

데이터 조작어

기본 테이블, 뷰를 조작하는 언어

# 데이터 검색(SELECT)
SELECT [ ALL | DISTINCT ] 열 리스트
FROM 테이블 리스트
[ WHERE 조건 ]
[ GROUP BY 열 [ HAVING 조건 ]]
[ ORDER BY 열 [ ASC | DESC ]]]

# 데이터 삽입(INSERT)
INSERT
INTO 테이블 [(열이름{, 열이름}*]
VALUE (열값_리스트);

# 데이터 갱신(UPDATE)
UPDATE 테이블
SET 열이름 = 산술식{, 열이름=산술식}*
[WHERE 조건];

# 데이터 삭제(DELETE)
DELETE
FROM 테이블
[WHERE 조건];

하나 이상의 기본 테이블로부터 유도되어 만들어진 가상 테이블

  • 뷰 내용은 물리적으로 구현되어 실제적으로 존재하는 것이 아니라 뷰에 대학 조작을 요구할 때마다 기본 테이블의 데이터를 이용해서 내용을 만듦
  • 데이터 검색은 기본 테이블처럼 동등한 연산으로 수행
# 생성과 제거
CREATE VIEW 공급자2
	AS SELECT 공급자번호, 거래포인트
		FROM 공급자
		WHERE 거래포인트>15;

DROP VIEW 공급자2;
  • DB 재구성(확장, 구조변경)면에서 논리적 데이터 독립성을 제공
  • 동일 데이터에 대해 동시에 여러 사용자에게 다양한 뷰를 제공
  • 특정 사용자가 관심있는 데이터에만 초점을 둠 → 사용자의 데이터 인식과 관리 단순화
  • 감춰진 데이터에 대해 보안이 자동으로 제공
  • 독자적인 인덱스를 가질 수 없고, 정의 변경 불가, 삽입/삭제/갱신 연산에 제약이 따름