정처기 필기 준비 했을 당시 정리해둔 문서 입니다.
1. 데이터 베이스 정의
(1) 정보와 데이터
① 데이터
관찰이나 측정을 통해서 수집된 사실이나 값 (수치, 스트링)
② 정보
데이터를 가공하여 얻은 결과로써 부가가치를 지니며 의사 결정을 할 수 있게하는 유효한 해석이나 상호 관계.
(2) 데이터베이스 정의
- 어느 한 조직에서 다수의 응용 시스템들이 공용으로 사용하기 위해
통합 저장된 운영 데이터의 집합
(=데이터 저장 방식)
- 상호 연관 있는 데이터들의 체계적인 집합체.
1) 장점
- 데이터의 논리적 독립성,
- 물리적 독립성,
- 무결성 유지,
- 중복의 최소화 (중복이 '없다'는 것은 아님!)
- 불일치 제거,
- 공유의 편리,
- 보안성 유지 용이함. (중앙에 데이터가 있으니 중앙 컴퓨터에만 보안하면 되니까..
근데 이 부분은 참 애매함.)
(3) 데이터베이스의 일반성
실시간 접근, 계속적인 변화, 동시 공유, 내용에 의한 참조(:순서가 없다!)
데이터를 저장하는 다른 시스템이 뭐가 있을까?
내 컴퓨터 파일 시스템을 생각해 보자.
컴퓨터는 주소값으로 데이터들이 저장되어 있지만,
데이터 베이스는 주소값이 아닌 '내용에 의해서 저장'된 것.
'데이터 베이스는 순서, 주소값이 없다.'
출처 입력
(4) 데이터베이스의 특징 3요소 [중요]
자료 추상 (Data Abstaction)
추상화 (:공통된 특징들을 뽑아내는 것) = 개념화, 일반화
복잡한 자료를 쉽게 사용
자료 독립 (Data Independency)
프로그램을 변경하지 않고 자료를 변경
자료를 변경하더라도 프로그램은 그대로 사용
자기 정의 (Self Definitin)
: '자기 자신'에 대한 구성과 설정까지 저장해 둠. 자기 자신을 데이터 베이스에 저장해 뒀다는 것.
자료의 구성과 내용을 데이터베이스가 기억하고 관리하는 기능.
이렇게 mysql이 있는 것 확인
(5) 데이터 베이스의 논리적 구성
개체 : 표현하려는 유형, 무형 정보의 대상(=무형인 '시간' 혹은 현실세계에 없는 용 도 저장할 수 있다.)
존재하면서 서로 구분이 되는 것.
속성 : 개체의 특성이나 상태를 기술하는 것(이름, 나이, 주민번호 등..)
관계 : 개체간 또는 속성간의 관계(1:1, 1:N, N:M)
*DB 발전 과정 : 파일시스템 -> 계층형 -> 망형 -> 관계형 -> 객체형 -> 객체 관계형
02. 데이터베이스 관리 시스템 DBMS
DataBase Management System
DBMS란, 데이터 베이스 관리해주는 시스템.
데이터베이스의 생성, 접근 방법, 처리절차, 보안, 물리적구조 등을 책임지며
대량의 데이터를 체계적으로 관리하고 건색, 활용할 수 있도록 한다.
컴퓨터에 데이터를 입력하기 위해서는 데이터베이스를 외에도
위에서 말한 '파일시스템'이 있다.
1. 파일 시스템
① 개념
각각의 응용 프로그램은 개별적으로 자기 자신의 데이터 파일을 유지 및 관리.
그러나 이런 파일을 이용해 여러명이서 데이터를 저장할 때에는 문제가 생긴다.
대표적으로 데이터 종속성과 중복성이다.
② 파일시스템의 '문제점'
.데이터 종속성(응용프로그램과 데이터 간의 상호 의존 관계)
: 한글 파일은 한글로만 열 수 있다.
.데이터 중복성(일관성 결여, 보안성 결여, 경제성 저하, 무결성 유지 곤란)
: 노트북만 들고 나왔는데 필요한 한글 파일을 저장시켜둔 컴퓨터가 집에 있는 데스크탑일 경우,
파일을 복사해서 사용해야 한다. 같은 내용의 데이터가 두 개 생기는 것이다.
.논리적 파일 구조와 물리적 파일 구조간에 1:1 로 맵핑을 시켜둔 것.(사상) => 이따 밑에서 다시 설명
.물리적 데이터 구조에 대한 접근 방법을 응용 프로그램에 구현 => 이따 밑에서 다시 설명
~~ 이런 문제점들 때문에 ->
2. 데이터 베이스 관리 시스템 (DBMS) 가 나왔다!
(1) DBMS의 정의
응용 프로그램과 데이터의 중재자, 모든 응용 프로그램들이
데이터베이스를 공유할 수 있도록 관리해주는 SW 시스템.
DB에 접근하기 위해 필요한 제어, 접근 방법, 관리 등의 기능 제공.
(2) DBMS의 필수 기능 (DMC)
정의 (D) 기능 : 데이터의 형태, 구조, DB의 저장에 관한 내용 정의 (table)
조작 (M) 기능 : 사용자의 요구에 따라 검색, 갱신, 삽입, 삭제 등의 기능.
제어 (C) 기능 : 정확성과 안전성을 유지하는 기능. (권한 부여 권한 박탈 등)
-> SQL 쿼리문 공부도 필수+_+
++ 데이터 베이스 계층구조 !!
데이터가 어떻게 데이터베이스에 저장이 되는 걸까?
우선 컴퓨터가 데이터를 저장하는 방식을 생각해보자.
이렇게 저장된 데이터베이스, DBMS를 통해 데이터베이스에 저장된 데이터에 접근할 수 있는데,
그 과정에서 일반 사용자가 이 데이터 베이스의 구조를 알필요가 없지 않은가?
사용자는 빠르고 간편하게 데이터를 가지고 올 수 있는지에만 관심이 있고,
데이터베이스는 안전하고 오류없이 데이터를 보관하는데에만 관심이 있다.
이렇게 알지 않아도 되는 부분은 드러내지 않는 것을 '추상화'라고 한다.
데이터 베이스의 추상화를 구현한 대표적인 예로, 3단계 데이터베이스 구조 가 있다.
이 구조는 이름대로 데이터 베이스를 3단계로 나누고,
단계마다 데이터베이스를 구성하는 데이터의 구조와 제약 조건에 대해 구체적으로 기술하는
'스키마 : DB의 구조'를 가지고 있다.
* 스키마(schema) : 데이터베이스에 저장되는 데이터 구조와 제약조건을 정하는 것.
예를들어 데이터베이스는 데이터에 INT, CHAR 등의 데이터 타입을 지정한다거나, 중복된 값을 허용하지 않는 등의 제약조건을 지정할 수 있다.
이렇게 3단계 계층 구조로 나눠진 데이터베이스는 데이터의 독립성을 가진다.
데이터의 독립성이란,
특정 스키마를 변경해도 상위 수준의 스키마 정의에 영향을 주지 않는 성질을 말한다!
ex) 한글 파일은 한글로 열어야하고, ppt는 무조건 파워포인트로 열어야 하는 것이 아니라는 것.
예를들어.. 데이터베이스에 새로운 데이터가 추가되거나
필드가 추가 혹은 삭제되는 경우,
현재 사용하고 있는 응용 프로그램에서 사용자의 뷰에서 직접 관련되지 않는 부분은 영향을 받지 않는다.
이렇게 ②논리스키마 가 변하더라도 상위단계인 ①외부스키마 가 영향을 받지 않는 성질을 논리적 독립성이라고 한다.
그리고 데이터베이스 관리 시스템의 성능 향상을 위해
시스템을 바꾸거나 ③물리스키마 구조를 변경하는 경우가 있는데,
이 때 물리 스키마가 바뀌더라도 개념 스키마나 사용자가 이용하는 응용 프로그램은 영향을 받지 않는다. 이를 물리적 데이터 독립성이라고 한다.
(3) 데이터 독립성 ① 논리적 독립성 DB의 '논리적 구조의 변화 '에 대해 응용 프로그램들이 영향을 받지 않는 능력. ② 물리적 독립성 응용프로그램이나 데이터베이스의 논리적 구조에 영향을 주지 않고, DB의 물리적 구조를 변경할 수 있는 능력. ex) 컴퓨터가 바뀌었거나 하드 디스크가 바뀌어도(물리적 변화), 데이터 베이스에 저장된 데이터는 바뀌지 않는다. |
3. 데이터베이스 시스템
1. DBS
DBS = DB + DBMS + 사용자 + 데이터 언어 + DBA + DB 컴퓨터
2. 3단계 스키마(ANSI/SPARC 3 Level Architecture)
스키마 = 'DB의 구조' (개체, 속성, 관계)에 대한 정의 및 제약 조건 등을 기술한 것.
* 스키마(schema):
스키마는 데이터베이스에 저장되는 데이터 구조와 제약조건을 정하는 것을 의미한다.
예를들어 데이터베이스는 데이터에 INT, CHAR 등의 데이터 타입을 지정한다거나, 중복된 값을 허용하지 않는 등의 제약조건을 지정할 수 있다.
① 외부 스키마
가장 바깥쪽 스키마, 사용자가 사용하는 부분 본 구조
사용자 관점, 서브 스키마, 뷰 라고도 함.
사용자 논리 단계
② 개념 스키마 (아까 DB의 table)
논리적 관점에서 본 구조, 전체적인 데이터 구조
일반적으로 스키마라고 부르면 개념스키마를 뜻함
조직 논리 단계
모든 개체, 제약조건, 권한, 보안정책 등을 정의
③ 내부 스키마
물리적 저장장치 관점에서 본 스키마.
DB가 저장되는 방법을 정의.
실제로 저장되는 내부 형식, 항목의 표현 방법,
인덱스 유무, 물리적 순서를 정의
(4) 3단계 간의 사상(Mapping)
응용 Interface(외부 - 개념) 논리적 독립성 지원 // 아래 표 2-3
저장 Interface(개념 - 내부) 물리적 독립성 지원 // 아래 표 1-2
장치 Interface(내부 - 저장 장치) // 아래 표 0-1 사이
외부단계 | 3 |
개념단계 | 2 |
내부단계 | 1 |
하드 인터페이스 | 0 : 이진법으로 0101010 이렇게 있겠지? |
# 데이터 언어 SQL
DDL(데이터 정의어 D) : CAD Create, Alter, Drop
DML(데이터 조작어 M) : SIDU Select, Insert, Delete, Update
DCL(데이터 제어어 C) : GR Grant, Revoke, Commit, Rollback
- 절차적 데이터 언어 : 무엇(What) 데이터와 데이터를 어떻게(How)
접근하는지를 둘 다 명세해야하는 '저급 데이터언어'
- DB에서 한번에 하나의 레코드만 검색
- 호스트 언어와 함께 사용되며 독자적으로 사용 못함
- 응용 프로그램 속에 삽입되어 사용하므로
- DML 예비 컴파일러가 필요하다.
- 응용 프로그래머가 사용
- 비절차적 데이터 언어 : 무엇(What) 데이터를 원하는지만 명세하면 되는 고급 데이터언어
- DB에서 한번에 여러 개의 레코드를 검색
- 어떻게 데이터를 검색할지는 DBMS에게 위임하므로
- 독자적으로 사용 가능
# DBMS 구조
DSL = 데이터 부속어, Data SubLanguage, 호스트 프로그램
# 트랜잭션
- 트래잭션이란? 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미한다. 즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위. 예를 들어, 친구에게 인터넷 뱅킹으로 10,000원을 송금하는 상황을 가정해봅시다. 제가 친구에게 송금을 한다면, 저의 계좌에서 10,000원을 차감하고 친구의 계좌에 10,000원을 증가시켜야 하는데, 알 수 없는 오류로 인해 저의 계좌에서는 10,000원이 줄었지만 친구 계좌에는 10,000원이 증가되지 않는다면 어떻게 될까? 저의 10,000원은 그냥 공중으로 증발해버리는 문제가 발생한다. 이러한 경우가 생기지 않도록 중간에 오류가 발생하면 다시 처음부터 송금을 하도록 하는 것이 rollback! 오류 없이 정상적으로 송금이 됐다면 정상적으로 실행이 끝났으므로 commit을 한다. 즉, 송금 과정을 하나의 트랜잭션이라 볼 수 있다. // 참고로 트랜잭션을 작업수행의 논리적 단위라고 했는데, 때문에 DBMS의 성능은 초당 트랜잭션의 실행 수( TPS:Transaction per second )로 측정. |
트랜잭션 사용 이유 트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용한다. 부정합이 발생하지 않으려면 프로세스를 병렬로 처리하지 않도록 하여 한 번에 하나의 프로세스만 처리하도록 하면 되는데, 이는 효율이 너무 떨어진다. 즉, 병렬로 처리할 수 밖에 없는 현실적인 상황으로 인해 부정합을 방지하고자 트랜잭션을 사용하는 것. 트랜잭션에서 중요한 것은 스케줄 관리! 스케줄을 잘못 짜게 되면, 데드락에 빠지게 되는데 이와 관련된 주제가 뒤에서 살펴볼 2PL입니다. |
# 트랜잭션의 4가지 특징
4가지 특성의 앞 글자만 따서 ACID 라한다.
A | C | I | D |
Atomicity | Consistency | Isolation | Durability |
원자성 | 일관성 | 격리성 | 영속성 |
: 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것. : 즉, All or Noting의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미. |
: 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것을 말함. : 여기서의 일관성이란, 위의 송금 예제에서 금액의 데이터 타입이 정수형인데, 갑자기 문자열이 되지 않는 것을 말한다. : 즉, 송금 전 후 모두 금액의 데이터 타입은 정수형이어야 한다는 것=일관성! |
: 트랜잭션 수행 시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 말한다. : 즉 트랜잭션끼리는 서로 간접할 수 없다. |
: 성공적으로 수행된 트랜잭션은 영원히 반영되는 것을 말한다. : commit 을 하면 현재 상태가 영원히 보장된다! |
https://victorydntmd.tistory.com/129 |
# 데이터 사전과 데이터 디렉토리
데이터 사전 = 시스템 카탈로그 :
시스템 자신이 필요로 하는 스키마 및,
여러 가지 객체에 대한 정보를 포함하고 있는 시스템 DB.
시스템 목록(카탈로그), 메타 DB(자기 자신에 대한 정보), 시스템 DB,
기술자 정보, 테이블, 뷰, 인덱스, DB, 권한 등의 정보를 저장.
시스템만 접근할 수 있는 영역으로 사용자는 접근 X. 시스템 카탈로그를 저장하는 곳.
관계 DB에서 특징 :
카탈로그 자체도 일반 사용자의 테이블과 같이 시스템 테이블로 구성,
사용자가 직접 수정은 불가능.
SQL을 이용해서 내용을 검색할 수 있으나, 정보를 UPDATE, INSERT, DELETE문으로 수정하는 것은 불가능
데이터 디렉토리 :
데이터 사전에 수록된 데이터를 실제로 접근하는데 필요한
정보를 관리 유지하는 시스템
데이터 사전은 사용자와 시스템 둘 다 접근 가능
데이터 디렉토리는 시스템만 접근 가능
04. 데이터 모델링
: 현실세계에 있는 것들을 어떻게 데이터로 만드는가?
1. 데이터 세계
(1) 데이터 모델링이란?
현실 세계를 DB에 표현하는 것.
정보 처리 대상이 되는 없무와 업무들 간의 관계를 개체를 활용하여
최적의 데이터 베이스 구조를 체계적으로 표현하는 것.
저장할 때 되는대로 막 저장할 수는 없다.
데이터 모델은 현실세계로부터 추출한 데이터의 의미, 데이터간의 관계, 제약 조건들을 기술한 것을 의미한다. 데이터 모델은 사용자와 컴퓨터 중 어디에 초점을 맞추는지에 따라,
개념적 모델 / 논리적 데이터 모델 / 물리적 데이터 모델로 나누어 볼 수 있다.
2. DB 설계
(1) 개념적 설계 (순서 중요! 외부 스키마 쪽이랑.. 헷갈림)
(이것은 단계! 그것은 구조!임)
사용자에 초점을 맞추는 데이터 모델로, 사용자가 데이터를 어떻게 인식하는지에 관심을 둔다.
어떤 데이터들이 있고, 각 데이터의 특징, 데이터 간 관계 등을 정한다.
개념적 데이터 모델의 대표적인 예로는 개체-관계 모델 = ER모델이 있다.
DBMS와 하드웨어에 독립적,
개념 스키마 모델링과 트랜잭션 모델링 병행 수행,
E-R 다이어그램 작성 = 그림으로 그리는 것. 오라클이든 mysql이든 상관 X
이것을 가지고 ->
(2) 논리적 설계 (표 형식으로 만들어 주는 것.= '논리적 데이터' 모델로)
사용자가 이해하면서 실제로 저장될 수 있는 구조를 설계.
DBMS에 종속적, (따라서 달라지니까)
'논리적 데이터 모델' (관계형 데이터 모델:표 / 계층형 데이터 모델:트리 / 망형 데이터 모델:그래프) 로 변환,
트랜잭션 인터페이스 설계,
스키마의 평가 및 정제,
정규화[중요], 반정규화
(3) 물리적 설계
: 컴퓨터에 초점을 맞춘 모델.
데이터가 어떻게 컴퓨터에 저장되는지에 관심을 둔다.
DBMS와 하드웨어에 종속적,
저장 레코드 양식 설계,
레코드 집중의 분석/설계,
접근 경로 설계,
트랜잭션 세부 설계
문제 ::
답:
3. 개체-관계 모델 : ER모델 ]
사물을 개체(Entity)와 개체 간의 관계로 표현. 개체는 독립적인 특성, 속성에 의해 식별되며 개체끼리 서로 관계를 가진다. 개체 간의 관계를 이용해 개념적으로 표현하는 방법. 데이터를 개체, 관계, 속성으로 묘사.
개체 = 직사각형 학생 강사
관계 = 마름모
속성 = 타원 이름 나이 성별 이름 성별 과목
기본키 = 밑 줄 + 타원
복합속성 = 트리형 타원
속성 종류 | 설명 |
단순 속성 | 더 이상 의미적으로 분해될 수 없는 속성 |
복합 속성 | 독립적인 의미를 가질 수 있는 여러 기본 속성으로 구성된 속성 |
단일값 속성 | 특정 개체에 대하여 하나의 값을 갖는 속성, 생일 같은 것 |
다중값 속성 | 어떤 개체에 대해 여러 개의 값을 갖는 속성, 취미 같은 것 |
# 논리적 데이터 모델
(1) 관계 데이터 모델:(RDM, Relational Data Model)
표(테이블), 구조가 단순하며 사용리 편리, N:M.
계층 모델과 망 모델의 복잡한 구조를 단순화시킨 모델.
테이블을 이용해서 데이터 상호 관계를 정의하는 DB 구조.
관계 모델은 관계형 데이터베이스에 직접 구현할 수 있도록 DB구조를 정의하는 방법을 제공합니다.
쉽게 테이블을 설계하는 과정이라고 생각하시면 되고, ER 다이어그램을 기반으로 작업하는 것이 순서입니다.
모든 데이터를 논리적으로 구성
관계 모델은 릴레이션의 관계를 표현하는 것,
아래는 관계 모델의 핵심인 릴레이션에 대한 예시
#릴레이션 : 개체를 표현하기 위한 데이터 구조로써 2차원 테이블로 표현하며 heading:스키마 와 body 본체로 구성.
heading 은 속성이 n개 모인 집합이며, 이름과 데이터 형으로 구성,
body는 속성값의 집합인 튜플의 집합.
정리하면, 릴레이션은 튜플의 모임이고, 릴레이션의 관계를 정의한 것이 관계 모델입니다.
관계 모델은 릴레이션 단위로 다양한 연산을 사용해 질의를 수행하는 데이터 모델.
(2) 네트워크 데이터 모델
그래프 1:N
(3) 계층 데이터 모델 : (Hierarchical Data Model)
- 트리 1:N , 부모-자식 관계 , 트리
: 개체 간에 상하 관계가 성립. 레코드 삭제 시 연쇄 삭제가 된다.
- DBMS 종류
관계형 : Oracle, Mysql, DB2, Ingres, Informix
계층형 : IMS, System 2000
네트워크형 : DBTG, IDMS, IDS2, Total
: 일대다(1:N) 관계만 허용. 구조가 복잡하고 데이터 삽입, 삭제 수정, 검색이 어려움.
객체지향형 : GemStone, O2, Versant ODBMS
5. 사상(Mapping) 방법 ERD -> 관계 데이터 모델(보통 관계형 데이터베이스를 쓰니까 표로 하는 것만 합니다)
5. 데이터베이스 저장과 접근
1. DB 저장과 접근
① 파일 관리자
저장 레코드는 레코드 번호 또는 레코드 ID(RID)로 식별
전체 디스크 내에서 유일(페이지 번호, 페이지 오프셋으로 구성)
디스크 관리자에게 페이지를 요청한다.
저장 레코드 관리
② 디스크 관리자
페이지 번호를 물리적 디스크 주소로 변환하는 사상 작업을 관리, 수행
페이지 관리 수행
2. 파일 설계와 조직
① 파일 설계
필드 -> 레코드 -> 파일 -> DB
속성 -> 필드
튜플 -> 레코드
관계 -> 파일
(2) 파일 조직 방법
1) 순차 방법
2) 인덱스 방법
3) B, B+트리
4) 다차원 공간 파일
5) 해싱 방법
3. RAID
: 싼 여러 개의 디스크를 논리적으로 묶어서 성능이 좋은 하나의 논리 디스크를 만드는 것.
RAID 종류 :
레벨 | |
0 | |
1 | 하나의 디스크에 기록되는 모든 데이터가 다른 디스크에 고스란히 복사 - 여러개 묶을수록 안전성 up - 중요한 데이터 저장 |
2 3 4 | 최소 3개의 디스크가 필요, 2개의 디스크는 raid 0처럼 구성하고 하나의 디스크는 데이터를 복구하기 위한 패리티 값을 저장 |
5 | 패리티 값을 여러 디스크에 분산해서 저장, |
1 + 0 | 레이드 1로 묶고, 0으로 묶는 방법. 안전성 성능 우수하지만 비싸다. |
6. 관계 데이터 모델
1. 용어
카디 | 기수(Cadinality) : 튜플의 수 |
기차 | 차수(Degree) : 속성의 수 |
튜도 | 튜플 : 테이블이 한 행을 구성하는 속성들의 집합 |
행열 | 도메인 : 속성이 취할 수 있는 값들의 집합 |
2. 관계 데이터 구조
① 릴레이션의 특성
릴레이션의 튜플들은 모두 상이하다.
릴레이션에서 속성들 간의 순서는 의미가 없다.
한 릴레이션에 포함된 튜플 사이에는 순서가 없다.
속성은 원자값으로써 분해가 불가능하다.
② 키의 종류
슈퍼키 | : 레코드들을 식별할 수 있는 '필드의 집합'(유일성), 즉 식별자. : 테이블은 적어도 1개의 슈퍼키를 가져야 한다. |
유일성은 갖지만 최소성은 가지지 '못한' 속성의 집합, 속성 |
후보키 | : 슈퍼키에서 레코드를 식별할 수 있는 최소한의 필드만 남겨놓은 집합 | 유일성과 최소성을 모두 가진 속성의 집합, 속성 |
+ 기본키 Primary | 후보 키 중에서 특별히 선정된 키, 중복 값 가질 수 없음 후보 키의 성질을 가진다.(유일성, 최소성 모두 만족) 후보 키가 2개 이상 존재하면 이 중 하나를 기본 키로 선정한다. NULL값을 가질 수 없다. |
|
+ 대체키 | : 후보키에서 기본키를 뺀 것. : 기본키를 선택할 때 고려할 사항을 하나씩 따져보면 기본키의 [주소 속성이 추가된 릴레이션의 예]의 고객 릴레이션은 고객아이디 속성을 기본키로 선택하는 것이 무난하다. |
따라서 기본키로 선택되지 못한 (고객이름, 주소) 속성 집합이 대체키가 된다. |
외래키 | : 다른 테이블의 기본키를 참조한다. : 외래키의 모든 필드는 참조하는 기본키와 동일한 도메인(값의 종류&범위)을 갖는다. 외래키의 모든 필드의 값은 참조하는 기본키와 동일하거나 null 이다. |
다른 테이블을 참조하는데 사용되는 속성 |
③ 관계 데이터 제약
1) 데이터 무결성의 정의
데이터의 정확성 또는 유효성 의미
DB에 저장된 값과 그것이 현실 세계의 실제 값과 일치하는 정확성을 의미.
'한 객체에 저장되는 데이터를 제한하는 조건'
무결성 제약조건은 DB의 상태가 만족시켜야 하는 조건.
사용자에 의한 DB 갱신이 DB의 일관성을 깨지 않도록 보장.
2) 무결성 제약조건의 종류
개체 무결성 :기본 키 값은 NULL이 될 수 없다.
기본키를 구성하는 어떤 속성도 NULL값을 가질 수 없고 중복을 허용하지 않는다. [기본키]
ex) 홍길동이라는 이름은 동명이인일 수 있으니 학번 구분을 사용한다.
라는 제약조건을 걸어버린 것. 비어있거나, 중복이 되면 X.
참조 무결성 : 외래키(다른 릴레이션의 key 애트리뷰트를 참조하는 애트리뷰트) 값은 NULL이거나, 참조 릴레이션에 있는 기본키와 같아야 한다. [외래키]
있는 것만 쓴다. ex) 게시판 글쓴이가..
도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다. [속성]
3. 관계 데이터 연산
① 관계 대수
원하는 릴레이션을 정의하는 방법을 제공하는 절차적 언어
E.F COdd가 관계 데이터 모델을 처음 제안할 때 정의
1) 일반 집합 연산자
합집합, 교집합, 차집합, 카티션 프로덕트×
2) 순수 관계 연산자
예제)
SELECT name FROM student WHERE age=27;
π<name>(σ<age=27>(student))
student 에서 나이가 27인 사람의 행만 뽑아 이름을 보기
JOIN(⋈) : 두 관계로부터 관련된 튜플들을 하나의 튜플로 결합하는 연산.
카티션 프로덕트와 셀렉트를 하나의 조인으로 표현 가능.
일반적으로 조인이라하면 자연조인.
두 개 이상의 릴레이션으로부터 상호 연관성을 구하기 위한 연산자.
동등 조인
자연 조인
세미 조인
조인 애트리뷰트로 S를 프로젝션한 결과를 R에 자연조인
외부 조인
조인할 때 조인할 상대 릴레이션이 없8는 경우 NULL 튜플로
만들어 결과 릴레이션에 포함
좌측 외부 조인
우측 외부 조인
완전 외부 조인
DIVISION(÷)
동시에 포함하는 속성
3) 확장
② 관계 해석
원하는 릴레이션을 정의하는 방법을 제공하며 비절차적 언어
튜플 관계 해석, 도메인 관계 해석 두 종류가 있고
둘 다 정형식과 조건식을 갖는다
수학의 Predicate Calculus에 기반을 두고 있다.
④ 관계 데이터 연산
7. SQL
[ 용어 ]
Relation : 관계,
Attribute : 속성,
Domain : 속성이 가질 수 있는 값들의 집합
Tuple : 테이블의 한 행을 구성하는 속성들의 집합
Degree(차수) : 속성의 개수
Cadinality(기수): 튜플의 개수
구조적 질의어[structured query language]
IBM에서 개발된 DB에서 사용하는 언어
관계 대수와 관계해석을 기초로한 고급 데이터 언어
데이터 정의 D, 데이터 조작 M, 데이터 제어 C 기능을 제공.
비절차적 언어
<실습 환경 구축>
1. Oracle 11g Express Edition 설치
2. 연습용 계정 생성
CREATE USER scott IDENTIFIED BY tiger DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT connect, resource TO scott;
CONN scott/tiger;
3. SQL Developer 설치
1. SQL 정의어
스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 제거하는데 사용
(1) CREATE
CREATE TABLE 테이블_이름 (
속성_이름 타입,
속성_이름 타입,
속성_이름 타입,
속성_이름 타입
);
CREATE TABLE student (
name VARCHAR(10),
age INTEGER,
hp INTEGER
);
CREATE TABLE department (
d_no INTEGER
name VARCHAR(10),
);
(2) ALTER
ALTER TABLE 테이블_이름 ADD 속성_이름 타입
ALTER TABLE student ADD hpnum INTEGER;
ALTER TABLE 테이블_이름 DROP (속성_이름) [CASCADE]
ALTER TABLE student DROP (hpnum);
ALTER TABLE 테이블_이름 RENAME COLUMN 속성_이름 to 변경_이름
ALTER TABLE student RENAME COLUMN name TO full_name;
ALTER TABLE 테이블_이름 MODIFY (속성_이름 타입)
ALTER TABLE student MODIFY full_name VARCHAR2(20);
*tip : 일반적으로 뷰는 ALTER로 수정하지 못한다.
저장장치 내에 물리적으로 존재하는 것은 X. 가상으로 존재.
*뷰 : 테이블에서 보여주고 싶은 부분.
(3) DROP
DROP TABLE 테이블_이름 [CASCADE or RESTRICTED]
CASCASE : 삭제할 요소가 참조 중이면 삭제.
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우,
함께 변경/삭제
RESTRICTED : 삭제할 요소가 참조 중이여도 삭제X
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우,
변경/삭제가 취소.
2. SQL 조작어
(1) SELECT
SELECT 속성명 FROM 테이블명;
1) 조건
SELECT 속성명 FROM 테이블명 WHERE 조건;
SELECT full_name FROM student WHERE age>=27;
SELECT full_name FROM student WHERE age>=27 AND full_name='test';
SELECT full_name FROM student WHERE age>=27 OR full_name='test';
ALTER TABLE student ADD bundan INTEGER;
ALTER TABLE student ADD jul INTEGER;
(2) INSERT
INSERT INTO 테이블명 (속성명, 속성명...) VALUES (값, 값...)
(3) DELETE
DELETE FROM 테이블명 WHERE 조건
DELETE FROM student WHERE full_name='HONG SUNGJUN';
(4) UPDATE
UPDATE 테이블명 SET 속성_이름=값, 속성_이름=값 WHERE 조건
UPDATE student SET bundan=1 WHERE full_name='LEE JINWOO';
UPDATE student SET jul=1 WHERE full_name='LEE JINWOO';
UPDATE student SET bundan=1,jul=1 WHERE full_name='LEE JINWOO';
* HAVING 절은 GROUP 어쩌고 있어야 한다.
8. 데이터베이스 정규화
1. 개념
이상 문제를 해결하기 위해, 속성 간의 종속 관계를 분석하여 여러 개의 릴레이션으로 분해하는 과정.
논리적 설계 단계에서 수행.
정규화를 통해서 릴레이션을 분해하면 일반적으로 연산시간이 증가.
2. 특성
데이터의 중복을 줄이고 무결성을 향상.
이상(Anomaly)이 있는 관계를 재구성함.
자료의 삽입, 삭제, 갱신 시 이상 현상을 방지.
자료의 저장 공간 및 불일치를 최소화, 일관성 보장
데이터 정확성 증가
자료 구조를 안정화.
- 차수가 높아질수록 제약 조건은 많아짐
- 개념적 설계, 논리적 설계 단계에서 수행
2. 정규화 목적
- 어떠한 릴레이션이라도 데이터 베이스 내에서 표현 가능하도록 만든다
- 중복을 배제해서 삽입 삭제 갱신이 이상이 발생하는 것을 방지
- 속성간 종속을 피하게 한다
2. 이상(Anomaly) :
정규화를 거치지 않은 데이터 베이스 내에서 데이터들이 불필요하게 중복되어 릴레이션 조작시 예기치
않게 발생하는 문제 상황.
하나의 테이블에 모든 정보가 있으면 조인이 필요없지만 여러 이상현상(Anormal)이 발생한다. 고객과 주문 사항의 정보가 있는 테이블이 아래와 같다면 다음과 같은 이상현상이 발생한다.
이상현상은 총 3가지로 삽입, 삭제, 갱신(수정)이 있다.
위와 같은 테이블에 신규 고객의 정보를 저장할 때, 주문 번호와 상품번호 등을 입력해야 하는 상황이 발생한다. 이처럼 불필요한 정보를 입력하게 되는 현상을 삽입 이상이라고 한다.
① 삽입 이상 : 원하지 않는 정보를 강제 삽입해야 하는 경우와, 불필요한 데이터가 함께 삽입되는 경우.
[ 예시 ]
"신□□" 고객이 회원 탈퇴를 하여 테이블에서 정보가 삭제되는데 마우스 상품까지 삭제되는 현상이 발생한다. 이처럼 하나의 튜플을 삭제했지만 다른 정보들이 연달아서 삭제되는 현상을 삭제 이상이라고 한다.
② 삭제 이상 : 튜플을 삭제함으로써 유지되어야 하는 정보까지도 같이 삭제되는 경우
노트북의 가격이 인하되어 85만원으로 변경하려고 한다. 첫번째 튜플만 변경하면 네번째에 있는 노트북은 그대로 90만원으로 되어 있다. 이처럼 하나의 튜플만을 변경하면 다른 튜플과의 모순이 발생하는 현상을 갱신 이상이라고 한다.
③ 갱신 이상: 중복된 튜플 중에서 일부의 속성만 갱신시킴으로써 정보의 모순성이 생기는 현상
이러한 이상을 줄이고자 진행하는 것이 정규화라고 볼 수 있다. 정규형은 정규화를 진행한 테이블이다. 정규형은 총 6가지로
1차 정규형, 2차 정규형, 3차 정규형, BCNF, 4차 정규형, 5차 정규형이 있다.
아 근데!
정규화를 배우기 앞서 함수 종속성을 알아볼 필요가 있다.
함수 종속성
3. 함수적 종속(Functional Dependency)
어떤 릴레이션에서 속성들의 부분 집합을 X, Y라 할 때,
임의 튜플에서 X의 값이 Y의 값을 함수적으로 결정한다면-
Y가 X에 함수적으로 종속되었다고 한다.
=> 학번만 보더라도 몇 학년인줄 아는 상황 :
학번은 학년에 종속되어 있다!
학번만 봐도 학년을 알 수 있으니까.
기호로 X→Y로 표시
① 추론
재귀 규칙 : X⊇Y 이면 X→Y
증가 규칙 : X→Y 이면 WX→WY 이고 WX→Y
이행 규칙 : X→Y 이고 Y→Z 이면 X→Z
유니온 규칙 : X→Y 이고 X→Z 이면 X→YZ
분해 규칙 : X→YZ 이면 X→Y와 X→Z
가이행 규칙 : W→X 이고 XY→Z 이면 WY→Z
함수 종속성은 X가 Y를 결정한다를 표현하면 X → Y 이다. X는 Y를 결정짓는 키이다.
완전 함수 종속성 :
X' ⊂ X 이고 X → Y 일 때, X' → Y 존재하지 않다는 것이다.
부분 함수 종속성 :
X' ⊂ X 이고 X → Y 일 때, X' → Y 존재한다는 것이다.
이행 함수 종속성
X → Y 이고 Y → Z 일 때, X → Z 존재한다는 것이다.
③ 정규화 과정
대표사진 삭제
사진 설명을 입력하세요.
제1 NF : 두 : 도메인이 원자값이 아닌 것을 제거
제2 NF : 부 : 부분 함수 종속을 제거
제3 NF : 이 : 이행 종속을 제거
BCNF : 결 : 결정자가 후보키가 아닌 것을 제거
제4 NF : 다 : 다치 종속 제거
제5 NF : 조 : 조인 종속성 제거
② 체계
제1 NF : 두 : 도메인이 원자값이 아닌 것을 제거
제2 NF : 부 : 부분 함수 종속을 제거
제3 NF : 이 : 이행 종속을 제거
BCNF : 결 : 결정자가 후보키가 아닌 것을 제거
제4 NF : 다 : 다치 종속 제거
제5 NF : 조 : 조인 종속성 제거
[ 문제 ]
9. 질의어 처리
1. 질의어 처리 단계
SQL과 같은 고급 질의어로 표현되는 질의문은 먼저 검사 후 파싱한다.
검사기 : 질의문에 나온 언어의 요소(토큰)들을 식별한다.
파서 : 질의문을 분석해서 질의어 구문법(Syntax rule)에 맞는지 여부를 검사
컴퓨터가 처리할 수 있는 트리나 그래프같은 자료 구조의 내부 표현으로 변환
질의어 최적기가 질의문 계획을 생성, 선정한다.
계획을 실행하기 위한 코드를 생성
생성된 코드를 런타임 DB 처리기에서 실행
2. 질의어 최적화
① 최적화 조건
1) 셀렉트 연산은 교환법칙을 이용해서 가능한 한 트리의 아래로 내림
2) 가장 제한적인 셀렉트 연산이 가장 먼저 수행될 수 있도록 정렬
3) 카티션 프로덕트와 해당 셀렉트 연산을 조인연산으로 통합
4) 프로젝트 연산은 가능한 한 프로젝트 속성을 분해해서 개별적
프로젝트로 만들어 이를 먼저 실행할 수 있도록 아래로 내림
SELECT name FROM student WHERE age < 26;
10. 회복
: 장애가 일어났을 때 DB를 장애 발생 이전의 일관된 상태로 복원시키는 것.
1. 트랜잭션
(1) 트랜잭션의 특징
1) 트랜잭션
동시에, 한꺼번에 모두 i수행되어야 할 일련의 DB 연산들
트랜잭션= 하나 이상의 DB연산(SQL 명령)
병행 제어 및 회복 작업의 논리적 단위
원자성을 가짐
2) 트랜잭션의 성질 : ACID
- Atomicity : 원자성, 전무의 실행만 존재, 일부만 실행은 없다.
- Consistency : 일관성, 실행을 성공적으로 완료하면 언제나 일관된 DB 상태로 된다.
- Isolation : 격리성, 트랜잭션 실행 중에 다른 트랜잭션이나 작업이 접근할 수 없다.
- Durability : 영속성, 실행을 성공적으로 끝내면 그 결과를 어떠한 경우에도 보장 받는다는 의미
3) 트랜잭션의 원자성과 관련된 연산
COMMIT : DB에 대한 갱신 작업이 영구적으로 반영됨.
ROLLBACK : 트랜잭션의 비정상적인 종료. DB에 대한 갱신 작업이 취소되어야 함(undo)
실패한 작업은 재시작 또는 폐기한다.
4) 트랜잭션의 상태
활동 - 부분 완료 - 완료
ㄴ장애 - 철회
2. 회복
(1) 장애의 유형
1) 트랜잭션 장애 : 입력 데이터의 불량, 자원의 부족 등으로
정상적인 실행을 계속할 수 없는 상태
2) 시스템 장애 : 하드웨어의 오작동으로 메모리에 있는 정보 손실
또는 교착상태가 발생한 경우
3) 미디어 장애 : 디스크 헤드 고장으로 인해 장치의 DB 일부가
손상된 경우
4) 행동 장애 : 데이터를 발견하지 못했거나 연산 실패이면 그 행동을
철회하고 응용 프로그램에 통보
(2) 회복의 기본 원리
1) 복사 및 덤프 : 아카이브
2) 로그 또는 저널 : 갱신된 속성의 옛 값/새 값
(3) 회복 조치 유형
1) REDO : 아카이브 사본 + 로그 -> 회복된 DB
2) UNDO : (아카이브 불필요) 로그 + 후향 취소 연산 -> 이전 DB 상태
(4) 미디어 장애시 회복 기법
최신의 아카이브 덤프로부터 DB를 적재
덤프 이후의 종료된 모든 트랜잭션들을 로그를 이용해 REDO
(5) 시스템 고장 시 회복 기법
1) 지연 갱신
REDO만 사용
출력을 트랜잭션이 종료되는 시점까지 미루었다가 한꺼번에 처리
고장이 발생하면 출력을 하지 않는다.
2) 즉시 갱신
REDO, UNDO 모두 사용
오류가 나면 우선적으로 오류부터 해결
3) 체크 포인트
REDO, UNDO 모두사용
체크 포인트 이전에 종료된 트랜잭션은 아무 작업도 필요없음.
체크포인트 이후에 실행부터 장애 이전에 종료된 트랜잭션은
체크포인트 이후부터 REDO
장애 발생 시점에 실행중인 트랜잭션은 UNDO
4) 그림자 페이징
'로그가 필요하지 않다.'
현재 테이블과 현재 테이블의 복산본인 그림자 테이블을 유지
그림자 페이지 테이블을 비휘발성 저장장치에 저장
갱신 연산 발생 시 현재 테이블의 내용만 변경하고
그림자 페이지 테이블의 내용은 변경하지 않는다.
트랜잭션이 성공적으로 완료되면 현재 테이블의 내용을
그림자 페이지 테이블에 저장
장점 : | 빠르다, 취소 연산이 쉽다, 회복 작업이 빠르고 쉽다. |
단점 : | 병행수행 불가, 병행수행을 하려면 로그 기법과 체크리스트를 병행 |
11. 병행제어
다중 사용자 환경에서 여러 개의 트랜잭션이 섞여서 실행되는데,
이러한 병행 실행은 특별한 제어 방법을 사용하지 않을 경우 갱신 손실과 같은 문제가 발생한다.
이러한 문제를 해결하는 방법을 병행제어라고 한다.
1. 병행제어를 하지 않을 때 문제점
*직렬가능성 : 트랜잭션을 병행 처리한 결과가 순차적으로 처리한 결과와 같을 때.
① 갱신 분실
일련의 갱신 작업시 일부 갱신 사실이 반영 안됨
T1 : read A T1 : read A
T2 : read A T1 : update A
T1 : update A //갱신 분실 T2 : read A
T2 : update A T2 : update A
② 모순성
T1 : read A
T2 : read/update A
T2 : read/update B
T1 : read B // T1이 읽고자 했던 값이 아님
③ 연쇄 복귀
T1 : read A
T1 : update A
T2 : read A // T2가 T1이 갱신한 값 사용
T2 : update A // T2 COMMIT
T1 : rollback // 이미 COMMIT 된 T2는 ROLLBACK 불능
2. 주요 병행 제어 방법
① 기본 로킹 기법
https://liveyourit.tistory.com/237
lock과 unlock 연산을 통해 트랜잭션의 데이터 아이템 제어.
하나의 트랜잭션만이 lock을 걸고 unlock할 수 있다.
lock된 데이터는 다른 트랜잭션이 접근할 수 없으며,
unlock될 때까지 대기하여야 한다.
이러한 방법을 사용할 경우 서로 다른 트랜잭션이 값 변경할 일 없이,
읽기 작업만 수행할 때는 오히려 시간이 낭비 된다.(lock 자꾸 걸었다 잠그니깐..)
② 확장된 로킹 방법
공유 로크(lock-S : shared lock)
참조만 하는 경우 읽기를 허용하여 다른 트랜잭션도 접근 가능
독점 로크(lock-X : exclusive lock)
읽기와 쓰기를 하는 경우 다른 트랜잭션의 접근을 불허
X S
X N N
S N Y
③ 2단계 로킹 규약
확장 단계 : lock만 수행, unlock 수행 불가.
축소 단계 : lock수행 불가, unlock만 수행.
④ 타임 스탬프
대기 소멸 방식
손해 대기 방식
3. 교착상태
두 개 이상의 트랜잭션이 동시에 대기 상태에 있으면서 각 트랜잭션은 연산을 계속 수행하기 위해 다른 트랜잭션 중 하나가 갖는 자원을 요구하며 대기하고 있는 상황을 말한다.
① 필요 충분 조건
1) 상호 배제
데이터는 서로 공유되지 않는다.
2) 점유 대기
점유한 데이터는 완전히 처리될 때까지 반환하지 않는다.
3) 비선점
강제적으로 실행중인 트랜잭션이 종료되지 않는다.
4) 순환 대기
대기 상태가 순환적으로 나타난다.
② 해결 방법
예방 :
- 점유와 대기 부정 : 한 번에 필요한 모든 자원을 할당
- 비선점 부정 : 자원을 가진 트랜잭션이 추가 자원을 못받으면
- 가지고 있는 자원까지 반납
- 순환대기 부정 : 각 자원별 할당 순서를 부여
회피 : 은행가 알고리즘(교착상태 발생 가능성이 있으면 자원 할당하지 않는다.)
탐지 : 탐지 알고리즘 실행, 자주 실행하면 성능 저하 발생.
12. 무결성과 보안
13. 분산 데이터베이스
CASCASE : 삭제할 요소가 참조 중이면 삭제.
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우,
함께 변경/삭제
RESTRICTED : 삭제할 요소가 참조 중이여도 삭제X
개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우,
변경/삭제가 취소.
14. 객체지향 데이터 베이스
15. 객체관계 데이터베이스
16. XML
17. 데이터 웨어하우스와 데이터 마이닝
정처기 준비 할 때 정리해둔 문서 입니다 !
다들 합격 기원 🙏
댓글