3-1 논리 데이터베이스 설계
1.데이터베이스 설계 순서
- 요구 조건 분석 -> 개념 -> 논리 -> 물리적 설계 -> 구현
1)개념적 설계 = 정보 모델링
- 현실 세계의 인식을 추상적인 개념으로 표현
- 개념 스키마 + 트랜잭션 모델링 + ER 다이어그래
2)논리적 설계 = 데이터 모델링
- 현실 세계의 자료를 논리적인 자료구조로 변환(맵핑)현실
- 논리 스키마 + 트랜잭션 인터페이스 + 정규화
*개념 스키마를 평가 및 정제하여 논리적 스키마 설계
3)물리적 설계 = 데이터 구조화
- 논리적 구조의 데이터를 물리적 구조의 데이터로 변환
- 레코드 양식이나 접근 경로 설계
- 고려사항: 트랜잭션 처리량, 응답시간, 디스크 용량 (저장공간)
4)구현 = DDL로 스키마 작성, 트랜잭션 작성
*개념 스키마는 DBMS에 독립적, 논리 스키마와 물리적 구조는 DBMS에 종속적
2.데이터 모델
- 구성 요소: 개체, 속성, 관계
- 표시 요소: 구조(관계), 연산, 제약조건
- 종류 : 개념적 / 논리적 / 물리적 데이터모델
개체
- 영속적, 독립적(=식별 가능), 유형+무형
- 다른 개체와 하나 이상의 관계가 존재
- 카디널리티(기수) = 튜플의 개수
속성
- 데이터베이스의 가장 작은 논리적 단위
- 데이터 항목이나 필드에 해당
- 차수(degree) = 속성의 개수
- 기본 + 설계 + 파생 (자동차 명 + 자동차 코드 + 총 판매금액)
관계
-종속 + 중복(종속^n) + 재귀(자기자신) + 배타(합집합 or 교집합 and)
식별자
- 모든 개체는 한개 이상의 식별자를지님
- 유일성(식별), 최소성, 불변성, 존재성(not null)
3.ER 모델
- 개체(E)와 관계(R) 타입으로 현실 세계를 표현
- 개체 + 관계 + 속성
- 특정 DBMS를 고려하지 않음 = 1:1, 1:N, N:M 전부 가능
ER 다이어그램
개체 = 사각형
관계 = 마름모
속성 = 타원
-> 이중 타원 = 다중값 속성
-> 복수 타원 = 복합 속성
-> 밑줄 타원 = 기본키 속성
선 = 개체와 속성 연결
사람 ---(N)---[거주관계]---(1)---도시
4.관계형 데이터 모델
- 테이블(릴레이션) +기본키 + 외래키
- 릴레이션 = 스키마(구조) + 인스턴스(실제 값)
행 = 튜플 = 속성의 모임 = 레코드(파일 구조 관점) -> 카디널리티(기수)
열 = 속성 = 개체의 특성 = 데이터 항목/필드(파일) -> Degree(차수)
릴레이션 스키마 = 개체 타입 = 레코드 타입
릴레이션 인스턴스 = 개체 인스턴스(어커런스) => 개체 세트
*도메인 = 하나의 속성이 가질 수 있는 값 목록 = 남,여
릴레이션의 특징
1)튜플, 속성간엔 순서가 없다
2)모든 속성 값은 원자값을 지닌다
3)속성 값은 동일할 수 있지만 속성 명칭은 동일할 수 없다
4)한 릴레이션의 모든 튜플은 상이함 -> 식별을 위해 key 사용
키(Key)
1)후보키 - 유일성 + 최소성 *Candidate
2)기본키 - 유일성 + 최소성 + 존재성(not null)
3)대체키(보조키) - 기본키가 아닌 후보키 *Alternate
4)슈퍼키 - only 유일성
5)외래키 - 다른 릴레이션의 기본키 참조
무결성
1)개체 무결성 - 기본키는 중복값 x, NULL x
2)참조 무결성 - 외래키는 참조한 기본키값 or NULL
3)도메인 무결성 - "속성" 값이 도메인에 속해야함 *튜플값 아님!
4)사용자 정의 무결성
*강화: 어플리케이션 + 데이터베이스 트리거 + 제약조건
5.관계대수
- 원하는 정보와 이를 유도하는 방법을 기술하는 절차적 언어
- 관계대수의 피연산자와 결과는 전부 릴레이션
- 연산의 순서를 명시한다
- 순수 관계 연산자: Select, Project, Join, Division
- 일반 집합 연산자: Union(합집합), Intersection(교집합), Difference(차집합), Cartesian Product(교차곱)
Select (σ)
- 튜플(행)을 구함 = 수평 연산
- σ <조건>
Project (π)
- 속성값(열) 추출 = 수직 연산자- π <속성명> * 중복은 제거됨
Join (⋈)
- 공통 속성을 기준으로 두 릴레이션을 합침 -> 둘의 차수가 더해짐- 교차곱에 Select를 수행한 것과 동일- Natural Join이면 -1- 그냥 조인은 ⋈ a.No = b.No, 자연 조인은 ⋈ No *속성명 같아야함
Division (%)
*나누는데 사용된 속성은 제외
일반 집합 연산자
- 합집합: R∪S < R+S *중복 제거됨
- 교집합: R∩S < MIN(R,S)
- 차집합: R-S < R
- 교차곱: 차수는 더한것과, 카디널리티는 곱한것과 같음
합병조건: 속성의 수와 대응되는 각 속성의 도메인이 같아야함.
*속성의 이름은 달라로 됨
*교차곱은 상관 없음
관계 해석 (Relational Calculus)
- 원하는 정보가 무엇인지 정의하는 비절차적 특성
- 튜플 + 도메인 관계 해석
- 관계 해석과 관계 대수의 DB 처리 기능과 능력은 동등함
- 관계대수로 표현한 식은 관계 해석으로 표현 가능
- 계산 수식, 질의어로 표현
*
- 관계 대수 = How = 절차
- 관계 해석 = What = 비절차
정규화
- 한 종속성이 하나의 릴레이션에 표현되도록 분해하는 과정
- 논리적 설계 단계에서 수행
- 정규화 원칙 : 무손실 표현 + 분리의 원칙 + 중복성 감소
*3NF까진 항상 무손실
- 정규화를 할수록 정확성은 증가, 조회 성능은 감소 (물리적 접근이 복잡해짐)
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게함
- 데이터 모형 단순화 / 효과적인 검색 / 속성의 배열 상태 검증 / 값 누락 여부 확인
- 중복을 배제하여 이상(Anomaly)을 방지
*이상: 삽입, 삭제, 갱신(일부만 update = 정보 모순)
제 1 정규형
- 모든 도메인/속성값이 원자값으로만 구성
제 2 정규형
- 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수 종속 ( = 부분 함수 종속 제거)
- (A,B) -> C 일때 A->C 이거나 B->C이면 안됨
제 3 정규형
- 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속하지 않음
- A -> B -> C 가 없어야함
*3NF의 여러 후보키가 중첩될때 적용하는 강한 제 3 정규형
BCNF (Boyce Codd)
- 결정자(determinant)가 전부 후보키(candidate)
제 4 정규형
- 다치 종속 A->>B 제거
제 5 정규형 (PJ/NF)
- 조인 종속성 이용
- 후보키를 통하지 않은 조인 종속 제거
반 정규화
- 정규화를 할수록 정확성은 증가, 성능은 감소 -> 성능/편의성을 위해 정규화 원칙 위배
- 테이블 통합 = 1:1, 1:N, 슈퍼/서브타입 *N/M 아님!
- 테이블 분할 = 수평(빈도에 따라) + 수직 (빈도, 크기, 보안에 따라)
- 중복 테이블 추가: 집계(트리거) + 진행 + 특정 부분
시스템 카탈로그
- 시스템 그 자체의 정보 (=메타데이터)를 보관
- DBMS 내 모든 데이터 객체의 정의/명세 정보를 관리 -> 데이터 사전 이라고도 함
- DB(테이블,뷰) + 사용자(ID,PW,접근권한) + 제약조건 + 함수/프로시저/트리거 정보
- 일반 이용자도 SQL로 검색 가능, 갱신은 안됨
- 데이터 디렉토리: 데이터 사전의 데이터에 접근하는데 필요한 정보 관리
*오직 시스템만 접근가능