- Data Models
* Data abstraction, 데이터 추상화
- DBMS의 구현 세부사항을 숨기고(suppression), 중요 기능을 강조
* Data Model
-
DB의 structure를 설명하기 위한 개념들의 집합, 이러한 구조를 조작하는 operations(작업), DB가 따라야 할 특정 constraints(제약 조건)을 의미
-
Constructs(구조체)는 DB의 구조를 정의하는 데 사용됨
-
Constructs는 일반적으로 elements(및 해당 data types) 뿐만 아니라 요소 그룹(ex. entity, record, table)과 그러한 그룹간의 relationships이 포함됨
-
Constraints(제약조건)은 유효한 데이터에 대한 일부 제한을 지정하며, 이러한 제약 조건은 항상 강제되어야 함
-
Operation은 데이터 모델의 구조를 참조하여 DB retrievals 및 updates를 지정하는 데 사용됨
<Operation 종류>
- basic model operations(insert, delete, update, retrieve)
- user-defined operations
<Data Model의 종류>
1) Conceptual (high-level, semantic(의미적), entity-based, object-based) data models
- 많은 사용자가 데이터를 인식하는(perceive) 방식과 가까운 개념 제공
2) Physical (low-level, internal(내부)) data models
- 데이터가 컴퓨터에 어떻게 저장되는지에 대한 세부 사항을 설명하는 개념 제공
- 일반적으로 최종 사용자(end users)가 아닌 컴퓨터 전문가를 위함
3) Implementation구현 (representational) data models
- 위의 두 가지 모델 사이에 속하는 개념
- 많은 상용 DBMS 구현에서 사용됨
ex) relational data model, legacy network and hierarchical model
4) Self-Describing data models, 자기 기술적
- 데이터 값과 함께 데이터의 설명을 결합
ex) XML, key-value stores, NoSQL systems
- Schemas vs Instances vs state
* Database Schema
- DB의 설명(description)
- DB 구조, data types, constraints에 대한 설명을 포함
* Schema Diagram
- 데이터베이스 스키마의 illustrative(시각적인) display

* Schema Construct, 스키마 구성요소
- 스키마의 component(구성요소) 또는 스키마 내의 객체
ex) STUDENT, COURSE

* Database State(or Database instance or occurrence or snapshot)
- 특정 시점(particular moment in time)에 DB에 저장된 실제 데이터, DB 내용을 의미함
- DB 내의 모든 데이터를 포함
-> 'instance'라는 용어는 개별 DB 구성 요소에도 적용됨. 레코드 인스턴스, 테이블 인스턴스, 엔터티 인스턴스...
* Initial Database State
- 시스템에 처음 로드되었을 때의 DB 상태를 의미
* Valid State
- DB의 구조와 constraints을 만족하는 상태를 의미
<Schema와 State의 차이점>
- DB Schema는 매우 드물게 변경됨
- DB State는 DB가 업데이트될 때마다 변경됨
- Three-Schema Architecture
1) Internal schema (내부 스키마)
- 내부 수준에서 물리적 저장 구조와 접근 경로(ex. index)를 설명
-> 일반적으로 physical data model 사용
2) Conceptual schema (개념적 스키마)
- 개념적 수준에서 사용자 커뮤니티를 위한 전체 DB의 구조와 제약 조건을 설명
-> Logical data model 사용
3) External schema (외부 스키마)
- 외부 수준에서 다양한 사용자 views(뷰)를 설명, 정의
-> 각 외부 스키마는 DB의 일부분을 설명
-> 보통 Logical data model 사용
*View : 하나 이상의 table로부터 선택된 데이터의 가상 table

