티스토리 뷰
데이터베이스 개요
데이터베이스 구성
- 개체 (Entity), 속성 (Attribute), 관계 (Relationship)
요소
- 논리적 데이터 구조 (Structure) : 논리적인 개체 타입들 간의 관계, 데이터 구조 및 정적 성질을 표현
- 연산 (Operation) : 실제 데이터를 처리하는 작업에 대한 명세로, 조작하는 기본 도구
- 제약 조건 (Constraint) : DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건
SQL 명령어
- 데이터 정의어 (DDL, Data Define Language)
- CREATE, ALTER, DROP, RENAME
- 데이터 조작어 (DML, Data Manipulation Language)
- SELECT, INSERT, UPDATE, DELETE
- 데이터 제어어 (DCL, Data Control Language)
- GRANT, REVOKE, COMMIT, ROLLBACK
스키마
- 외부 스키마 (External Schema) = 서브 스키마
- 사용자의 관점에서 보여주는 데이터베이스 구조로 전체 데이터베이스의 일부이므로 서브 스키마라고도 한다
- 개념 스키마 (Conceptual Schema)
- 데이터베이스 전체를 정의한 것으로 데이터 개체, 관계, 제약조건, 접근권한, 무결성 규칙 등을 명세한 것
- 내부 스키마 (Internal Schema)
- 물리적 저장 장치의 입장에서 본 데이터베이스 구조로서 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타낸다
데이터베이스 구성
E-R 다이어그램(개체-관계)
- 개념적 데이터 모델의 가장 대표적인 것
- 1976년 피터 첸(Peter Chen)에 의해 제안되고 기본적인 구성 요소가 정립됨
- 데이터를 개체 (Entity), 속성 (Attribute), 관계 (Relationship)으로 묘사
관계 데이터 모델
릴레이션 (Relation) - 테이블
- 모든 속성 값은 원자 값을 갖는다
- 한 릴레이션에 포함된 튜플은 모두 상이하다
- 한 릴레이션에 포함된 튜플 사이에는 순서가 없다
- 한 릴레이션을 구성하는 속성 사이에는 순서가 상관이 없다
- 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변한다
- 애트리뷰트는 논리적으로 쪼갤 수 없는 원자값으로 저장한다
- 릴레이션 관련 용어
- 애트리뷰트 (Attribute) : 테이블의 각 열을 의미, 속성/필드와 같은 개념
- 도메인 (Domain) : 하나의 애트리뷰트가 가질 수 있는 원자값들의 집합
- 튜플 (Tuple) : 테이블이 한 행을 구성하는 속성들의 집합으로 레코드의 개념
- 차수 (Degree) : 애트리뷰트의 수
- 기수 (Cardinality, 대응수) : 튜플의 수
- 릴레이션의 특성
- 튜플의 유일성 : 릴레이션의 튜플들은 중복되지 않고 모두 상이
- 튜플의 무순서성 : 한 릴레이션에 포함된 튜플 사이에는 순서가 없다
- 애트리뷰트의 무순서성 : 릴레이션에서 애트리뷰트들 간의 순서는 의미가 없다
- 애트리뷰트의 원자성 : 모든 애트리뷰트는 원자값을 가지며, 애트리뷰트의 값은 논리적으로 분해가 불가능
- 키(Key)의 종류
- 슈퍼키 (Super Key)
- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서, 릴레이션을 구성하는 모든 튜플에 대한 유일성은 만족시키지만 최소성은 만족시키지 못한다
- 후보키 (Candidate Key)
- 릴레이션에 있는 모든 튜플에 대해 유일성과 최소성을 만족시켜야 한다
- 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들
- 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재
- 기본키 (Primary Key)
- 후보키 중에서 특별히 선정된 주키 (Main Key)로, 중복된 값과 NULL값을 가질 수 없다
- 후보키의 성질인 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키
- 대체키 (Alternate Key)
- 기본키를 제외한 나머지 후보키
- 외래키 (Foreign Key)
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
- 슈퍼키 (Super Key)
무결성 (Integrity)
- 데이터가 만족해야 될 제약 조건, 규정을 참조할 때 사용하는 식별자 등의 요소가 포함될 수 있다
- 무결성 규정의 대상으로는 도메인, 키, 종속성 등이 있다
- 릴레이션 무결성 규정 (Relation Integrity Rules)은 릴레이션을 조작하는 과정에서의 의미적 관계를 명세한다
- 개체 무결성 (Entity Integrity)
- 기본키는 NULL 값을 가져서는 안 되며, 릴레이션 내에 오직 하나의 값만 존재해야 한다
- 릴레이션에서 기본 키를 구성하는 속성은 널(Null) 값이나 중복 값을 가질 수 없다
- 기본키의 속성 값이 널(NULL) 값이 아닌 원자 값을 갖는 성질
- 기본키에 속해 있는 애트리뷰트는 널값이나 중복값을 가질 수 없다
- 참조 무결성 (Referential Integrity)
- 릴레이션 R1에 속한 애튜리뷰트의 조합인 외래키를 변경하려면 이를 참조하고 있는 릴레이션 R2의 기본키도 변경해야 한다
- 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다
- 도메인 무결성 (Domain Integrity)
- 릴레이션 내의 튜플들이 각 속성(Attribute)의 도메인에 지정된 값 만을 가져야 한다
- 주어진 속성 값이 정의된 도메인에 속한 값이어야 한다
- 사용자 정의 무결성 (User-Defined Integrity)
- 속성 값들이 사용자가 정의한 제약 조건에 만족해야 한다
관계 대수 (Relational Algebra)
- 릴레이션 조작을 위한 연산의 집합으로 피연산자와 결과가 모두 릴레이션이다
- 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다
- 일반 집합 연산과 순수 관계 연산으로 구분된다
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게(How) 유도하는가를 기술하는 절차적인 언어
- 일반 집합 연산자
- 합집합 (Union, ∪) : 두 개의 릴레이션의 합이 추출되고, 중복은 제거됨 (R∪S)
- 교집합 (Intersection, ∩) : R릴레이션과 S릴레이션의 중복되는 값들만 추출 (R∩S)
- 차집합 (Difference, —) : R릴레이션에서 S릴레이션에 중복되지 않는 값들만 추출 (R–S)
- 카티션 프로덕트 (Cartesian product, Х) : 두 릴레이션의 가능한 모든 튜플들의 집합 (R*S)
- 순수 관계 연산자
- 셀렉트 (Select, σ)
- 조건을 만족하는 릴레이션의 수평적 부분 집합으로 구성한다
- 릴레이션의 행에 해당하는 튜플들을 구하는 것이므로 수평 연산이라 한다
- 릴레이션에서 조건을 만족하는 튜플 반환
- 프로젝트 (Project, π)
- 릴레이션의 일부 속성만 추출하여 중복되는 튜플은 제거한 후 새로운 릴레이션을 만든다
- 속성들의 부분 집합, 중복은 제거됨 (수직 연산)
- 릴레이션에서 주어진 속성들의 값으로만 구성된 튜플 반환
- 조인 (Join, ▷◁)
- 두 개의 릴레이션이 공통으로 가지고 있는 속성을 이용하여 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만든다
- 디비전 (Division, ÷)
- R릴레이션에서 S릴레이션의 속성 도메인 값과 일치하는 R릴레이션의 튜플들을 찾아낸다
- 셀렉트 (Select, σ)
관계 데이터베이스 언어
프로시저(Procedure)
- 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행, 처리 결과는 한 개 이상의 값 혹은 반환을 하지 않음
트리거(Trigger)
- 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL
뷰(View)
- DBA는 보안 측면에서 뷰를 활용할 수 있다
- 뷰 위에 또 다른 뷰를 정의할 수 있다
- 독립적인 인덱스를 가질 수 없다
- 뷰에 대한 삽입, 갱신, 삭제 연산 시 제약사항이 따른다
- 뷰가 정의된 기본 테이블이 제거되면 뷰도 자동적으로 제거된다
- 뷰의 정의는 ALTER문을 이용하여 변경할 수 없다
- 데이터 보안 용이
- 사용자 데이터 관리 용이
- 뷰는 CREATE 문을 사용하여 정의한다
- 뷰는 데이터의 논리적 독립성을 제공한다
- 뷰를 제거할 때에는 DROP 문을 사용한다
데이터베이스 설계와 정규화
데이터베이스 설계
- 개념적 설계 (정보 모델링, 개념화) (Conceptual Design)
- 개념 스키마 모델링
- 트랜잭션 모델링
- 독립적인 개념 스키마 설계
- E-R 다이어그램 모델
- 사용자의 요구에 대한 트랜잭션을 모델링한다
- 논리적 설계 (데이터 모델링) (Logical Design)
- 트랜잭션 인터페이스 설계
- 관계형 데이터베이스에서는 테이블을 설계하는 단계이다 (RDB)
- 데이터 타입 및 데이터 타입들 간의 관계로 표현한다
- 스키마의 평가 및 정제
- 논리적 데이터베이스 구조로 매핑 (Mapping)
- DBMS에 맞는 논리적 스키마를 설계한다
- 물리적 설계 (데이터 구조화)
- 물리적 설계의 목적은 효율적인 방법으로 데이터를 저장하는 것이다
- 트랜잭션 처리량과 응답시간, 디스크 용량 등을 고려해야 한다
- 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 설계한다
- 레코드 집중의 분석 및 설계
- 접근 경로 설계
- 저장 레코드의 양식 설계
정규화(Normalization) #도부이결다조
- 정규화는 데이터베이스의 논리적 설계 단계에서 수행한다
- 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다
- 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄인다
- 데이터 구조의 안정성 최대화
- 테이블 불일치 위험의 최소화
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만든다
- 효과적인 검색 알고리즘을 생성할 수 있다
- 1NF (제1 정규형)
- 릴레이션에 속한 모든 도메인이 원자 값(Atomic Value)만으로 되어 있는 정규형
- 2NF (제2 정규형)
- 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 부분적 함수 종속을 제거한 정규형
- 키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속 관계를 만족해야 한다
- 3NF (제3 정규형)
- 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수 종속을 제거한 정규형
- A → B이고 B → C일 때 A → C를 만족하는 관계 (=이행 규칙, 이행적 함수 종속 관계)
- BCNF (보이스/코드 정규형)
- 릴레이션 R에서 결정자가 후보키가 아닌 함수 종속 제거
- 4NF (제4 정규형)
- 릴레이션 R에 다중치 종속 제거(다치 종속 제거)
- 5NF (제5 정규형)
- 후보키를 통하지 않는 조인 종속 (JD : Join Dependency) 제거해야 만족하는 정규형
반정규화(Denormalization)
- 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
고급 데이터베이스
트랜잭션(Transaction)
- 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산
- 데이터베이스의 상태를 변환시키기 위하여 논리적 기능을 수행하는 하나의 작업 단위
- 트랜잭션의 성질 #독일영원(ICDA)
- 독립성/격리성 (Isolation)
- 하나로 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없음을 의미한다
- 일관성 (Consistency)
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다
- 영속성 (Durability)
- 성공적으로 완료된 트랜잭션 결과는 시스템이 고장 나더라도 영구적으로 반영되어야 한다
- 원자성 (Atomicity)
- 트랜잭션 연산은 모두 실행되거나, 모두 실행되지 않아야 한다 (All or Nothing)
- Commit과 Rollback 명령어에 의해 보장받는다
- 독립성/격리성 (Isolation)
병행 제어
- 병행제어 기법의 종류
- 로킹 기법 (Locking)
- 잠금(Lock)을 설정한 트랜잭션이 해제(Unlock)할 때까지 독점적으로 사용할 수 있게 상호배제 기능을 제공
- 타임스탬프 기법 (Timestamp)
- 동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 처리 순서를 미리 정하는 방법
- 낙관적 검증 (최적 병행 수행기법)
- 일단 트랜잭션을 수행하고 난 후 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법
- 다중 버전 기법
- 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬 가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법
- 로킹 기법 (Locking)
로킹 단위
- 로킹의 대상이 되는 객체의 크기를 로킹 단위라고 한다
- 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있다
- 한꺼번에 로킹 할 수 있는 객체의 크기를 로킹 단위라고 한다
- 로킹 단위가 작으면 로크의 수가 많아지고, 로킹 오버헤드가 증가하고, 병행성 수준이 높아지고, 데이터베이스 공유도가 증가한다. 병행 제어 기법이 복잡해진다
분산 데이터베이스의 목표 #병이 위중 복분장
- 병행 투명성 (Concurrency Transparency)
- 다중 사용자들이 자원들을 자동으로 공유할 수 있다.
- 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음
- 이주 투명성
- 자원들이 한 곳에서 다른 곳으로 이동하면 자원들의 이름도 자동으로 바꾸어지지 않는다
- 위치 투명성 (Location Transparency)
- 하드웨어와 소프트웨어의 물리적 위치를 사용자가 알 필요가 없다
- 중복 투명성 (Replication Transparency, 복제 투명성)
- 동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행
- 복제 투명성
- 사용자에게 통지할 필요 없이 시스템 안에 파일들과 자원들의 부가적인 복사를 자유로이 할 수 있다
- 분할 투명성 (Division Transparency)
- 하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여려 시스템에 저장되어 있음을 인식할 필요가 없음
- 장애 투명성 (Failure Transparency)
- 데이터베이스의 분산된 물리적 환경에서 특정 지역의 컴퓨터 시스템이나 네트워크에 장애가 발생해도 데이터 무결성이 보장된다
'IT 지식' 카테고리의 다른 글
[정보처리기사] 정보시스템 구축관리 (0) | 2023.03.26 |
---|---|
[정보처리기사] 프로그래밍 언어 활용 (0) | 2023.03.21 |
[정보처리기사] 소프트웨어 개발 (2) | 2023.03.12 |
[정보처리기사] 소프트웨어 설계 (0) | 2023.03.07 |