Into the Database
- 전통적인 데이터베이스들에 비해 다양한 데이터들을 조직화, 데이터 베이스화 시켜서 사용하고 있다.
- 최근은 하둡, NoSQL 등을 사용한다.
Data
- 함축적인 의미를 가지면서 기록이 되는 알려진 사실
- 이름, 주소, 등
Database
DBMS
NoSQL
- 비정형 데이터를 잘 처리하기 위해 만들어 졌다.
- 고성능 및 확장성을 가진다.
- SQL 과 병행해서 사용한다.
MongoDB
- 값과 키를 같이 저장한다.
- JSON과 유사한 문서 구조를 가진다.
Hadoop
- MapReduce를 구현, 빅데이터를 위한 모델
MapReduce
- 병렬과 분산처리
- 데이터를 여러 노드에 분산저장, 이들을 매핑하고 계산 한뒤 취합해서 결과로 산출한다.
- 이를 인메모리에서 동작시키는것이 아파치 스파크이다.
DB System
DB Application
- Query / Transaction 을 통해 DB와 의사소통한다.
- Transaction : 더이상 나눌수 없는 단위의 작업
- 허용되지 않은 사용자가 데이터에 접근하는것을 막는다.
- DB에 대한 요구사항을 반영해야 한다.
DBMS
- 데이터베이스의 타입, 구조, 제한을 정의 할수 있어야 한다.
- 보조 저장장치에 데이터베이스를 생성 혹은 로딩해올수 있어야 한다.
- 데이터베이스를 조작할수 있어야 한다.
- 많은 사람들이 사용할수 있어야 한다.
Database
- 관련성 있는 엔티티 ( Entity ) 로 구성된다.
- 파일로 저장됨
- 각각의 파일은 동일한 타입의 레코드를 저장.
데이터베이스 디자인
- 요구사항 설계 및 분석
- 디자인 한다.
- DBMS의 데이터 모델을 논리적으로 디자인한다.
- DB를 저장하기 위한 물리적 디자인을 한다.
- Oracle 등을 사용한다면 3 과 4를 한번에 진행하는것과 같다.
DB System
Self-decribing
- DB System은 DB 자체 뿐만 아니라 구조, 타입, 제한 의 완벽한 정의를 가지고 있다.
- EX. 카탈로그 : 특정 DB의 메타데이터 ( 설명 ) 이 들어있다.
프로그램과 데이터를 분리한다.
- DBMS Access program을 수정하지 않더라도 데이터 구조나 저장 방식을 변경할수 있다.
데이터 추상화
- 프로그램 데이터와 프로그램 동작을 분리한다.
- 디테일한 데이터 관리는 신경쓰지 않아도 된다.
다양한 관점을 제공
여러 유저들의 데이터 공유
- 여러 유저가 동시에 데이터를 가져오고 업데이트 할수 있도록 한다.
- Concurrency Control을 통해 일어난다.
DB를 사용하는 이점
중복제어
- 데이터 스토리지를 개발/유지 하는 수고를 줄인다.
접근제어
- 권한이 없는 접근을 차단한다.
- 보안성을 제공한다.
프로그램 객체의 영속적 저장소를 제공한다.
- 객체지향적 DBMS들이 프로그램 객체를 영속적으로 만들어준다.
효율적인 쿼리를 위한 저장 구조를 제공한다.
DB를 사용하는 단점
돈이 많이 든다.
- 초기 비용이 많이 든다.
- 보안, 동시성, 복구 등을 구현하기 위해 오버헤드가 발생한다.
필요하지 않을수 있다.
- 데이터베이스나 앱이 간단하고 잘 정의되어 있을때
- 동시접근이 필요 없을때
DBMS를 실행하기 어려울때
- 제한된 용량을 가진 임베디드 시스템에서는 사용하기 어렵다.
데이터 모델
- 데이터 추상화를 달성하는 데 필요한 수단 제공
- 구조
- 연산
- 조회, 갱신, 삭제, 추가, 기타 사용자 지정 연산
- 제약조건
분류
Conceptual data model / High-Level
Physical data model / Low-Level
- Conceptual하게 표기된것을 물리적으로 구현하는 모델
- 구체적으로 어떻게 저장될지를 설명한다.
Implementation model / Logical
자기설명 데이터 모델
데이터베이스 스키마
- 데이터베이스의 설명
- DBMS 카탈로그에 저장된다.
- 데이터베이스 구조, 데이터 타입, 제약사항이 적혀있다.
데이터베이스 상태 ( State )
- 한 시점에 저장되어 있는 실제 데이터
- 데이터베이스 인스턴스 / 스냅샷 으로도 부른다.
- 초기 데이터베이스 상태 : DBMS에 초창기에 로딩된 데이터베이스 상태
- 올바른 상태 : 구조와 제한을 만족하는 상태, DBMS가 책임지고 보장한다.
Three-Schema Architecture
- 프로그램과 데이터간의 독립성을 보장하기 위한 구조
- 아래 레벨에 변경이 있더라도,
윗 레벨에 요소들이 변경의 영향을 받지 않는다면 바꾸지 않아도 된다.
- 각각의 레벨에 독립적으로 돌아간다.
Internal Schema / Physial
- 물리적 스토리지에 저장되는 방식, 접근 경로
- 데이터베이스 관점
Conceptual / Logical Schema
- 전체 데이터베이스에 대한 구조와 제한을 유저에게 제공한다.
- DBMS에서의 관점
External / View Level Schema
- 사용자 또는 응용 프로그램의 관점
- 여러개의 외부 스키마( 관점 )를 가질수 있다.
맵핑
- 각각의 스키마 레벨 사이는 요청과 데이터의 변환이 필요하다.
- 실질적인 데이터는 Physical level에서만 저장이 된다.
- 각자 영향 받는 부분만 변경하면 된다.
Logical data independence
- Logical 구조가 바뀌어도 External에 영향이 없으면 바꿀 필요가 없다.
Physical data independence
- Physical 구조가 바뀌어도 Logical에 영향이 없으면 바꿀 필요가 없다.
- Logical Level에서 변화가 있으나, External에서는 바뀔 필요가 없다.
- Grade가 Score로 바뀌는 등 영향이 가면 External도 변경이 필요할수 있다.
데이터베이스 언어와 인터페이스
DDL : Data Definition Language
- 데이터를 정의하기 위한 언어
- CREATE TABLE, ADD COLUMN
DML : Data Manipulation Language
DML 유형
- 고수준
- 선언적
- 쿼리 언어 ( SQL )
- 프로그래밍 언어에 함수 호출로 사용되기도 한다.
- 저수준 / 프로시저 언어
- 프로그래밍 언어에 내장되어 있어야 한다.
- 한번에 하나의 레코드를 가져옴, 여러개 가져오려면 루프가 필요하다.
DBMS 인터페이스
/* Begin program */
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION
host_name character_string(20)
host_emp_number integer
EXEC SQL END DECLARE SECTION
EXEC SQL WHENEVER SQLERROR STOP
EXEC SQL CONNECT frans
/* Formulate query, something like: */
EXEC SQL SELECT name emp_number
INTO host_name host_emp_number
FROM employees
WHERE emp_number = 10001
/* Print host_name and host_emp_number */
EXEC SQL DISCONNECT
/* End program */
- GUI 기반
- 모바일 인터페이스
- 프로시저 호출
- JDBC / ODBC
- 다른 언어의 API로 사용
- 데이타베이스 프로그래밍 언어
- 스트립트 언어