3과목. 데이터베이스 구축
1장. 논리 데이터베이스 설계
075. 데이터베이스 설계(A)
사용자의 요구를 분석하여 그것들을 컴퓨터에 저장할 수 있는 데이터베이스 구조에 맞게 변형한 후 특정 DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용할 수 있게 하는 것
데이터베이스 설계 시 고려사항
- 무결성: 제약 조건을 항상 만족해야 함
- 일관성: 데이터들 사이나 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 함
- 회복: 장애 발생 시 해당 직전의 상태로 복구할 수 있어야 함
- 보안: 불법적인 데이터 노출 또는 변경/손실로부터 보호할 수 있어야 함
- 효율성: 응답시간 단축, 시스템 생산성, 저장 공간 최적화 등이 가능해야 함
- 데이터베이스 확장: DB 운영에 영향 없이 지속적으로 데이터를 추가할 수 있어야 함
데이터베이스 설계 순서
- 요구 조건 분석: 데이터베이스를 사용할 사람들로부터 필요한 용도를 파악함
- 개념적 설계(정보 모델링, 개념화, DBMS에 독립적인 개념 스키마를 설계)
다른 사람과 통신하기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
개념 스키마 모델링과 트랜잭션 모델링을 병행 수행
DBMS에 독립적인 E-R 다이어그램으로 작성
- 논리적 설계(데이터 모델링, DBMS에 종속적인 논리 스키마를 설계)
저장 장치에 저장할 수 있도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로
변환(mapping)시키는 과정
개념 스키마를 평가 및 정제하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계
트랜잭션의 인터페이스를 설계
관계형 데이터베이스라면 테이블을 설계하는 단계
- 물리적 설계(데이터 구조화)
물리적 구조의 데이터로 변환하는 과정
DB 파일의 저장 구조 및 액세스 경로를 결정
컴퓨터에 데이터가 저장되는 방법을 묘사
- 데이터베이스 구현
사용하려는 특정 DBMS의 DDL(데이터 정의어)를 이용하여,
스키마 기술 후 컴파일 하여 빈 데이터베이스 파일을 생성함
응용 프로그램을 위한 트랜잭션 작성
데이터 베이스 접근을 위한 응용 프로그램 작성
076. 데이터 모델의 개념(B)
현실 세계 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형
데이터의 구조(Schema)를 논리적으로 표현하기 위해 사용되는 지능적 도구
데이터 모델 구성 요소
- 개체(Entity): 데이터베이스에 표현하려는 것으로 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체
- 속성(Attribute): 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당함
- 관계(Relationship): 개체 간의 관계 또는 속성 간의 논리적인 연결을 의미
데이터 모델 종류
- 개념적 데이터 모델: 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현하기 때문에 정보 모델이라고도 함
대표적인 개념적 데이터 모델로는 E-R모델이 있음
- 논리적 모델 데이터: 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정
단순히 데이터 모델이라고 하면 논리적 데이터 모델을 의미함
특정 DBMS는 특정 논리적 데이터 모델 하나만 선정하여 사용함
관계 모델/계층 모델/네트워크 모델로 구분
- 물리적 데이터 모델
데이터 모델에 표시할 요소
- 구조(Structure): 논리적으로 표현된 개체 타입들 간의 관계로서 데이터 구조 및 정적 성질을 표현함
- 연산(Operation): 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구
- 제약 조건(Constraint): 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건
077. 데이터 모델의 구성 요소 - 개체(Entity)(C)
데이터베이스에 표현하는 것으로 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체
실세계에 독립적으로 존재하는 유형, 무형의 정보로서 서로 연관된 몇 개의 속성으로 구성됨
영속적으로 존재하는 개체의 집합
독립적으로 존재하거나 그 자체로서도 구별이 가능함
유일한 식별자(Unique Identifier)에 의해 식별 가능
업무 프로세스에 의해 이용됨
다른 개체와 하나 이상의 관계(Relationship)가 있음
개체명 지정 방법
- 일반적으로 해당 업무에서 사용하는 용어로 지정
- 약어 사용은 되도록 제한
- 가능하면 단수 명사 사용
- 모든 개체명은 유일해야 함
- 가능하면 개체가 생성되는 의미에 따라 이름을 부여
078. 데이터 모델의 구성 요소 - 속성(Attribute)(C)
데이터베이스를 구성하는 가장 작은 논리적 단위
데이터 항목 또는 데이터 필드에 해당
개체를 구성하는 항목이며 개체의 특성을 기술함
디그리(Degree) 또는 차수라고 함
속성의 특성에 따른 분류
- 기본 속성(Basic Attribute): 업무 분석을 통해 정의한 속성, 가장 일반적이며 업무로부터 분석한 속성이라도 업무상 코드로 정의한 속성은 기본 속성에서 제외됨
- 설계 속성(Designed Attribute): 원래 업무상 존재하지 않고 설계 과정에서 도출해 내는 속성이며, 업무에 필요한 데이터 외에 데이터 모델링을 위해 업무를 규칙화하려고 속성을 새로 만들거나 변형해 정의하는 속성
- 파생 속성(Derived Attribute): 다른 속성으로부터 계산이나 변형 등의 영향을 받아 발생하는 속성으로 되도록 적은 수를 정의하는 게 좋음
개체 구성 방식에 따른 분류
- 기본키 속성(Primary Key Attribute): 개체를 식별할 수 있는 속성
- 외래키 속성(Foreign Key Attribute): 다른 개체와의 관계에서 포함된 속성
- 일반 속성: 개체에 포함되어 있고 기본키, 외래키에 포함되지 않은 속성
속성명 지정 원칙
- 해당 업무에서 사용하는 용어로 지정
- 서술형으로는 지정하지 않음
- 가급적이면 약어의 사용 제한
- 개체명은 속성명으로 사용할 수 없음
- 개체에서 유일하게 식별 가능하도록 지정
079. 데이터 모델의 구성 요소 - 관계(Relationship)(B)
개체와 개체 사이의 논리적인 연결을 의미
관계의 형태
- 일 대 일(1:1): 개체 집합 A의 각 원소가 개체 집합 B의 원소 한 개와 대응하는 관계
- 일 대 다(1:N): 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고, 개체 집합 B는 개체 집합 A의 원소 한 개와 대응하는 관계
- 다 대 다(N:M): 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고, 개체 집합 B도 개체 집합 A의 원소 여러 개와 대응하는 관계
관계의 종류
- 종속 관계(Dependent Relationship): 두 개체 사이의 주종 관계를 표현한 것으로 식별 관계과 비식별 관계가 있음
개체 A, B 사이의 관계에서 A 개체의 기본키가 B 개체의 외래키이면서 동시에 기본키가 되는 관계, B 개체의 존재 여부가 A 개체의 존재 여부에 의존적임
ER 도형에서 실선으로 표시
- 비식별 관계(Non-Identifying Relationship)
개체 A, B 사이의 관계에서 A 개체의 기본키가 B 개체의 비기본키 영역에서 외래키가 되는 관계, B 개체의 존재 여부는 A 개체의 존재 여부와 관계 없음
ER 도형에서 점선으로 표시
- 중복 관계(Redundant Relationship): 두 개체 사이에 2번 이상의 종속 관계가 발생하는 관계
- 재귀 관계(Recursive Relationship): 개체가 자기 자신과 관계를 갖는 것으로 순환 관계(Recursive Relationship)라고도 함
- 배타 관계(Exclusive Relationship): 속성이나 구분자를 기준으로 개체의 특성을 분할하는 관계
080. 식별자(Identifier)(D)
하나의 개체 내에서 각각의 인스턴스를 유일하게 구분할 수 있는 구분자
대표성 여부
- 주 식별자(Primary Identifier): 개체를 대표하는 유일한 식별자
- 보조 식별자(Alternate Identifier): 주 식별자를 대신하여 개체를 식별할 수 있는 속성
두 식별자 모두 개체를 유일하게 식별할 수 있어야 함
하나의 개체에 주 식별자는 한 개만 존재하지만 보조 식별자는 한 개 이상 존재 가능
개체를 유일하게 식별할 수 있는 속성이 두 개 이상일 때, 업무에 가장 적합한 속성을
주 식별자로 지정하고, 나머지는 보조 식별자로 지정함
물리적 테이블에서 주 식별자 = 기본키, 보조 식별자 = 유니크 인덱스로 지정됨
주 식별자의 4가지 특징
유일성: 주 식별자에 의해 개체 내 모든 인스턴스들이 유일하게 구분되어야 함
최소성: 주 식별자를 구성하는 속성의 수는 유일성을 만족하는 최소 수가 되어야 함
불변성: 주 식별자가 한 번 특정 개체에 지정되면 그 식별자는 변하지 않아야 함
존재성: 주 식별자가 지정되면 식별자 속성에 반드시 데이터 값이 존재해야 함
스스로 생성 여부
- 내부 식별자(Internal Identifier): 개체 내에서 스스로 만들어지는 식별자
- 외부 식별자(Foreign Identifier): 다른 개체와의 관계에 의해 외부 개체의 식별자를 가져와 사용하는 식별자로 자신의 개체에서 다른 개체를 찾아가는 연결자 역할
단일 속성 여부
- 단일 식별자(Single Identifier): 주 식별자가 한 가지 속성으로만 구성된 식별자
- 복합 식별자(Composit Identifier): 주 식별자가 두 개 이상의 속성으로 구성된 식별자
대체 여부
- 원조 식별자(Original Identifier): 업무에 의해 만들어지는 가공되지 않은 원래의 식별자
= 본질 식별자
- 대리 식별자(Surrogate Identifier): 주 식별자의 속성이 두 개 이상인 경우 속성들을 하나의 속성으로 묶어 사용하는 식별자 = 인조 식별자
대리 식별자의 조건
- 범용적인 값 사용
- 유일한 값을 만들기 위한 대리 식별자 사용
- 하나의 대리 식별자 속성으로 대체할 수 없는 경우를 주의
- 편의성, 단순성, 의미의 체계화를 위한 대리 식별자 사용 가능
- 시스템적 필요성에 의해 내부적으로만 사용하는 대리 식별자 사용 가능
후보 식별자
개체에서 각 인스턴스를 유일하게 식별할 수 있는 속성 또는 속성의 집합을 의미
하나의 개체에는 한 개 이상의 후보 식별자가 있으며 이 중 개체의 대표성을 나타내는 식별자는 주 식별자, 나머지는 보조 식별자로 지정
후보 식별자의 조건
- 각 인스턴스를 유일하게 식별할 수 있어야 함
- 속성들을 직접 식별할 수 있어야 함
- 널 값(NULL Value)이 될 수 없음
- 속성 집합은 후보 식별자로 지정한 경우 개념적으로 유일해야 함
- 후보 식별자의 데이터는 자주 변경되지 않아야 함
081. E-R(개체-관계) 모델(A)
개념적 데이터 모델의 가장 대표적인 것으로 피터 첸에 의해 제안되고 기본적 구성 요소 정립됨
현실 세계의 무질서한 데이터를 개념적인 논리 데이터로 표현하기 위한 방법으로 많이 사용됨
개체, 관계, 속성으로 묘사하며 특정 DBMS를 고려한 것은 아님
E-R 다이어그램으로 표현하며 1:1, 1:N, N:M 등의 관계 유형을 제한 없이 나타낼 수 있음
E-R 다이어그램
기호 | 이름 | 의미 |
사각형 | 개체(Entity) 타입 | |
마름모 | 관계(Relationship) 타입 | |
타원 | 속성(Attribute) | |
이중 타원 | 다중값 속성(복합 속성) | |
밑줄 타원 | 기본키 속성 | |
복수 타원 | 복합 속성 | |
관계 | 1:1, 1:N, N:M 등의 관계에 대한 대응수를 선 위에 기술 | |
선, 링크 | 개체 타입과 속성을 연결 |
082. 관계형 데이터 모델(B)
가장 널리 사용되는 데이터 모델로 2차원적인 표(Table)를 이용해 상호 관계를 정의하는 DB 구조
파일 구조처럼 구성한 테이블들을 하나의 DB로 묶어서 테이블 내에 있는 속성간의 관계(Relationship)를 설정하거나 테이블 간의 관계를 설정하여 이용함
개체 집합들 사이의 관계를 공통 속성으로 연결함
기본키(Primary Key)와 이를 참조하는 외래키(Foreign Key)로 데이터 간의 관계를 표현함
계층 모델과 망 모델의 복잡한 구조를 단순화시킨 모델로 대표적 언어는 SQL
1:1, 1:N, N:M 관계를 자유롭게 표현할 수 있음
083. 관계형 데이터베이스의 구조(A)
개체(Entity)나 관계(Relationship)를 모두 릴레이션(Relation)이라는 표(Table)로 표현함
개체를 표현하는 개체 릴레이션, 관계를 표현하는 관계 릴레이션으로 구분
장점: 간결하고 보기 편리, 다른 데이터베이스로의 변환 용이
단점: 성능이 다소 떨어짐
관계형 데이터베이스의 Relation 구조
데이터들을 표(Table)의 형태로 표현한 것으로 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성됨
튜플(Tuple) =기수, 대응수, 카디널리티(Cardinality)
릴레이션을 구성하는 각각의 행
속성의 모임으로 구성
파일 구조에서 레코드와 같은 의미
속성(Attribute) = 차수, 디그리(Degree)
데이터베이스를 구성하는 가장 작은 논리적 단위
파일 구조상 데이터 항목 또는 데이터 필드에 해당
개체의 특성을 기술
도메인(Domain)
하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자(Atomic) 값들의 집합
실제 애트리뷰트 값이 나타날 때 그 값의 합법 여부를 시스템이 검사하는 데에도 이용됨
릴레이션의 특징
- 한 릴레이션에는 똑같은 튜플이 포함될 수 없으므로 릴레이션에 포함된 튜플은 모두 상이
- 한 릴레이션에 포함된 튜플 사이에는 순서가 없음
- 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변함
- 릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않음
- 속성의 유일한 식별을 위해 속성의 명칭은 유일해야 하지만 속성 구성값들은 동일값 있을 수 있음
- 릴레이션을 구성하는 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키(Key)로 설정
084. 관계형 데이터베이스의 제약 조건 - 키(Key)(A)
제약 조건이란 데이터베이스에 저장되는 데이터의 정확성을 보장하기 위하여 키(Key)를 이용하여 입력되는 데이터에 제한을 주는 것으로 개체 무결성 제약, 참조 무결성 제약이 해당됨
키(Key)의 개념 및 종류
데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 애트리뷰트를 말함
- 후보키(Candidate Key): 릴레이션을 구성하는 속성 중 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들
하나의 릴레이션 내에서는 중복 튜플이 있을 수 없으므로 반드시 하나 이상 후보키 존재
후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성, 최소성을 만족시켜야 함
유일성(Unique): 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함
최소성(Minimality): 모든 레코드를 유일히 식별할 때 꼭 필요한 속성으로만 구성
- 기본키(Primary Key): 후보키 중에서 선정된 주키(Main Key)로 중복된 값을 가질 수 없음
한 릴레이션 내에서 특정 튜플을 유일하게 구별할 수 있는 속성
기본키는 후보키의 성질을 가짐 = 유일성, 최소성 만족
기본키는 NULL 값을 가질 수 없음
- 대체키(Alternate Key): 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키를 의미함
보조키라고도 함
- 슈퍼키(Super Key): 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키
릴레이션을 구성하는 모든 튜플 중 슈퍼키로 구성된 집합과 동일한 값은 나타나지 않음
릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하나 최소성은 만족하지 못함
- 외래키(Foreign Key): 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
참조되는 릴레이션의 기본키와 대응되어 릴레이션 간의 참조 관계를 표현함
한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키 B가 동일한 도메인 상에서 정의되었을 때, 속성 A를 외래키라고 함
외래키 지정 시 참조 릴레이션의 기본키에 없는 값은 입력할 수 없음
085. 관계형 데이터베이스의 제약 조선 - 무결성(A)
무결성의 개념 및 종류
데이터베이스에 저장된 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 정확성을 의미
- 개체 무결성(Entity Integrity, 실체 무결성)
기본 테이블의 기본키를 구성하는 어떤 속성도 Null 값이나 중복값을 가질 수 없음
- 도메인 무결성(Domain Integrity, 영역 무결성)
주어진 속성 값이 정의된 도메인에 속한 값이어야 함 (튜플의 값 X, 속성 값 O)
- 참조 무결성(Referential Integrity)
외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 함
= 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정
외래키가 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 함
- 사용자 정의 무결성
속성 값들이 사용자가 정의한 제약 조건에 만족해야 함
데이터 무결성 강화
데이터 품질에 직접적 영향을 미치므로 데이터 특성에 맞는 적절한 무결성을 정의하고 강화해야 함
프로그램 완성 후 정의할 경우 많은 비용이 발생하므로 데이터베이스 구축 과정에서 정의
- 애플리케이션: 데이터 생성, 수정, 삭제 시 무결성 조건을 검증하는 코드를 데이터를 조작하는 프로그램 내에 추가함
데이터베이스에서 수행하기 어려우므로 애플리케이션 내에서 처리
장점: 사용자 정의 같은 복잡한 무결성 조건 구현 가능
단점: 소스 코드에 분산되어 있어 관리 힘들고, 개별적 시행으로 인해 적정성 검토 어려움
- 데이터베이스 트리거:트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가
장점: 통합 관리 가능, 복잡한 요구 조건의 구현 가능
단점: 운영 중 변경이 어렵고 사용상 주의가 필요
- 제약 조건: 데이터베이스에 제약 조건 설정하여 무결성 유지
장점: 통합 관리 가능, 간단한 선언으로 구현 가능, 변경 용이, 오류 데이터 발생 방지 등
단점: 복잡한 제약 조건의 구현과 예외적인 처리 불가능
086. 관계대수 및 관계해석(A)
관계대수: 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
- 릴레이션 처리하기 위해 연산자와 연산 규칙을 제공하는 언어로 피연산자가 릴레이션이고, 결과도 릴레이션임
- 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서 명시
- 관계 데이터베이스에 적용하기 위해 특별히 개발한 순수 관계 연산자와 집합 이론에서 사용하는 일반 집합 연산자가 있음
순수 관계 연산자
- Select: 릴레이션에 존재하는 튜플 중 선택 조건을 만족하는 튜플의 부분 집합을 구하여 새로운 릴레이션을 만드는 연산 (= 수평 연산)
연산자의 기호는 그리스 문자 시그마(σ) 사용
표기 형식: σ<조건>(R)
- Project: 주어진 릴레이션에서 속성 리스트에 제시된 속성 값만을 추출하여 새로운 릴레이션을 만드는 연산으로 중복 발생 시 중복이 제거됨 (=수직 연산자)
표기 형식: π<속성리스트>(R)
- Join: 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션 만듦
Join의 결과로 만들어진 릴레이션의 차수는 조인된 두 릴레이션의 차수를 합한 것과 같음
join의 결과는 Cartesian Product(교차곱)를 수행한 다음 Select를 수행한 것과 같음
표기 형식: R ▷◁키속성 r = 키속성 s S ex) 성적 ▷◁No=No 학적부
*자연 조인(Natural Join): 조인 조건이 ‘=’일 때 동일한 속성이 두 번 나타나게 되는데 이중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법 ex) 성적 ▷◁No 학적부
- Division: X ⊃ Y인 두 개의 릴레이션 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산
중복 발생 시 중복은 제거됨
표기 형식: R[속성 r ÷ 속성 s]S
속성 r은 릴레이션 r의 속성, 속성 s는 릴레이션 S의 속성, 속성 r과 속성 s는 동일 속성값을 가지는 속성이어야 함
일반 집합 연산자
- 합집합(UNION): 합집합의 카디널리티는 두 릴레이션 카디널리티보다 크지 않음
- 교집합(INTERSECTION): 교집합 카디널리티는 두 릴레이션 중 카디널리티가 적은 카디널리티보다 크지 않음
- 차집합(DIFFERENCE): (R - S일 때) 차집합의 카디널리티는 릴레이션 R 카디널리티보다 크지 않음
- 교차곱(CARTESIAN PRODUCT): 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같음
관계해석(Relational Calculus)
관계 데이터의 연산을 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용함
원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성
튜플 관계해석 / 도메인 관계해석이 있음
관계해석과 관계대수는 기본적으로 관계 데이터베이스를 처리하는 기능과 능력면에서 동등하며,
관계대수로 표현한 식은 관계해석으로 표현할 수 있음
질의어로 표현
087. 정규화(Normalization)(A)
종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정
- 하나의 종속성이 하나의 릴레이션에 포함될 수 있도록 분해해 가는 과정
- 차수가 높아질수록 만족시켜야 할 제약 조건이 늘어남
- 데이터베이스의 논리적 설계 단계에서 수행
- 일관성, 정확성, 단순성, 비중복성, 안정성 등을 보장
- 수준이 높을수록 유연한 데이터 구축이 가능하고, 데이터의 정확성이 높아짐
물리적 접근이 복잡하고, 너무 많은 조인으로 인해 조회 성능 저하됨
정규화의 목적
- 데이터 구조의 안정성 및 무결성을 유지
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만듦
- 효과적인 검색 알고리즘을 생성
- 데이터 중복을 배제하여 이상(Anomaly)의 발생 방지 및 자료 저장 공간의 최소화
- 데이터 삽입 시 릴레이션을 재구성할 필요성 줄임
- 데이터 모형의 단순화 가능
- 속성의 배열 상태 검증이 가능
- 개체와 속성의 누락 여부 확인 가능
- 자료 검색과 추출의 효율성 추구
이상(Anomaly)의 개념 및 종류
정규화를 거치지 않으면 데이터베이스 내 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못한 곤란한 현상이 발생하는데 이를 이상이라 함
- 삽입 이상(Insertion Anomaly): 릴레이션에 데이터 삽입 시 의도와는 상관없이 원하지 않는 값을도 함께 삽입되는 현상
- 삭제 이상(Deletion Anomaly): 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄가 일어나는 현상
- 갱신 이상(Update Anomaly): 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
정규화의 원칙
정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 됨
분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 함
데이터의 중복성이 감소되어야 함
정규화 과정(도부이결다조)
- 1NF(제1정규형): 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있는 정규형
= 속성이 중복되었을 때 그것을 분해함 // 도메인이 원자값
- 2NF(제2정규형): 릴레이션 R이 1NF이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형 // 부분적 함수 종속 제거
- 3NF(제3정규형): 릴레이션 R이 2NF이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 규정 // 이행적 함수 종속 제거
- BCNF(Boyce-Codd 정규형): 릴레이션 R에서 결정자가 모두 후보키인 정규형이며 후보키가 여러 개 존재하고 서로 중첩되는 경우에 적용하는 강한 제3정규형 // 결정자이면서 후보키가 아닌 것 제거
- 4NF(제4정규형): 릴레이션 R에 다치 종속이 성립하는 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형 // 다치 종속 제거
- 5NF(제5정규형): 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형 // 조인 종속성 이용
088. 반정규화(Denormalization)(A)
정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위
시스템 성능 향상, 관리 효율성 증가 / 데이터의 일관성 및 정합성 저하
과도한 반정규화는 오히려 성능 저하
- 테이블 통합: 두 개의 테이블이 조인(Join)되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 사용
두 개의 테이블에서 발생하는 프로세스가 동일하게 자주 처리되는 경우, 두 개의 테이블을 이용하여 항상 조회를 수행하는 경우 테이블 통합을 고려
1:1, 1:N, 슈퍼타입/서브타입 테이블 통합이 있음
검색은 간편하나 레코드 증가로 인해 처리량 증가
테이블 통합으로 인해 입력, 수정, 삭제 규칙이 복잡해질 수 있음
Not Null, Default, Check 등의 제약 조건을 설계하기 어려움
- 테이블 분할
수평 분할(Horizontal Partitioning): 레코드를 기준으로 테이블 분할하는 것이며 사용 빈도의 차이가 큰 경우 사용 빈도에 따라 테이블을 분할
수직 분할(Vertical Partitioning): 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할
갱신 위주의 속성 분할: 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행할
수 없으므로 분할함
자주 조회되는 속성 분할: 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주
사용되는 속성들을 수직 분할하여 사용
크기가 큰 속성 분할: 이미지나 2GB 이상 저장될 수 있는 텍스트 형식 등으로 된
속성들을 수직 분할하여 사용
보안을 적용해야 하는 속성 분할: 테이블 내의 특정 속성에 대해 보안을 적용할 수
없으므로 보안을 적용해야 하는 속성들을 수직 분할하여 사용
테이블 분할 시 고려사항
- 기본키의 유일성 관리 어려워짐
- 데이터 양이 적거나 사용 빈도가 낮은 경우 테이블 분할이 필요한지를 고려해야 함
- 분할된 테이블로 인해 수행 속도가 느려질 수 있음
- 데이터 검색에 중점을 두어 테이블 분할 여부 결정
- 중복 테이블 추가
여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에서 저장된 테이블을 이용해야 하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상
중복 테이블을 추가하는 경우
- 정규화로 인해 수행 속도가 느려지는 경우
- 많은 범위의 데이터를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리해야 하는 경우
- 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우
중복 테이블을 추가하는 방법
집계 테이블 추가 / 진행 테이블 추가 / 특정 부분만을 포함하는 테이블의 추가
- 중복 속성 추가
조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것
중복 속성 추가 시 데이터의 무결성 확보가 어렵고 디스크 공간이 추가로 필요함
중복 속성을 추가하는 경우
- 조인이 자주 발생하는 경우
- 접근 경로가 복잡한 속성인 경우
- 액세스의 조건으로 자주 사용되는 속성인 경우
- 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우
중복 속성 추가 시 고려 사항
- 테이블 중복과 속성의 중복 고려
- 데이터 일관성 및 무결성에 유의
- SQL 그룹 함수를 이용하여 처리할 수 있어야 함
- 저장 공간의 지나친 낭비 고려
089. 시스템 카탈로그(B)
시스템 그 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스
각 테이블은 사용자를 포함하여 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리하는 시스템 테이블임
카탈로그들이 생성되면 데이터 사전(Data Dictionary)에 저장되기 때문에 좁은 의미로는 카탈로그를 데이터 사전이라고도 함
시스템 카탈로그에 저장된 정보는 메타 데이터(Meta-Data)라고 함
카탈로그의 특징
- 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용 검색 가능
- INSERT, DELETE, UPDATE문으로 카탈로그 갱신하는 것은 허용되지 않음
- 시스템에 따라 상이한 구조를 가짐
- DBMS가 스스로 생성하고 유지
- 사용자가 SQL문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동 갱신
- 보통의 릴레이션, 인덱스, 사용자 등 정보를 포함하며 위치 투명성 및 중복 투명성 제공을 위해 필요한 모든 제어 정보를 가져야 함
2장. 물리데이터베이스 설계