
DB에서 data는 text를 의미한다. Image나 Video는 아직 data로 포함되지 않는다.
Structured data, Semi structured data, Unstructured data
Structured data - (계층적 모델, 네트워크 모델, 관계형 데이터 모델) 특정 데이터 모델을 정의하기 위해
모델링을 하고, 그 기반으로 데이터를 구축한 모델
semi structured data - 스키마 형태의 테이블을 만든 모델
Unstructured data - 주제없이 텍스트로 나열된 데이터
Structured data base modeling - Relational data model(Oracle, MySql, MSSql, PostgreSQL)
정보 시스템들 (MIS, ERP, CRM, SCM 등...)
한 조직의 여러응용 시스템들이 함께 사용할 수 있도록 통합, 저장된 데이터의 집합
통합된 데이터, 저장된 데이터, 운영 데이터, 공용 데이터(Shared data)
통합 저장된 운영 데이터로서의 특징
실시간 접근성, 지속적인 변화, 동시 사용, 내용 참조

데이터의 방대한 집합체를 유지관리하고 이용하는데 도움을 주도록 설계된 소프트웨어
데이터의 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템 (CRUD 사용)
데이터 정의기능
데이터 모델과 데이터베이스를 물리적 저장 장치에 저장하는데 필요한 명세 포함
논리적 구조와 물리적 구조의 Mapping을 명세
데이터 조작 기능
사용자와 데이터베이스 사이의 인터페이스를 위한 수단 제공
사용하기 쉽고 자연스러워야 하며, 명확하고 완전해야 함
공용이라는 이유로 접근이나 처리가 비 효율적이면 안됨
데이터 제어 기능
데이터 갱신, 삽입, 삭제 작업이 정확시 실행되며, 무결성제공
보안과 권한 검사
동시 사용자에 대한 병행성 제어(동시성 제어)
파일 시스템
어찌 되었든 너무 큰 데이터를 메모리에 올릴수는 없다(10TB 등..)
또한 여러명의 사용자가 동시에 데이터를 사용할 때 상호 모순적인 수정을 방지하기 어렵다
데이터 변경이 일어나는 동안 시스템이 고장나는 경우, 데이터 무결성을 보장하기 어렵다
DBMS
수 PB의 데이터에 대한 수천명의 동시접속을 캡슐화해서 처리해준다
파일에서 어려운 일련의 작업을 쉽게 해준다
DBMS는 저장될 데이터를 데이터 모델 형식으로 정의
데이터 모델 
디스크 수준에서 데이터 내역 감추고 고 수준으로 데이터명세.
데이터의 관계, 접근과 그 흐름에 필요한 처리과정에 관한 추상화된 모형
현실 세계의 정보들을 컴퓨터에 표현하기 위해 단순화, 추상화 하여 체계적으로 표현한 개념적 모형
데이터 구조, 데이터에 대한 작업, 데이터에 대한 제약조건
주요 데이터 모델
관계 모델, 반정형 데이터 모델
기타 데이터 모델
-네트워크, 계층형, 객체 지향- 데이터 모델
DBMS의 데이터는 3단계의 추상화로 표현된다
논리적 데이터 독립성 : 데이터의 논리적인 구조, 저장방식/공간의 변화로 부터 보호
물리적 데이터 독립성 : 디스크 파일 내부에서 데이터가 실제로 어떻게 배치되어 있는지 등의 정보를 감춤
스키마(Scheme) : 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계와 제약조건을 형식 언어로 정의한 구조
스키마는 개체(Entity) , 개체의 특성을 나타내는 속성(Attribute) , 개체 사이에 존재하는 관계(Relation) , 이들이 유지해야 하는 제약조건(Constraint) 을 기술
데이터베이스로부터 정보를 얻는 방식의 쉬움 정도에 따라 가치가 좌우됨.
데이터를 얻기 위한 일반적인 질문(Query)의 전산학적 구현
질의를 만들수 있는 질의어를 제공
DML : 데이터 조작어
정의된 데이터베이스에 입력된 데이터를 조회, 수정, 삭제, 입력하는 역할
DDL : 데이터 정의어
데이터베이스를 정의하는 언어
저장된 데이터의 스키마를 정의하여 데이터가 저장되는 형식을 정의
DCL : 데이터 제어어 (보안 제어/트랜잭션 제어)
데이터베이스에 대한 접근을 제어하기 위한 언어
데이터에 대해 접근 권한을 허가하고 박탈
데이터베이스에는 수 많은 사용자가 동일한 데이터에 동시접근
각 사용자의 요구사항을 상호 독립적으로 수행하여 다른 사용자가 동시에 동일한 데이터에 접근하는것을 사용자 입장에서
무시해도 되게 동작한다
시스템의 장애 발생에도 일관성을 유지할 수 있도록 동작
장애 발생 순간 동작에 참여중이던 데이터에 대한 일관성 유지
시스템이 재시동된 후, 모든 데이터를 일관성 있게 유지
DB에서는 이게 동시에 일어남.
ACID
Atomicity : 관련작업이 전부 처리되거나 아예 처리되지 않아야 함
Consistency : 트랜잭션 이전과 이후에 데이터베이스의 상태는 이전과 같이 유효해야 한다
Isolation : 모든트랜잭션은 다른 트랜잭션과 독립해 동작한다
Durability : 트랜잭션이 성공적으로 수행되면 완료의 효과는 지속되어야 한다