- 스키마 수준 간 매핑은 요청과 데이터를 변환하기 위해 필요함
-> 프로그램은 외부 스키마를 참조하며, DBMS에 의해 실행을 위해 내부 스키마로 매핑됨
-> 내부 DBMS 수준에서 추출된 데이터는 사용자의 외부 뷰에 맞게 재구성됨 (예: SQL 쿼리 결과를 웹 페이지에 표시하기 위해 포맷팅)
- Data Independence
* Logical Data Independence
- conceptual schema를 변경하더라도 external schema와 관련된 애플리케이션 프로그램을 변경할 필요가 없는 능력
* Physical Data Independence
- internal schema를 변경하더라도 conceptual schema를 변경할 필요가 없는 능력
external
|
conceptual (logical)
|
internal (physical)
- DBMS Languages
* Data Definition Language(DDL)
- DBA와 데이터베이스 설계자가 데이터베이스의 개념적 스키마를 정의하는 데 사용됨
- 많은 DBMS에서는 DDL을 사용하여 내부 스키마와 외부 스키마(뷰)도 정의함
- 일부 DBMS에서는 저장 정의 언어(SDL)와 뷰 정의 언어(VDL)가 내부 스키마와 외부 스키마를 정의하기 위해 별도로 사용됨
-> SDL은 일반적으로 DBA와 데이터베이스 설계자에게 제공되는 DBMS 명령을 통해 구현됨
* Data Manipulation(조작) Language(DML)
- 데이터베이스의 검색(retrievals) 및 업데이트를 지정하는 데 사용됨
- DML 명령(데이터 하위 언어)은 COBOL, C, C++, Java와 같은 범용 프로그래밍 언어(호스트 언어)에 내장될 수 있음
-> 프로그래밍 언어에서 DBMS에 접근하기 위한 함수 라이브러리도 제공될 수 있음
- 또는 독립 실행형 DML 명령(stand-alone DML commands)을 직접 적용할 수도 있으며, 이를 쿼리 언어라고 부름
<DML의 종류>
-
고수준 or 비절차적 언어(= declarative languages, 선언형 언어)
-> 집합 지향적이며 데이터를 어떻게 가져올지가 아닌 어떤 데이터를 가져올지를 지정함
-> 관계형 언어인 SQL을 포함함
-
저수준 or 절차적 언어
-> 이 언어는 반드시 프로그래밍 언어에 내장되어 사용됨
-> 데이터를 한 번에 하나의 레코드씩 검색함
- DBMS Programming Language Interfaces
- 프로그래밍 언어에 DML을 내장하기 위한 프로그래머 인터페이스
* Embedded Approach
: ex) embedded SQL(C, C++ 등에서 사용), SQLJ(Java용)
* Procedure Call Approach
-> DB와 상호작용하기 위해 API를 사용하는 방식 (쉽게 연결 가능, 범용적 사용가능, 유연성 높음)
-> API를 통해 DB 연결을 관리, 쿼리를 실행함
-> 자주 사용하는 방식!
: ex) Java용 JDBC(Java Database Connectivity), 기타 프로그래밍 언어에서 사용하는 ODBC(Open Database Connectivity)와 같은 API(응용 프로그램 인터페이스)
* Database Programming Language Approach
: ex) ORACLE의 PL/SQL, SQL을 기반으로 한 프로그래밍 언어. 이 언어는 SQL과 그 데이터 유형을 필수 구성 요소로 통합함
* Scripting Langauges
: ex) PHP(클라이언트 측 스크립팅), Python(서버 측 스크립팅)은 데이터베이스 프로그램 작성에 사용됨
< User-Friendly DBMS Interfaces>
-
메뉴 기반 (웹 기반):
웹에서 탐색할 때 많이 사용됨
-
폼 기반:
양식을 작성하는 데 익숙한 비전문 사용자들을 위해 설계됨
-
그래픽 기반:
포인트 앤 클릭(Point and Click), 드래그 앤 드롭(Drag and Drop) 등 사용
스키마 다이어그램에서 쿼리를 지정할 수 있음
-
자연어:
영어와 같은 자연어로 요청 작성
-
위의 방식들의 조합:
예를 들어, 웹 데이터베이스 인터페이스에서는 메뉴와 폼을 광범위하게 사용함
< Other DBMS Interfaces>
-
자연어: 자유 텍스트를 쿼리로 사용
-
음성: 음성으로 쿼리를 입력하고 응답을 출력
-
웹 브라우저: 키워드 검색을 통한 쿼리
-
매개변수 기반 인터페이스: 예를 들어, 은행 직원이 기능 키를 사용하는 경우
-
DBA를 위한 인터페이스:
사용자 계정 생성
권한 부여
시스템 매개변수 설정
스키마 또는 접근 경로 변경
< Typical DBMS Component Modules>

