제 1정규형은 원자값 1개가 맞지만 후보키 결정을 하지 않음

#정규화 : 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어가는 과정

-  하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정

-  제 1정규형, 제 2정규형, 제 3정규형, BCNF형, 제 4형 정규형, 제 5정규형이 있다.

제 1정규형 릴레이션에 속한 모든 도메인이 원자값(1개)만으로 되어있는 정규형
제 2정규형 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형
제 3정규현 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형
BCNF형 릴레이션에서 결정자가 모두 후보키인 정규형(Boyce-Codd)
제 4정규형 릴레이션 R에 다치 종속 A->B 가 성립하는 경우 R의 모든 속성이 A의 함수적 종속관계를 만족하는 정수형
제 5정규형 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형

# 트랜잭션

: 데이터 베이스 관리 시스템 또는 유사한 시스템에서 하나의 논리적 기능을 수행하기 위한 기본단위.

-  Atomicity(원자성) : 완전하게 수행 완료되지 않으면 전혀 수행되지 않아야함

-  Consistency(일관성) : 시스멭의 고정 요소는 트랜잭션 수행 전후 같아야함

- Isolation(고립성) : 트랜잭션 실행 시 다른 트랜잭션의 간섭을 받지 않아야함

- Durability(지속성) : 트랜잭션의 완료 결과가 데이터베이스에 영구히 기억됨.

> 로킹기법 : 하나의 트랜잭션이 액세스 하는 동안, 다른 트랜잭션이 그 항목을 액세스 할수 없도록함

> 교착상태 : 여러개의 트랜잭션들이 실행을 하지 못하고 서로 무한정 기다리는 상태

분산 데이터베이스시 사용자는 실제 위치를 알수 없어야함.

# 분산 데이터베이스 : 논리적으로는 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 여러개의 컴퓨터 사이트(site)에 분산되어 있는 데이터베이스, 처리나 이용이 많은 지역에 위치함으로써 해당 지역에서 해결될수 있도록 함.

- 분산 처리기 : 자체적으로 처리능력을 가짐. 지리적으로 분산

- 분산 데이터베이스 : 지리적으로 분산되어 있는 데이터베이스

- 통신 네트워크 : 분산 처리기를 통신망으로 연결. 논리적으로 하나의 시스템처럼 동작할수 있게함.

- 노드별 분산정책, 자치성 보장, 일관성, 회복 기능, 원격 접근 기능

  > 위치 투명성 : 액세스 하려는 데이터베이스의 실제 위치를 알필요 없이 논리적인 명칭만으로 액세스

  > 중복 투명성 : 동일데이터가 여러곳에 중복되어 있어도 사용자는 마치 하나의 데이터만 존재하는 것으로 사용

  > 병행 투명성 : 분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션 결과는 영향을받지 않음. 다중 사용자들이 자원들을 자동으로 공유할 수 있다.

  > 장애 투명성 : 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리

 

# 분할 : 테이블의 데이터를 분할하여 분산

- Completeness(완전성) : 전체 데이터를 대상으로 분할해야함

- Reconstruction(재구성) : 분할된 데이터는 관계 연산을 통해 본래 데이터로 재구성 할수 있어야함.

- Dis-Jointness(상호 중첩 배제) : 분할된 데이터는 서로 다른 분할의 항목에 속하지 않아야 함.

  > 수평분할 : 특정 속성의 값을 Row(행) 단위로 분할

  > 수직분할 : 데이터 컬럼(속성) 단위로 분할

# 할당 :

- 동일한 분할을 여러개의서버에 생성하는 분할방법

- 중복이 없는 할당과 중복이 있는 할당으로 나뉨

- 비중복 할당방식 : 최적의 노드를 선택, 단일노드에서만 분할이 존재. 분할된 테이블간의 의존성은 무시해 비용증가

- 중복 할당 방식 : 동일한 테이블을 다른 서버에 복제하는 방식, 일부만 복제하는 부분복제와 전체를 복제하는 완전복제

