데이터 모델, 스키마, 인스턴스데이터 모델데이터 모델의 범주스키마 vs. 인스턴스데이터베이스 스키마 vs. 데이터베이스 상태데이터 모델의 역사세 개의 스키마 아키텍처데이터 독립성스키마, 인스턴스와 상태DBMS 언어: DDLDBMS 언어: DMLDBMS 인터페이스데이터베이스 시스템 환경DBMS 컴포넌트 모듈주요 내용부록다른 DBMS 인터페이스중앙집중식 DBMS기본 2-티어 클라이언트-서버(C/S) 아키텍처DBMS를 위한 2-티어 클라이언트-서버(C/S) 아키텍처웹 응용 프로그램을 위한 3-티어 및 n-티어 아키텍처데이터베이스 시스템 유틸리티
데이터 모델, 스키마, 인스턴스
데이터 모델
- 데이터 모델
- 데이터 추상화를 달성하기 위한 필요한 수단을 제공함
- 데이터베이스의 구조와
- 해당 구조를 조작하는 데 사용되는 연산
- 그리고 데이터베이스가 준수해야 하는 특정 제약 조건을 설명하는 개념 집합을 나타냄
- 구체적으로 구조는
- 데이터 유형, 관계 및 제약 조건을 나타냄
- 구체적으로 연산은
- 데이터베이스 구조를 검색하고 업데이트하는 데 사용됨
- 기본 작업 및 사용자 정의 작업이 포함됨
- 기본 작업: 일반적인 삽입, 삭제, 업데이트
- 사용자 정의 작업:
STUDENT
개체에 적용되는COMPUTE_GPA
또는INVENTORY
개체에 적용되는UPDATE_INVENTORY
- 데이터 모델 구조 및 제약 조건
- 구조를 정의하는 데 사용되는 구성 요소
- 일반적으로 구조는
- 엔터티, 레코드와 같은 요소 (및 해당 데이터 유형) 및 이러한 그룹들 사이의 관계를 포함함
- 제약 조건은 "유효한" 데이터에 대한 일부 제한 사항을 지정함
- 이러한 제약 조건은 "언제나" 적용되어야 함
- 그렇지 않으면 데이터는 지정된 데이터 모델을 준수한다고 할 수 없음
데이터 모델의 범주
- 개념적 (고수준, 의미론적) 데이터 모델
- 많은 (최종) 사용자가 데이터를 인식하는 방식과 유사한 개념을 제공함
- 엔터티, 속성, 관계와 같은 개념을 제공 (예: ER 모델)
- 물리적 (저수준, 내부) 데이터 모델
- 데이터가 컴퓨터 저장 매체 (일반적으로 HDD 또는 RAM/SSD)에 저장되는 방식의 세부 정보를 설명하는 개념을 제공함
- 파일, 레코드 형식 (예: 행 지향/열 지향) 및 액세스 경로 (예: 기본/비기본/클러스터링 인덱스)를 포함함
- 이러한 모델은 일반적으로 DBMS 설계 및 관리 설명서를 통해 임의적으로 지정됨
- 구현 (표현, 논리) 데이터 모델
- 위의 두 가지 극단 사이에 개념을 제공함
- 많은 상업용 DBMS 구현에서 사용됨 (예: 관계형 데이터 모델, 이 강의의 중점), 또는 네트워크/계층형 모델
- 자기 지칭 데이터 모델
- 데이터 설명과 데이터 값의 결합: 예를 들어, XML, 키-값 스토어 및 일부 NoSQL 시스템 (예: MongoDB/HBase)
스키마 vs. 인스턴스
- 데이터베이스 스키마 (내연 또는 메타데이터):
- 데이터베이스의 설명: DBMS 카탈로그에 저장됨
- 데이터베이스 설계 중에 지정되지만 자주 변경되지는 않음
- 때로는 특정 목적을 위해 스키마 진화가 가능함
- 데이터베이스 구조, 데이터 타입 및 데이터베이스에 대한 제약 조건에 대한 설명을 포함함.
- 스키마 구성: 스키마의 구성 요소 또는 스키마 내의 객체
- 예:
STUDENT
또는COURSE
- 데이터베이스 상태 (또는 외연)
- 특정 시간에 데이터베이스에 저장된 실제 데이터.
- 데이터베이스의 모든 데이터를 포함함.
- 또한 데이터베이스 인스턴스 (또는 발생 또는 스냅샷)라고도 함
- “인스턴스”라는 용어는 개별 데이터베이스 구성 요소에도 적용됨.
- 예를 들면, 레코드 (엔터티의 인스턴스?!), 테이블 인스턴스, 엔터티 인스턴스
데이터베이스 스키마 vs. 데이터베이스 상태
- 데이터베이스 상태
- 특정 시간의 데이터베이스 내용을 참조함
- 초기 데이터베이스 상태
- 데이터베이스가 “DBMS에 처음 로드될 때”(또는 “초기 데이터로 채워질 때”)의 상태를 참조함
- 유효한 상태
- 데이터베이스의 구조와 제약 조건을 만족하는 상태를 참조함
- DBMS는 데이터베이스의 모든 상태가 '유효한' 상태인지 확보하는 데 부분적으로 책임져야 함
데이터 모델의 역사
세 개의 스키마 아키텍처
- 파일 처리 방식(대비하여) 데이터베이스 접근법의 처음 세 가지 (4개 중) 특성을 지원하기 위해 제안되었음
- C1) 스키마를 저장하기 위해 카탈로그를 사용하여 self-describing으로 만듬
- C2) 프로그램-데이터 또는 프로그램-연산 독립성
- C3) 다양한 사용자 뷰의 지원
- 데이터베이스 시스템 조직을 설명하는 데 유용함
- 목표: 사용자 응용 프로그램을 물리적 데이터베이스에서 분리하는 것임
- 세 가지 레벨에서 DBMS 스키마를 정의함
- 내부(= 물리적) 스키마 (내부 레벨에서)
- 물리적 저장 구조와 접근 경로(예: 색인)를 설명하기 위해 사용됨
- 대체로 물리적 데이터 모델을 사용함
- 개념적(= 논리적) 스키마 (개념 레벨에서)
- 사용자 커뮤니티 전체에 대한 데이터베이스의 구조와 제약 조건을 설명하기 위해 사용됨
- 물리적 저장 구조의 세부 사항을 숨기고 데이터베이스 구성 요소를 설명하는 데 중점을 둠
- 개념적(예: ER) 또는 구현(예: 관계형) 데이터 모델을 사용함
- 외부(= 뷰 레벨) 스키마 (외부 레벨에서)
- 다양한 사용자 뷰를 설명하기 위해 사용됨. 다양한 사용자 응용 프로그램을 의미
- 대체로 개념 스키마와 동일한 데이터 모델을 사용함
- 각 외부 스키마는 특정 사용자 그룹이 관심을 갖는 데이터베이스의 "부분"을 설명하고 해당 사용자 그룹에게 데이터베이스의 나머지 부분을 숨깁니다.
- 스키마 레벨 간에는 "요청"과 "데이터"를 변환하기 위한 매핑(용어에 따른)이 필요함
- 세 가지 스키마는 데이터의 설명일 뿐임
- 실제 데이터는 물리적 레벨에서만 저장됨
- 각 (사용자) 그룹은 자신의 외부 스키마를 참조함. 즉, 하나의 (사용자) 그룹은 다른 (사용자) 그룹의 외부 스키마를 알 수 없음
- 외부 스키마에서 요청한 실제 데이터 객체에 액세스하려면 DBMS는 저장된 데이터베이스에서 처리하기 위해
- (i) 외부 스키마에 대한 주어진 요청을
- (ii) 개념 스키마에 대한 요청으로
- (iii) 내부 스키마에 대한 요청으로 변환해야 함
- 그런 다음 내부 레벨에서 추출된 데이터는 외부 레벨에서의 원래 요청과 일치하도록 "재포맷"됨
- 예) 웹 페이지에 표시하기 위한 SQL 쿼리 결과 포맷팅
데이터 독립성
- 데이터베이스 시스템의 한 수준에서 스키마를 변경하더라도 다음 상위 수준의 스키마를 변경할 필요가 없는 능력을 말함
- 논리 데이터 독립성
- 외부 스키마와 관련된 응용 프로그램을 변경할 필요 없이 개념적(또는 논리적) 스키마를 변경할 수 있는 "능력"을 의미함
- 물리 데이터 독립성
- 개념적(또는 논리적) 스키마를 변경할 필요 없이 내부(또는 물리적) 스키마를 변경할 수 있는 "능력"을 의미함
- 예를 들면, 파일 구조가 재구성될 때나 데이터베이스 성능을 향상시키기 위해 새로운 인덱스가 생성될 때 내부 스키마가 변경될 수 있음 (기본 인덱스 + 보조 인덱스 포함)
- 데이터 독립성을 완전히 지원하는 DBMS에서 하위 수준의 스키마가 변경되면 이 스키마와 상위 수준 스키마 간의 "매핑"만 변경되면 됨
- 상위 수준의 스키마 자체는 변경되지 않음
스키마, 인스턴스와 상태
DBMS 언어: DDL
- 데이터 정의 언어 (DDL)
- 데이터베이스(DB)의 개념적/내부 스키마 및 두 스키마 간의 매핑을 지정하기 위해 사용됨
- 많은 현대의 관계형 DBMS에서는 엄격한 구분이 없으며 DBA와 DB 디자이너 모두에게 사용됨
- 명확한 구분이 있는 일부 DBMS에서
- 내부 스키마에 대한 스토리지 정의 언어: 현대 DBMS에는 없음
- DBA와 DB 디자이너에게 제공된 DBMS 명령을 통해 실현됨
- 사용자 뷰에 대한 뷰 정의 언어: 미리 정의된 쿼리의 결과를 저장하여 SQL(구조적 쿼리 언어)에 의해 처리됨
DBMS 언어: DML
- 데이터 조작 언어 (DML)
- 데이터 검색 및 업데이트를 지정하는 데 사용됨
- DML 명령어(데이터 부언어라고도 함)는 일반적인 목적의 프로그래밍 언어(호스트 언어라고도 함)에 포함될 수 있음
- : C, C++, 또는 Java.
- 프로그래밍 언어에서 DBMS에 액세스하기 위해 함수 라이브러리도 제공될 수 있음
- 예) ODBC, JDBC
- 두 가지 유형이 있음
- 고수준 또는 비절차적 언어 (예: SQL): 선언적이며, 왜냐하면 검색할 데이터(what)를 지정하기 때문에 어떻게(how) 검색할지를 지정하지 않기 때문임
- 독립적인 방법(예: SQL*PLUS)으로 사용됨: 쿼리 언어
- 함수 호출을 통해 프로그래밍(호스트) 언어(C++/Java)에서 사용됨
- 한 번에 설정 또는 집합 지향 DML이라고도 함
- 단일 DML 문에서 레코드 세트를 검색한 다음 각 레코드를 처리할 수 있음
- 저수준 또는 절차적 언어
- 프로그래밍 언어에 포함되어야 함
- 한 번에 하나의 레코드를 검색함. 여러 레코드의 경우 루프와 같은 구조가 필요
- record-at-a-time DML이라고도 함
- 각 레코드를 따로 검색하고 looping을 통해 처리
DBMS 인터페이스
- 독립적인 쿼리 언어 인터페이스: 예, SQL*Plus
- 프로그래밍 언어에 DML을 포함하기 위한 프로그래머 인터페이스
- 사용자 친화적 인터페이스
- 메뉴 기반, 양식 기반, 그래픽 기반 (예: SQLDeveloper) 등
- 모바일 인터페이스
- 모바일 (예: 은행) 앱을 사용하여 사용자가 트랜잭션을 수행할 수 있도록 하는 인터페이스
- 프로그래밍 언어에 DML을 포함하기 위한 프로그래머 인터페이스:
- 내장 접근법: 예) 내장 SQL(프로그래밍 언어 C, C++ 등용), SQLJ (Java용)
- 프로시저 호출 접근법: 예) Java용 JDBC, ODBC는 API로 다른 프로그래밍 언어용
- 데이터베이스 프로그래밍 언어 접근법: 예) ORACLE은 PL/SQL을 가지고 있으며, 이는 SQL을 기반으로 한 프로그래밍 언어임. 이 언어는 SQL과 그 데이터 타입을 핵심 구성요소로 통합함
- 스크립팅 언어: PHP (클라이언트 측 스크립팅)와 Python (서버 측 스크립팅)은 데이터베이스 프로그램 작성에 사용됨
데이터베이스 시스템 환경
DBMS 컴포넌트 모듈
- 일반적으로 디스크에 저장되는 몇 가지 요소
- 저장된 데이터베이스
- DBMS 카탈로그
- 디스크 접근은 운영 체제에 의해 제어되며, 디스크 읽기/쓰기를 스케줄링함
- 많은 DBMS는 자체 버퍼 매니저를 가지고 있어 디스크 읽기/쓰기를 스케줄링함
- 구체적으로, 버퍼 저장소의 관리는 상당한 효과를 가짐. 디스크 I/O를 줄이면 성능이 크게 향상됨
- DBMS의 고수준 저장 데이터 매니저(모듈)는 디스크에 저장된 DBMS 정보에 대한 접근을 제어함
- 그 정보가 데이터베이스의 일부인지, 아니면 카탈로그의 일부인지에 관계없이
주요 내용
- 데이터 모델, 스키마, 상태/인스턴스
- 데이터 모델의 카테고리
- 개념적, 논리적, 물리적, 자기 기술적
- 네트워크/계층형 모델
- 세 가지 스키마 아키텍처와 데이터 독립성
- 외부 뷰, 개념 스키마, 내부 스키마 및 매핑
- 데이터베이스 언어와 인터페이스
- DDL & DML
- 전형적인 DBMS 모듈
- 데이터베이스 관리 시스템의 분류
부록
다른 DBMS 인터페이스
- 자연어(NL): 쿼리로서의 자유로운 텍스트
- NL을 SQL로 자동 변환하기 위한 많은 작업이 진행되고 있음
- 음성: 입력 쿼리와 출력 응답
- 키워드 검색이 가능한 웹 브라우저
- 파라메트릭 인터페이스, 예: 기능 키를 사용하는 은행 창구 직원
- DBA를 위한 인터페이스
- 사용자 계정 생성, 권한 부여
- 시스템 파라미터 설정
- 스키마나 액세스 경로 변경
중앙집중식 DBMS
- DBMS 소프트웨어, 하드웨어, 응용 프로그램, 사용자 인터페이스 처리 소프트웨어 등 모든 것을 하나의 시스템으로 통합: "옛 아키텍처"
- 사용자가 원격 터미널을 통해 연결할 수 있더라도 모든 처리는 중앙 사이트에서 이루어짐
기본 2-티어 클라이언트-서버(C/S) 아키텍처
- 특수화된 기능을 갖는 서버(프린트 서버, 파일 서버, DBMS 서버, 웹 서버, 이메일 서버 등)들에 여러 클라이언트 PC가 연결될 수 있음
- 클라이언트는 필요할 때 이 특수화된 서버에 액세스할 수 있음
- 클라이언트 기계는 이 서버들을 이용하기 위해 사용자에게 적절한 인터페이스를 제공하며, 로컬 애플리케이션을 실행하기 위한 로컬 처리 능력을 갖추고 있음
DBMS를 위한 2-티어 클라이언트-서버(C/S) 아키텍처
- 클라이언트 측: 사용자 인터페이스와 응용 프로그램을 제공; 서버에서 쿼리나 트랜잭션 수행
- 클라이언트에서 실행되는 응용 프로그램은 API를 사용하여 표준 인터페이스를 통해 서버 데이터베이스에 액세스함
- Open Data Base Connectivity (ODBC) 표준
- Java Data Base Connectivity (JDBC) 표준을 사용하여 Java 액세스
- (DBMS) 서버 측: 클라이언트에게 데이터베이스 쿼리 및 트랜잭션 서비스를 제공한다.
- 관계형 DBMS 서버는 종종 SQL 서버로 불림
- 또한 쿼리 서버나 트랜잭션 서버로도 불림
- SQL: 클라이언트와 서버 사이의 논리적 구분 지점
웹 응용 프로그램을 위한 3-티어 및 n-티어 아키텍처
- 많은 웹 응용 프로그램은 중간 계층을 추가하는 3-티어 아키텍처를 사용함
- DB 서버에서 데이터에 액세스하기 위한 비즈니스 규칙(절차/제약사항)을 저장 및 실행함
- DB 요청을 전달하기 전에 클라이언트의 자격 증명을 확인함
- DB 서버에서 처리된 데이터를 클라이언트에 전달하는 수단(수도관)으로 작동함
데이터베이스 시스템 유틸리티
- 다음과 같은 기능을 수행하기 위함
- 로딩: 기존 데이터(예: 텍스트/순차) 파일을 DB에 로드하는 데 사용됨
- 작동 방식: 데이터 파일의 원본(현재) 포맷과 대상(원하는) 데이터베이스 파일 구조 > 유틸리티 > 데이터를 재형식화하고 DB에 저장함
- 변환 도구: 기존 소스/대상 DB 저장 설명(내부 스키마)이 주어지면 로딩 프로그램을 생성함
- 백업: 기존 DB의 백업 복사본을 생성함
- 전체 DB를 테이프나 기타 대용량 저장 매체에 덤프함 (보관용)
- 이유? 디스크 고장시 DB를 복원하기 위해서
- 증분 백업도 가능하지만 복잡함
- 데이터베이스 저장 재구성: 데이터베이스 파일을 다른 파일 조직으로 재구성하고 더 나은 성능을 위한 새로운 액세스 경로를 생성하는 데 사용됨
- 성능 모니터링: DB 사용량을 모니터링하고 DBA에게 파일 재구성이나 인덱스 변경을 고려하여 성능을 개선하기 위한 통계를 제공함