- Centralized and Client-Server DBMS Architectures
* Centralized DBMS, 중앙 집중식 DBMS
-
모든 것을 하나의 시스템에 통합함 – DBMS 소프트웨어, 하드웨어, 애플리케이션 프로그램, 사용자 인터페이스 처리 소프트웨어를 포함
-
사용자는 원격 터미널을 통해 연결할 수 있지만, 모든 처리는 중앙 사이트에서 수행됨
< A Physical Centralized Architecture>

- Basic 2-tier Client-Server Architectures
< Logical 2-tier client server architecture>

* Client
- 다양한 서버 자원에 접근하고 활용할 수 있도록 클라이언트 소프트웨어 모듈을 통해 적절한 인터페이스 제공
- 클라이언트는 디스크가 없는 기기이거나, 클라이언트 소프트웨어만 설치된 디스크가 있는 PC 또는 워크스테이션일 수 있음
- 클라이언트는 LAN(로컬 네트워크), 무선 네트워크 등 어떤 형태의 네트워크를 통해 서버에 연결됨
* DBMS Server
-
클라이언트에 DB query 및 transaction service를 제공
-
관계형 DBMS 서버는 종종 SQL 서버, 쿼리 서버, 또는 트랜잭션 서버라고 불림
-
클라이언트에서 실행되는 애플리케이션은 API(응용 프로그램 인터페이스)를 사용해 표준 인터페이스를 통해 서버 데이터베이스에 접근함
-
ODBC: Open Database Connectivity 표준
-
JDBC: Java 프로그래밍을 위한 접근 인터페이스
< Three Tier Client-Server Architecture>
-
웹 애플리케이션에서 흔히 사용됨
-
중간 계층(intermediate layer)은 Application Server 또는 Web Server라고 불림
-> 웹 연결 소프트웨어와 비즈니스 로직 부분을 저장하며, 데이터베이스 서버에서 데이터를 접근하기 위해 사용됨
-> 데이터베이스 서버와 클라이언트 간에 부분적으로 처리된 데이터를 전달하는 중계 역할을 함
-
Three Tier 아키텍처는 보안을 강화할 수 있음:
-> 데이터베이스 서버는 중간 계층을 통해서만 접근 가능
-> 클라이언트는 데이터베이스 서버에 직접 접근할 수 없음
-> 클라이언트는 사용자 인터페이스와 웹 브라우저를 포함함
-> 클라이언트는 일반적으로 웹에 연결된 PC 또는 모바일 장치임

- Classification of DBMSs
-
사용되는 데이터 모델에 따른 분류
-> 레거시 시스템: 네트워크형, 계층형
-> 현재 사용되는 모델: 관계형, 객체 지향형, 객체-관계형
-> 최신 기술: key-value 저장 시스템
-> NoSQL 시스템: 문서 기반, 열 기반, 그래프 기반, 키-값 기반, 네이티브 XML DBMS
-
기타 분류
-> 단일 사용자 (주로 개인용 컴퓨터에서 사용) vs. 다중 사용자 (대부분의 DBMS)
-> 중앙 집중형 (하나의 컴퓨터와 데이터베이스 사용) vs. 분산형 (여러 컴퓨터와 여러 데이터베이스 사용)