판매량이 가장 많은제품부터 "내림차순"/ ASC=오름차순, DESC=내림차순

# DDL 대상

- Domain(도메인) : 하나의 속성이 가질 수 있는 원자들의 집합

- Schema(스키마) : 데이터베이스의 구조, 제약조건등의 정보를 담고 있는 기본적인 구조(개체,속성,관계)

  > 외부스키마 : 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 DB의 논리적 구조

  > 내부 스키마 : 실제 DB에 저장될 레코드의 물리적인 구조를 정의하고 저장 데이터 항목의 표현방법

  > 개념스키마 : DB의 전체적인 논리적 구조로써 모든 응용프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 DB로 하나만 존재한다.

- Table(테이블) : 설계단계에서의 테이블을 주로 릴레이션이라고 부름. 데이터 저장공간

- View(뷰) : 하나이상의 물리 테이블에서 유도되는 가상의 테이블

- Index(인덱스) : 검색을 빠르게 하기 위한 데이터 구조

  > 순서 인덱스 : 데이터가 정렬된 순서로 생성되는 인덱스

  > 해시 인덱스 : 해시 함수에 의해 직접 데이터에 키값으로 접근하는 인덱스

  > 비트맵 인덱스 : Bit값이 0 또는 1로 변환하여 인덱스키로 사용하는 인덱스

  > 함수기반 인덱스 : 수식이나 함수를 적용해서 만든 인덱스

  > 단일 인덱스 : 하나의 컬럼으로만 구성한 인덱스

  > 결합 인덱스 : 두개이상의 컬럼으로 구성한 인덱스

  > 클러스터드 인덱스 : 인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 방식

  > 넌클러스터드 인덱스 : 인덱스의 키값만 정렬되어있고 실제 데이터는 정렬되지 않는 방식.

  * 정렬 여부 지정 : 

    - ASC : 오름차순 정렬 (Default값)

    - DESC : 내림차순 정렬

 

# SQL 정의어(DDL:Data Definition Language) : DB를 구축하거나 수정할 목적으로 사용하는 언어

- CREATE : Schema, Domain, Table, View, Index를 정의함

- ALTAR : Table에 대한 정의를 변경하는데 사용

- DROP : Schema, Domain, Table, View, Index를 삭제함.

 

# SQL 조작어(DML) : 데이터 베이스 사용자가 저장된 데이터를 실질적으로 관리하는데 사용되는 언어

- SELECT : 테이블에서 튜플을 검색함

- INSERT : 테이블에서 새로운 튜플을 삽입함

- UPDATE : 테이블에서 튜플의 내용을 업데이트함

- DELETE : 테이블에서 튜플을 삭제함.

> 배열 - 여러개의 데이터들을 모은 집합. 추가와 삭제가 가능 

> 튜플 - 여러객체를 모아서 담는다. 튜플 내의 값은 수정이 불가(추가, 삭제 X), 불변특성. 행(LOW)

* 카디널리티(튜플의 갯수) : 값에 대한 수치이므로 계속 변화한다.

 

# SQL 제어어(DCL) : 데이터의 보안, 무결성, 회복, 병행제어등을 정의하는데 사용하는 언어

- COMMIT : 명령에 의해 수행된 결과를 물리적으로 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려줌.

- ROLLBACK : 데이터 베이스 조작 작업이 비정상적으로 종료되었을 때, 원상태로 복구

- GRANT : 데이터 베이스 사용자에게 사용권한을 부여함

- REVOKE : 데이터 베이스 사용자의 사용 권한을 취소함.

 

DB의 추가,삭제 = CREATE, DROP(DDL)

s# 인덱스 :

- 데이터베이스 성능의 영향을 주는 DBMS의 구성요소.

- 테이블과 클러스터에 연관되어 독립적인 저장 공간을 보유.

- 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위해 별도로 구성한 순서 데이터

 

