-
데이터베이스 전체 내용 정리데이터베이스/기본 2016. 11. 11. 23:39
이 글로 알 수 있는 것
- DB의 기본, SQL, 모델링, 관계 데이터 연산, key, 무결성, 이상, 정규화, 함수종속, 조인의 내용을 알 수 있다.
- 정규화 과정 중 각 단계의 이상현상(부분 함수 종속, 이행 함수 종속, 다치 종속, 조인 종속)을 이해하고 그 해결방법을 알 수 있다.
- 자연조인, 동등조인, 외부조인에 대해 정확히 이해할 수 있다.
- 정보처리기사 필기와 실기 과목을 준비하는데 유용하다.
데이터베이스 기본
- DB 정의
- 특정 조직의 업무를 수행하는데 있어서 필요한 상호 관련된 데이터들의 모임
- DB의 정의
- 통합 데이터, integrated data
- 검색의 효율성을 위해 중복을 최소화한 데이터
- 저장 데이터, stored data
- 컴퓨터가 접근가능 한 저장매체에 저장된 데이터
- 운영 데이터, operational data
- 조직 목표를 위해 존재가치 확실하고 반드시 필요한 데이터
- 공유 데이터, shared data
- 여러 프로그램들이 공동으로 사용하는 데이터
- DB의 특징
- 실시간 접근, real time accessibility
- 사용자 쿼리에 즉시 처리하고 응답한다.
- 계속 진화, continuos evolution
- 항상 최근의 데이터를 동적으로 유지한다.
- 동시 공유, concurrent sharing
- 여러 사용자가 동시에 원하는 데이터를 사용 가능하다.
- 내용 기반 참조, content reference
- 데이터를 참조할 때 내용으로 참조한다.
- 독립성, independence
- 논리적 독립성
- app과 DB와의 관계 : 데이터의 논리적 구조를 변경하더라도 app에 영향 주지 않는다.
- 물리적 독립성
- app과 보조메모리와의 관계 : 새로운 저장장치의 추가에도 app에 영향 주지 않는다.
- User의 분류
- 데이터베이스 관리자, DBA database administrator
- 데이터베이스를 정의하고 제어하는 사람 또는 그룹
- 데이터 관리자, DA data administrator
- 조직 내에서 데이터에 대한 정의, 체계화, 감독 및 보안 업무
- 데이터 설계자, DA data architect
- 데이터 구조를 체계적으로 정의하는 사람
- DBMS, database management system
- DBMS의 정의
- 파일시스템 문제를 해결하기 위해 제시된 SW
- 조직에 필요한 데이터를 데이터베이스에 통합해 저장하고 관리한다.
- 기존 파일시스템의 문제점
- 데이터 종속성
- app과 data파일 간 의존적 관계, app이 바뀌면 data도 바뀌고(혹은 그 반대)
- 데이터 중복성
- data의 중복으로 일관성 없어지고, 동등한 보안 수준과 무결성을 유지하기 힘들다.
- 데이터베이스 종류
- 관계형 데이터베이스
- 데이터를 열과 행으로 이뤄진 2차원의 릴레이션으 표현하는 DB의 한 종류이다.
- 객체형 데이터베이스
- ODB의 구성
- 객체, 객체식별자
- 속성, 메소드
- 클래스, 인스턴스
- 상속
- 오버로딩, 오버라이딩
- 객체 관계 데이터베이스
- RDB에 ODB 개념을 추가한 DB
- 분산 데이터베이스
- 논리적으로 같은 시스템에 속하나 물리적으로 분산된 DB
- 목표
- 위치 투명성
- 중복 투명성
- 병행 투명성
- 장애 투명성
- 멀티미디어 데이터베이스
- 텍스트, 그래픽, 정지영상, 동영상, 음성등 복합적으로 구성된 DB
- 주기억장치 데이터베이스
- DB전체를 주기억장치에 상주시킨 후, DB연산을 수행하는 시스템.
- 디스크IO발생x라 빠름
SQL
- SQL, structured query language
- 관계 DB를 위한 표준 질의어, 비절차적 데이터 언어
- SQL의 분류
- DDL, data define languge, 데이터 정의어
- DML, data manipulation language, 데이터 조작어
- DCL, data control language, 데이터 제어어
Schema
- Schema 정의
- DB의 구조와 제약조건에 관한 전반적인 명세
- Schema 특징
- 데이터 사전(data dictionary)=시스템 카탈로그(system catalog)에 저장
- 데이터베이스에 저장되는 데이터에 관한 정보, 메타 데이터를 유지하는 시스템 데이터베이스
- 데이터베이스의 구조(사용자의 관점에 따라 분류)
- 외부 스키마(external schema, =서브 스키마 =사용자 뷰)
- 사용자/app프로그래머가 각 개인의 입장에서 필요로 하는 DB의 논리적 구조 정의
- 개념 스키마(흔히 말하는 스키마)
- 개체 간의 관계와 제약조건, DB의 접근권한, 보안정책 및 무결성 규정에 관한 명세를 정의
- DBA가 작성한다.
- 내부 스키마
- DB의 물리적 구조를 정의한다.
데이터베이스 설계
- DB 설계란?
- DB 스키마를 개발하는 과정이다.
- 설계 단계
- 요구조건 분석
- 개념적 설계(for 사람)
- 개념 스키마 모델링
- 추상화를 통해 개념 스키마를 만드는데 Entity와 Relationship을 사용하는 추상화를 ER Model이라고 한다.
- 트랜잭션 모델링
- 논리적 설계(for 컴퓨터)
- 컴퓨터가 이해하고 처리, 특정 DBMS가 지원 가능한 논리적 데이터 구조로 변환한다.
- 논리 스키마 모델링
- 관계형 DBMS의 경우 ER model을 Relation schema로 변환한다.
- 더 좋은 Relation schema를 위해 정규화 과정을 수행한다. 데이터 중복과 데이터 종속을 방지하기 위함이다.
- 트랜잭션의 전체적인 골격을 개발하고 인터페이스를 정의한다.
- 물리적 설계
- 물리 스키마 설계 과정
- DB파일에 대한 저장구조와 접근 경로를 설정한다.
- 데이터베이스 구현
- 해당 DBMS의 DDL을 통해 구축한다.
- 데이터 모델링
- 개념적 데이터 모델링(conceptual modeling)
- 논리적 데이터 모델링(logical modeling)
- 데이터 모델
- 개념적 데이터 모델
- 개념-관계 모델
- 개체-관계 다이어그램
- 논리적 데이터 모델
- 관계 데이터 모델
- 네트워크 데이터 모델
- 계층 데이터 모델
- 데이터 모델 구성요소
- 구조, structure
- entity간 관계
- 연산, operation
- 데이터 처리 방법
- 제약조건, constraint
- 실제 데이터의 논리적인 제약조건
- 개체 관계 모델, ER model, entity-relationship model
- ER model이란?
- 개념적 데이터 모델의 대표, 현실세계를 표현한다.
- ERD, ER-diagram
- entity, relationship, attribute을 도형화해서 표현한다.
- entity □
- 현실세계에서 구별되는 모든 것. 각 entity만의 고유 특성, 상태를 하나이상 가지고 있다.
- entity type
- entity occurrence들의 공통의 attribute를 가지는 entity class
- entity를 고유의 이름과 속성들로 정의한 것. record type과 대응됨
- entity instance = entity occurrence
- entity를 구성하고 있는 속성이 실제값을 가짐으로써 실체화된 entity
- attribute ○
- entity나 relationship이 가지고 있는 고유의 특성. 의미있는 데이터의 가장 작은 논리적 단위.
- 도메인, domain
- attribute가 가질수 있는 값의 집합
- relationship ◇
- entity와 entity가 맺고 있는 의미 있는 연관성. entity 집합들 사이의 대응관계, mapping을 의미
- relationship type
- 차수, degree
- relationship에 참여하는 entity type의 개수
- 대응 카디널리티, mapping cardinality
- relationship에 참여하는 entity occurrence의 개수
- 1 : 1 관계
- 1 : N 관계
- N : M 관계
- 관계 데이터 모델, relationship data model
- RD model이란?
- 논리적 데이터 모델의 대표, table로 표현한다.
- relation
- 2차원 테이블로 데이터를 표현하는 수단
- relation schema
- relation의 이름, 각 attribute에 대해 정의한 것
- relation instance
- relation에 들어있는 tuple들의 집합
- attribute
- relation의 columns
- tuple
- relation의 rows
- domain, 도메인
- 하나의 attribute가 가질 수 있는 같은 type 값들의 집합
- 하나의 attribute가 가질 수 있는 모든 값의 집합. '이름 속성'에는 문자열 집합만이 정의됨
- 한 속성이 가질 수 있는 값들의 범위
- degree
- relation의 attribute의 개수
- cardinality
- relation의 tuple의 개수
관계 데이터 연산
- 관계 데이터 연산, relational data operation
- 관계 데이터 모델의 연산
- 원하는 데이터를 얻기 위해 relation에 필요한 처리요구를 수행하는 것
- 관계 데이터 연산의 종류
- 관계 대수
- 원하는 데이터를 얻기 위해 데이터 처리과정을 순서대로 기술
- 절차 중심, 절차적언어
- 관계 해석
- 원하는 데이터를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술
- 결과 중심, 비절차적언어
관계 대수
- 관계 대수, relational algebra
- 원하는 결과를 얻기 위해 relation의 처리과정을 순서대로 기술하는 언어
- 관계 대수의 종류
- 일반 집합 연산자
- 순수 관계 연산자
- 일반 집합 연산자, set operation
- relation이 tuple의 집합이라는 개념을 이용한 연산자
- r1과 r2의 합집합을 반환(중복되는 tuple 제거)
- r1과 r2의 교집합을 반환
- 차집합, difference, -
- r1과 r2의 차집합을 반환
- r1의 각 tuple과 r2의 각 tuple을 모두 연결해 만들어진 새로운 tuple을 반환
- 그냥 r1과 r2를 조합한 것
- 순수 관계 연산자
- relation의 구조와 특성을 이용하는 연산자
- 셀렉트, select, σ
- 조건을 만족하는 tuple 반환
- e.g. 19금 이상만: σ나이>19(고객)
- 프로젝트, project, π
- 주어진 attribute의 값으로만 구성된 tuple 반환
- e.g. 사는 곳은 궁금하지 않아: π이름,나이(고객)
- 조인, join
- 공통 attribute를 이용해 r1과 r2의 tuple들을 연결해 만들어진 새로운 tuple 반환
- Cartesian product 후 select연산 수행한 것과 같음
- 두개의 r1, r2에서 공통된 속성을 연결하는 것
(조인의 종류 상세는 제일 아래에 있음)
- 디비전, division, ÷
- r2의 모든 tuple과 관련있는 r1의 tuple을 반환
관계 해석
- 관계해석, relational calculus
- 처리를 원하는 데이터가 무엇인지만 기술하는 언어
- 수학의 프레디킷 해석에 기반을 두고 있음
- 관계해석의 종류
- 투플관계해석
- 도메인관계해석
Data Language
- data language
- DB의 구축과 이용을 위해 DBMS와의 통신수단
- DDL, data definition language, 데이터 정의어
- 스키마를 정의, 수정, 삭제 위한 언어
- create/alter/drop
- DML, data manipulation language, 데이터 조작어
- 데이터 삽입, 삭제, 수정, 검색 등 처리 요구 위한 언어
- select/insert/delete/update
- 절차적 조작어/비절차적 조작어
- DCL, data control language, 데이터 제어어
- 내부 필요 규칙, 기법 정의 위한 언어
- commit/rollback/grant/revoke
- 다음 목적으로 사용한다.
- 무결성
- 정확하고 유효한 데이터만 유지
- 보안
- 허가받지 않은 사용자의 데이터접근 차단, 허가된 사용자에 권한 부여
- 회복
- 장애 발생해도 데이터 일관성 유지
- 동시성 제어
- 동시 공유 자원
Mapping Rule
- mapping rule
- ER model을 relationship data model로 변환,
- 매핑규칙, 논리적 설계 규칙
- mapping rule 과정
- 모든 entity는 relation으로 변환한다
- entity A, B -> relation A, B로 표기
- relationship 종류에 따라 다음 과정 수행
- N:M
- 이 관계는 relation로 변환한다.
- rA와 rB의 PK를 별도의 릴레이션로 표현. 즉, 두개의 1:N으로 변환시켜 표현한다
- 1:1
- 이 관계는 FK로 표현한다.
- rA나 rB의 PK를 다른 릴레이션의 FK로추가
- 1:N
- 이 관계는 FK로 표현한다.
- rA와 PK를 rB의 FK로 추가
- 다중값 속성은 relation로 변환한다.
key
키 종류
설명
특징
유일성
최소성
슈퍼키, super key
유일성만을 만족하는 attribute, 또는 attribute 집합
O
X
후보키, candiate key
tuple을 유일하게 식별하며 최소성을 만족하는 attribute, 또는 attribute집합
O
O
기본키, primary key
- candidate key 중 선정된 키
- 기본적으로 사용하기 위해 선택한 키
*PK가 여러 개의 속성으로 이뤄짐 = 복합키
중복된 값X
Not Null
O
O
대체키, alternate key
- candidate key 중 pk 뺀 나머지 키들
*기본을 대체
O
O
외래키, foreign key
- 다른 relation의 pk를 참조하는 attribute들
- rA의 attribute FK가 rB의 PK인 것
- FK를 가진 r은 참조하는 relation
- FK가 참조하는 PK를 가진 r은 참조되는 relation
- 주문r은 고객r을 참조한다. 주문r -> 고객r, 고객r은 참조r
중복된 값X
Not Null
O
O
무결성
- 무결성, integrity
- 데이터를 결함이 없는 상태로 유지하는 것. 정확하고 유효하게 유지하는 것
- 무결성 제약조건, integrity constraint(2014-2)
- DBMS가 데이터의 무결성을 보장하고 일관되게 유지하기 위한 규칙
- 무결성 제약조건 종류
- entity 무결성 제약조건
- PK는 unique하고 not null이어야 한다.
- referential 무결성 제약조건
- FK는 Null 또는 참조 릴레이션에 있는 PK값이다.
- NULL 무결성
- 특정 attribute값이 not null
- unique 무결성
- domain 무결성
- key 무결성
- relationship 무결성
이상
- 이상, anomaly
- 테이블의 일부 속성들이 종속으로 인해 데이터 중복이 발생하고, 이 때문에 테이블조작 시 문제 발생하는 현상
- 삽입 이상
- 새 데이터 삽입 위해 불필요 데이터도 함께 삽입해야 하는 문제
- 삭제 이상
- 투플 삭제 시 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실 문제
- 갱신 이상
- 중복 투플 중 일부만 변경하여 데이터가 불일치하는 문제
- 그래서 정규화가 필요하다. 정규화는 attribute들 간 종속성을 분석해서, 하나의 종속성은 하나의 릴레이션에 표현되도록 분해하는 것을 말한다.
정규화
- 정규화, normalization
- 이상현상을 제거하면서 DB를 올바르게 설계해 나가는 과정
- 이상현상이 발생하지 않도록 릴레이션을 분해하는 과정
- 함수적 종성석을 근거로 관련있는 속성들로만 릴레이션 구성
함수 종속
- 함수 종속, functional dependency
- X와 Y는 하나의 릴레이션을 구성하는 attribute들의 부분집합
- X → Y
= X가 Y를 함수적으로 결정한다.
= Y가 X에 함수적으로 종속되어 있다.
- 릴레이션 내의 모든 tuple을 대상으로 하나의 X값에 대한 Y값이 항상 하나이다.
- X는 결정자
- Y는 종속자
정규형
- 정규형, normal form
- 릴레이션이 정규화된 정도, 각 정규형마다 제약조건이 존재.
- 차수가 높아질수록 요구되는 제약조건 많아지고 엄격해진다.
정규화 과정
- 비정규형
- 자격 없는 릴레이션
- 이상현상 발생
- attribute값에 여러 개의 값들이 들어가있다. 다중값 속성을 포함하고 있다.
- 이를 원자값으로만 구성하도록 분해해야 한다.
- 제1정규형, 1NF
- 릴레이션의 모든 속성이 분해되지 않는 원자값인 것
- 이상현상
- PK에 완전 함수 종속되지 못하고 PK의 일부분에 부분 함수 종속되는 속성이 존재하고 있다.
- 부분 함수 종속이 제거되도록 릴레이션을 분해해야 한다.
- 제2정규형, 2NF
- 1NF에 속하고, PK아닌 모든 속성이 PK에 완전 함수 종속 되는 것
- 이상현상
- 함수 종속성을 여러 개 포함하고 있다. 이행적 함수 종속이 존재하고 있다.
- 이행적 함수 종속이 제거되도록 릴레이션을 분해해야 한다.
- 제3정규형, 3NF
- 2NF에 속하고, 모든 속성이 PK에 이행적 함수 종속이 되지 않는 것
- 이상현상 발생
- 한 속성이 후보키가 아님에도 다른 속성을 결정하기 때문이다.
- 후보키가 아닌 결정자를 제거한다.
- 보이스/코드 정규형, BCNF, boyce/codd normal form
- 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키가 되는 것
- 하나의 릴레이션에 여러 candidate key가 존재하는 경우, 3NF까지 만족해도 이상현생 발생 가능
- 이상현상 발생
- 다치 종속 발생, multi-valued dependency (2013-1)
- 다치 종속을 제거되도록 릴레이션을 분해해야 한다.
- 제4정규형, 4NF
- BCNF에 속하고, 함수 종속이 아닌 다치 종속을 제거한 것
- 이상현상
- 조인 종속 발생
- 제5정규형, 5NF
- 4NF에 속하고, 후보키를 통하지 않는 조인 종속을 제거한 것
- 릴레이션의 모든 조인 종속이 릴레이션의 후보키를 통해서만 성립되는 정규형이다.
정규화 과정 중 이상현상
- 1NF의 이상현상, 부분 함수 종속 존재
- 부분 함수 종속의 예
- (등급)과 (할인율)은 PK에 완전 함수 종속되지 못하고 (고객아이디)에 부분 함수 종속된다.
- 부분 함수 종속의 제거
- 2NF의 이상현상, 이행적 함수 종속 존재
- 이행적 함수 종속의 예
- (고객아이디) -> (등급)
- (등급) -> (할인율)
- (고객아이디) -> (할인율)
- 이행적 함수 종속의 제거
- 3NF의 이상현상, 후보키가 아닌 결정자 존재
- 예
- (학생ID, 강좌) -> (담당강사)
- (담당강사) -> (강좌)
- (담당강사)가 후보키가 아님에도 (강좌)속성을 결정하므로 이상현상 발생
- 후보키가 아닌 결정자 제거
- BCNF의 이상현상, 다치 종속 존재
- 다치 종속의 예
- 복합속성 (수강, 담임)에 대응하는 (교재)는 (수강)에만 종속되고 (담임)에는 무관하다. (교재)는 (수강)에 다치 종속이 존재한다.
- (수강, 교재)에 대응하는 (담임)는 (수강)에만 종속되고 (교재)에는 무관하다. (담임)는 (수강)에 다치 종속이 존재한다.
- 다치 종속의 제거
- 조인 종속
- 조인종속성이란 어떤 릴레이션R의 속성을 분할한 릴레이션 R1, R2, …, Rn이 있을 때, R이 분할된 릴레이션 모두 자연조인한 결과와 동일한 경우를 말한다.
- 5NF는 릴레이션 R의 모든 조인종속성이 R의 후보키를 통해서만 성립되는 정규형이다.
조인
- 조인이 필요한 이유
- RDB는 정규화를 수행하면 의미있는 데이터의 집합으로 테이블이 구성되고, 각 테이블끼리는 관계(relationship)을 가지게 된다. 그래서 RDB는 저장 공간의 효율성과 확장성이 향상된다.
- 그러나 정규화로 데이터가 여러 테이블로 나뉘어 지므로, 각각 테이블에 저장된 데이터를 효과적으로 검색하려면 조인이 필요하다.
- 조인은, 테이블 간 의미있는 데이터(행)를 연결하는데 활용된다.
- 내부 조인, inner join
- 가장 일반적인 형태의 조인 기법
- 둘 이상의 테이블에 존재하는 공통 속성의 값이 같은 것을 결과로 추출한다.
- 내부 조인의 종류
- 동등 조인, equi join
- 자연 조인, natural join
- 동등 조인
- 조인의 가장 일반적인 활용 형식
- 둘 이상의 테이블에 존재하는 공통 속성의 동등 비교만을 사용한다.
- 동등 조인의 예
- 자연 조인
- 동등 조인과 유사하나, 조인 대상 테이블의 모든 속성을 비교하여 같은 속성명을 가진 속성으로 조인을 수행한다. 이때 같은 이름을 가진 속성은 한번만 추출한다.
- 자연 조인의 예
- 외부 조인, outer join
- 외부 조인의 예