원자성, 지속성을 위해 log와 log 우선 기록(write log ahead)을 쓴다
격리성을 위해 locking protocol을 쓴다
일관성을 위해 constraint을 쓴다
관계 데이터 모델이 기반한 DBMS의 전형적인 구조 
데이터독립성 : 응용 프로그램은 데이터의 표현 및 저장 세부 사항에 대해 될 수 있으면 독립적이어야
효율적 데이터 접근 : 데이터가 보조 기억장치(디스크)에 저장될 때 특히 중요
데이터 무결성 보안성 : 데이터를 데이터베이스 관리 시스템을 통해서만 접근할 수 있다면, 데이터베이스 관리 시스템은
데이터에 대한 무결성 제약 조건을 관리할 수 있음
데이터 행정 관리 : 여러 명의 사용자들이 데이터를 공유할 때에는 데이터에 대한 관리를 중앙 집중화
동시성 제어 및 장애복구 (중요) : 데이터베이스 관리 시스템은 동일 데이터에 대한 동시 접근을 스케줄링해서 사용자
관점에서 동시성에 대한 제어를 신경 쓸 필요를 없게 하며, 시스템의 장애로부터 사용자를 보호
응용 프로그램 개발 시간 감소 : 고수준의 데이터 인터페이스를 제공
데이터베이스는 모델이 있어야 하고, 모델을 지켜야 하는 제약조건들이 있어야 한다.
메모리관리, 접근관리, 최적화 등...모든 기능을 넣어주어야 하는데 이를 직접 코딩하려면 너무 힘들다! -> DBMS를 사용하면 된다
최근에 Database는 TCP/IP를 사용한다.
(다른내용) "localhost",127.0.0.1:0000 >> 를 묶어서 socket이라고 한다
dbms는 각자(회사마다) 문법등이 다르다(당연)
각 dbms는 주로 쓰는 port가 정해져 있다. 보안을 위해 포트를 사용자가 바꿔서도 쓴다.
oracle - 1521
mssql - 1433
postgres - 5432
mysql - 3306
관계 논리식과 관계 대수식에 기반한 데이터 조회 및 저장
데이터베이스는 하나 이상의 릴레이션의 집합으로, 테이블 형식으로 데이터를 표현한다
데이터베이스를 제어하는 고수준의 언어를 사용하여 데이터의 표현과 복잡한 질의를 쉽게 처리한다
튜플은 σ로 표시한다.
테이블은 릴레이션으로 - 집합의 연결이라 할 수 있다
Π이름(σ이름=홍길동(회원)) 을 select from where...로 표시하면 다음과 같이 할수 있다
Select AVG(나이)
from 회원
where 이름 = "홍"
시스템은 데이터베이스뿐만 아니라 관리 시스템으로 서도 관계 모델의 자격을 얻어야 한다.
정보 규칙 – 데이터베이스 내의 모든 정보는 한 가지 방법으로만 표시되어야 한다.
보장된 접근 규칙 – 모든 데이터는 모호함이 없이 접근되어야 한다.
널 값의 체계적인 처리 – DBMS는 각 필드에 대해 null을 처리할 수 있어야 한다.
관계형 모델에 기반한 액티브 온라인 데이터베이스 카탈로그” – 시스템은 관계형 형태의 온라인 카탈로그를 제공해야 한다.
종합적인 데이터 보조언어 규칙 – 시스템은 적어도 하나의 관계형 언어를 지원해야 한다.
뷰 갱신 규칙 – 뷰는 시스템에 의해 갱신 가능해야 한다.
고급 삽입, 갱신, 제거 – 시스템은 집합에 대해 한번에 삽입, 갱신, 제거를 지원해야 한다.
물리적 데이터 독립성 – 물리적 레벨에서 변경이 일어나더라도 그 구조에 기반한 응용 프로그램은 변경되어서는 안된다.
논리적 데이터 독립성 – 논리적 레벨에서 변경이 일어나더라도 그 구조에 기반한 응용 프로그램은 변경되어서는 안된다.
무결성 독립성 – 무결성 제약조건들은 데이터베이스 카탈로그에 저장되어야 하며 응용 프로그램들과는 별도로 규정되어야 한다.
분산 독립성 – 데이터베이스의 분산은 데이터베이스 사용자에게 영향을 주지 않는다.
무전복 규칙 – 시스템이 저급 인터페이스를 제공하더라도, 그 인터페이스는 시스템을 파괴할 수 없어야 한다.
select를 하게 되면 db는 모든경우에 relation을 결과로 돌려준다.(규칙 1)
null << 이 들어가면 처리를 확실하게 할 수 있어야한다(규칙3)
ex) (1+3+5)/3 = 2 , (1+null+5) / 2 -> (null이니까 3-1) = 2
OSI 7layer <-> TCP/IP 4layer처럼 DB에도 표준이란게 있어야한다
각 회사별로 DB를 만들다 보니 중구난방이 되버리는 경우가 생김
--> sql99 표준을 만들음
Entity(개체), Attribute(속성), Relation(관계), Constraint(제약조건)을 기술한 것
데이터 설명 -> 메타 데이터 -> 데이터 스키마
릴레이션 설명 -> 릴레이션 스키마
튜플 : 릴레이션 스키마에서 정의된 각 속성(필드) 로 정의되며, 하나의 데이터 묶음을 나타냄
릴레이션 인스턴스에서는 각 투플을 하나의 행(row) 으로 구성한다
카디널리티 : 릴레이션 인스턴스의 튜플 수
차수 : 릴레이션 인스턴스의 속성 수
(도메인 주도 개발 이라는것도 있음)
도메인 : 어떤 비즈니스에서 상응하는 어떤 값에 대한 범위(scope)
데이터베이스 칼럼의 데이터 타입을 비즈니스 관점에서 볼때 A~~B 사이의 범위가 필요하면 이를 도메인이라고 부른다.
하나의 속성이 가질 수 있는 동일한 유형의 원자값들의 집합(사전적)
수직, 수평적으로 나누어지면 안된다
(ex) 학사포탈 db에서 학생의 전화번호가 두개인경우는? || 조건을 만족하지 않는 값은 절대 들어가선 안됨
관계 DB Schema - 데이터베이스에 속한 릴레이션 스키마의 집합
DDL : CREATE, ALTER, DROP
DML : SELECT, INSERT, UPDATE, DELETE
DCL : GRANT, REVOKE, (DENY), Start(Begin), COMMIT, ROLLBACK
저장된 정보의 품질에 따라 데이터베이스의 품질이 결정된다
무결성 제약조건
데이터베이스 스키마에 명세되어 있는 조건
데이터베이스 인스턴스에 저장될 수 있는 데이터를 제한
무결성을 강제하는 수단 - 제약조건 Integrity Constraint
키 제약조건 (Key Constraint)
key - 적합한 instance의 서로 다른 두 tuple은 한 key에 속하는 모든 field 전체에 대해 동일한 값을 가질 수 없음
Super Key - 유일성을 만족하는, 필드들의 부분집합 - (유일성을 만족하는tuple들의 모든부분집합)
CandidateKey - 유일성과 최소성을 만족하는 슈퍼 키 집합의 부분집합
Primary Key - 특정 Tuple을 구별하기 위해 후보키에서 선택된 고유 식별자
참조 관계에 있는 두 릴레이션의 데이터는 항상 일관되게 유지되야 한다
한 릴레이션 데이터 수정/삭제 -> 다른 릴레이션 데이터도 수정/삭제 되어야함
외래키 제약 조건으로 참조 무결성 유지할 수 있다
한 릴레이션의 필드가 다른 릴레이션의 키를 참조
참조하는 릴레이션의 데이터 변경에 따른 무결성을 유지
외래키 : 한 릴레이션의 키 중 다른 릴레이션의 튜플을 "유일하게" 식별할 수 있는 키
한 릴레이션에서 다른 릴레이션의 튜플을 참조하기 위해 사용
도메인 제약조건
각 속성의 값 원자값, 속성의 값은 반드시 도메인 범위 내의 값
속성의 기본값과 null 포함가능 여부 등에 대한 제약조건
도메인 무결성, 개체 무결성 : 즉시집행
참조 무결성
참조하는 릴레이션에 없는 값에 대한 삽입이 시도되는 경우 : 명령이 거부됨
참조 릴레이션의 데이터가 삭제되는 경우 : 외래 키가 존재하는 릴레이션의 참조 데이터를 모두 삭제
참조 릴레이션의 데이터를 삭제할 수 없도록 명령을 거부
외래 키가 존재하는 릴레이션의 해당 데이터를 모두 다른 값으로 갱신
참조하는 릴레이션의 데이터가 변경되는 경우 : 세 가지 방법 중 하나를 선택
relation 이라 가능하다
*참조 : https://github.com/gikpreet/class-relational_database/