트랜잭션 모델링은 개념적 설계 단계.

# 데이터베이스 설계

- 무결성 : 삽입, 삭제, 갱신 등의 연산 후에도 저장된 데이터가 정해진 조건을 항상 만족해야함

- 일관성 : 데이터베이스에 저장된 데이터들 사이나, 특정 질의에 대한 응답이 처음부터 끝까지 일정해야함.

- 회복 : 시스템에 장애가 발생했을 때 장애 발생직전의 상태로 복구할 수 있어야함.

- 보안 : 응답시간의 단축, 시스템의 생산성, 저장공간의 최적화 등이 가능해야함.

- 데이터베이스 확장 : 데이터베이스 운영에 영향을주지 않으면서 지속적으로 데이터를 추가할수 있어야함.

 

# 데이터베이스 설계 순서(★)

1. 요구조건 분석 : 요구조건 명세서 작성

2. 개념적 설계 : 개념스키마, 트랜잭션 모델링, E-R모델

3. 논리적 설계 : 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계

4. 물리적 설계 : 목표 DBMS에 맞는 물리적 구조의 데이터로 변환

5. 구현 : 목표 DMBS의 DDL로 스키마로 작성하여 데이터베이스 등록, 트랜잭션 작성.

 

- DDL (CREATE, ALTER, DROP)

- DML (SELECT, INSERT, DELETE, UPDATE)

- DCL (COMMIT, ROLLBACK, GRANT, REBOKE)

일반 사용자는 시스템 카탈로그를 이용하여 내용 검색을 할수있다.

# DD(Data dictionary) 데이터 사전

- 시스템이 자신이 필요로 하는 여러가지 객체(테이블,뷰,인덱스,DB,패키지 등)의 정보를 포함한 시스템 데이터베이스

- 시스템 카탈로그, 메타 데이터 라고도 한다.

- 시스템 카탈로그 자체도 시스템 테이블로 구성되어 있어 SQL문을 이용하여 내용검색 가능

- 사용자가 시스템 카탈로그를 직접 갱신할수는 없다.

- SQL문으로 여러가지 객체에 변호랄 주면 시스템이 자동으로 갱신한다.

 

# 릴레이션의 특징

- 튜플 유일성 : 모든 튜플은 서로 다른 값을 찾는다

- 튜플 무순서성 : 하나의 릴레이션에 튜플의 순서는 없다.

- 속성 원자성 : 속성값은 원자값을 갖는다.

- 속성 무순서성 : 각 속성은 릴레이션 내 유일한 이름을 가지며, 순서는 없다.

 

VIEW는 논리적으로만 존재한다.

- View(뷰) : 하나이상의 물리 테이블에서 유도되는 가상의 테이블

 

Committed 되지 않은 상태 = Partially Committed

# 트랜잭션의 상태

-  Active(활동) : 트랜잭션이 실행

- Faile(실패) : 트랜잭션이 실행중에 오류가 발생하여 중단된 상태

- Aborted(철회) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

- Partially Committed(부분 완료) : 트랜잭션의 마지막 연산까지 수행했지만 Commit 연산을 실행하기 전의 상태

- Committed(완료) : 트랜잭션이 성공적으로 완료되어 Commit연산을 수행한 후의 상태

 

SELECT,UPDATE,INSERT=DML, GRANT는 DCL

- DDL = 정의 (CREATE, ALTER, DROP)

- DML = 조작 (SELECT, INSERT, DELETE, UPDATE) 

- DCL = 제어 (COMMIT, ROLLBACK, GRANT, REVOKE)

 

Candidate Key(후보키)=유일성과 최소성을 만족해야함.

# Key의 개념 : 튜플들을 서로 구분할 수 있는 속성(Attribute). 한 Relation에서 튜플들을 식별하기 위한 속성의 집합

- Primary Key(기본키) : 유일성과 최소성을 가지며, 후보키 중에서 특별히 선정된 주키(Main Key)로 중복된 값을 가질수 없다. Null값을 가질수 없다.

