핵심 개념(Key Concept)
* 데이터 모델링 유의점 (아래의 것들을 피해야한다)
- 중복 (Duplication)
같은 정보를 여러번 저장하는 것
- 비유연성 (Inflexibility)
데이터의 정의와 데이터의 사용 프로세스를 분리하지 않은 것
- 비일관성 (Inconsistency)
데이터 간 일관성이 떨어지는 것
* 데이터베이스 스키마 구조 3단계
- 외부스키마 (External Schema)
사용자 단계에서 접근하는 스키마. 사용자가 보는 DB니까 외부라고 생각하자.
- 개념스키마 (Conceptual Schema)
사용자 관점을 통합한 조직 전체의 DB. 통합관점이라는 게 중요하다.
- 내부스키마 (Internal Schema)
DB가 물리적으로 저장된 형식. 내부 단계라서 내부 스키마라고 생각하자.
* 엔터티 (Entity)의 특징
- 해당 업무에서 반드시 다루고자 하는 정보여야 한다.
- 유일한 식별자에 의해 식별이 가능해야한다.
- 인스턴스가 '두 개 이상' (절대로 '한 개 이상' 아니다..) 존재하는 집합
- 반드시 속성이 존재
- 다른 엔터티와의 관계가 반드시 하나 이상 존재해야한다. (없으면 안됨)
* 데이터 모델링의 세가지 요소
- 업무가 관여하는 어떤 것 (Things)
- 어떤 것이 가지는 성격 (Attributes)
- 업무가 관여하는 어떤 것들의 관계 (Relationship)
* 엔터티, 인스턴스, 속성, 속성값 간의 관계
- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합
- 한 개의 엔터티는 두 개 이상의 속성을 갖는다.
- 한 개의 속성은 두 개 이상의 속성값을 갖는다.
* 속성의 특성에 따른 분류
- 기본속성
기본적인 모든 속성을 일컫는다.
- 설계속성
코드성 속성을 말한다.
- 파생속성
빠른 검색을 위해 미리 계산된 값을 저장한 속성
* 도메인 (Domain)
- 각 속성이 가질 수 있는 값의 범위
* 속성의 명칭 부여
- 서술식 속성명은 지양한다.
- 약어 사용 또한 지양한다.
- 유일성을 확보해야한다.
* 관계의 표기법
- 관계명
관계의 이름
- 관계차수
1:1, 1:M, N:M
- 관계선택사양
필수관계, 선택관계
* 동사는 관계를 서술하는 업무기술서의 가장 중요한 사항
* 식별자의 종류
- 주식별자 / 보조식별자
엔터티 내에서 대표성을 가지는가?
- 내부식별자 / 외부식별자
엔터티 내에서 스스로 생성되었는가?
- 단일식별자 / 복합식별자
단일 속성으로 식별이 되는가?
- 본질식별자 / 인조식별자
원래 업무적으로 의미가 있던 식별자 속성을 대체하여 새로만든 식별자인가? (ex. 일련번호)
* 주식별자의 특징
- 유일성
인스턴스들 사이에서 유일하게 구별됨
- 최소성
주식별자를 구성하는 속성의 수는 최소의 수가 되어야한다.
- 불변성
한 번 식별자가 되면, 값이 변하면 안된다.
- 존재성
반드시 데이터 값이 존재 (Not Null)
* 식별자(식)와 비식별자관계(비식) 비교
- 식은 강한 연결관계, 비식은 약한 연결관계
- 식은 자식 주식별자 구성에 포함, 비식은 자식 일반 속성에 포함
- 식은 실선 표기, 비식은 점선 표기
* 성능을 고려한 데이터 모델링의 순서
1. 데이터 모델링을 할 때 정규화를 정확하게 수행
2. 데이터베이스 용량산정을 수행
3. DB에 발생되는 트랜잭션의 유형을 파악
4. 반정규화 수행
5. 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행
6. 성능관점에서 데이터 모델을 검증
* 정규화가 항상 조회 성능을 저하시키는 것은 아니다. 테이블 간 잦은 조인이 없다면 정규화가 조회 성능을 향상시킬 수 있다.
* 반정규화
- 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능 향상과 개발과 운영의 단순화를 위해 정규화를 고의로 제거하는 것
- 데이터 무결성이 깨질 수 있음에도 I/O 를 줄이기 위해서 쓰인다.
- 반정규화 대신 뷰 (View) 사용, 클러스터링 적용, 파티셔닝 등의 기법을 사용할 수 있다.
* 파티셔닝 (Partitioning)
- 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하는 기법
- 데이터 엑세스 성능을 개선시키기 위해 사용
* '='로 들어온 조건에 해당하는 컬럼이 인덱스의 가장 앞에 위치할 때, 인덱스의 효율이 가장 높다.
* SQL 문장들의 종류
- 데이터 조작어 (DML)
SELECT, INSERT, UPDATE, DELETE
- 데이터 정의어 (DDL)
CREATE, ALTER, DROP, RENAME
- 데이터 제어어 (DCL)
GRANT, REVOKE
- 트랜잭션 제어어 (TCL)
COMMIT, ROLLBACK
* PK = UNIQUE & NOT NULL (단, UNIQUE는 NULL 가능)
* NULL은 오라클에서는 가장 큰 값, SQL 서버에서는 가장 작은 값
참고(Reference)
SQL 자격시험 실전문제
※ 정확하고 부드러운 태클은 언제나 환영입니다.