- Super Key(슈퍼키) : 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만 최소성은 만족하지 않음.

- Foreign Key(외래키) : 다른 릴레이션의 기본키를 참조하는 속성 

- Candidate Key(후보키) : 유일성과 최소성을 만족시켜야 한다.

- Alternate Key(대체키) : 후보키가 둘 이상일때 기본키를 제외한 나머지 후보키를 의미함

 

트랜잭션 인터페이스 설계는 논리적 설계

- 개념적 설계 : 개념스키마, 트랜잭션 모델링, E-R모델

- 논리적 설계 : 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계

- 물리적 설계 : 목표 DBMS에 맞는 물리적 구조의 데이터로 변환

 

# Primary Key(기본키) :

- 유일성과 최소성을 가진다.

- 후보키 중에서 특별히 선정된 주키(Main Key), 유일하게 특정 튜플을 구별할수 있는 속성.

- 중복된 값을 가질수 없다.

- Null값을 가질수 없다.

 

# 데이터모델 : 현실 세계의 정보들을 체계적으로 표현한 개념적 모형

- 데이터 모델링의 구성요소 : 

  > Entity(개체) : 개념, 독립적으로 존재(유일 식별자), 다른 개체와 하나이상의 관계

  > Attribute(속성) : DB를 구성하는 작은 논리적 단위(데이터), 개체의 특성을 기술

  > Relationship(관계) : 개체와 개체 사이의 논리적인 연결(개체-속성 관계)

- 논리 데이터 모델의 구성 요소 : 

  > Structure(구조) : 논리적인 개체 타입들 간의 관계, 데이터 구조 및 정적 성질을 표현

  > Operation(연산) : 실제 데이터를 처리하는 작업에 대한 명세, 조작하는 기본도구

  > Constraint(제약조건) : DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건

 

DML(조작) INSERT, SELECT, DELETE, UPDATE

# Primary Key(기본키) :

- 유일성과 최소성을 가진다.

- 후보키 중에서 특별히 선정된 주키(Main Key), 유일하게 특정 튜플을 구별할수 있는 속성.

- 중복된 값을 가질수 없다.

- Null값을 가질수 없다.

 

# 무결성 : 

- 개체 무결성 : 각 릴레이션의 기본키를 구성하는 속성은 Null값이나 중복된 값을 가질 수 없다.

- 참조 무결성 : 외래키 값은 Null이거나 참조하는 릴레이션의 기본키 값과 동일

- 도메인 무결성 : 속성들의 값은 정의된 도메인에 속한 값

- 고유 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 릴레이션의 속성 값들은 달라야한다.

- Null 무결성 : 릴레이션의 특정 속성 값은 Null이 될수 없다.

- Key 무결성 : 각 릴레이션은 최소한 한개 이상의 키가 존재해야한다.

 

Degree(차수)=속성의 수, Cardinality=튜플의 수, Attribute=속성

#튜플 :

- 릴레이션을 구성하는 각 행

- 속성의 모임 = 튜플

- 튜플의 수를 카디널리티

# 속성 : 

- 데이터베이스를 구성하는 가장 작은 논리단위

- 개체의 특성을 기술

- 속성의 수를 디그리(차수)라고 함.

# 도메인 :

- 하나의 속성(Attribute)가 취할 수 있는 같은 타입의 원자값들의 집합

 

# 릴레이션의 특징

- 튜플 유일성 : 모든 튜플은 서로 다른 값을 찾는다

- 튜플 무순서성 : 하나의 릴레이션에 튜플의 순서는 없다.

- 속성 원자성 : 속성값은 원자값을 갖는다.

- 속성 무순서성 : 각 속성은 릴레이션 내 유일한 이름을 가지며, 순서는 없다.

 

GRANT=DCL(제어), CREATE=DDL(정의)

 

+ Recent posts