*본 게시물은 2013년도 SQL 전문가 가이드 교재(일명 '노랭이')를 참고하여 공부하고 정리한 게시물입니다
1과목 데이터 모델링의 이해: 제1장 데이터 모델링의 이해
1. 관계
- 엔터티 간의 논리적인 관련성, 동사형
1) 관계의 페어링
- 인스턴스 간 개별적으로 관계를 가지는 것
- 엔터티내에 인스턴스와 인스턴스 사이에 관계가 설정되어 있는 어커런스(각 데이터)
- 관계는 관계 페어링의 집합을 논리적으로 표현한 것
2) 관계의 분류
- ERD 기준: 표기구분 안함
- UML(Unified Modeling Language) 기준 클래스 다이어그램: 연관관계와 의존관계로 표현
(1) 존재 관계: 엔터티 간의 상태
예) 사원은 부서에 항상 속해있다
(2) 행위 관계: 엔터티 간에 발생하는 행위
예) 주문은 고객이 주문을 할 때 발생한다
3) 관계 표기법
(1) 관계명(Membership)
- 관계의 이름
(2) 관계차수(Degree/Cardinality) - IE 표기법만 이미지화함(Barker 표기법은 없음)
- 관계 내 튜플의 전체 개수, 1은 직선 多는 삼발로 표시
- 1:1 관계(ONE TO ONE)
- 1:M 관계(ONE TO MANY)
- M:M 관계(MANY TO MANY)
‒ M:N 관계: 관계형 DB에서 M:N 관계의 조인은 카테시안 곱 발생
(3) 관계선택사양(Optionality)
- 참여하는 엔터티가 항상 참여하는지, 참여할 수도 있는지에 따라 필수와 선택 관계로 구분
-> 필수관계는 I 선택관계는 O로 표시
- 어떻게 설정했는지에 따라 참조무결성 제약조건의 규칙이 바뀌게 되므로 주의 깊은 모델링 필요
4) 관계 읽기
기준 엔터티 각각/한 개 -> 대상 엔터티의 관계차수(관계참여도 개수) -> 관계선택사양 -> 관계명
2. 식별자
엔터티를 대표할 수 있는 유일성을 만족하는 속성
-> 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성(한 엔터티는 반드시 하나의 유일한 식별자가 존재해야 함)
1) 특징
특징 | 내용 | 예시 |
유일성 | 주식별자에 의해 엔터티 내 모든 인스턴스들을 유일하게 구분 | 사원번호가 주식별자이고, 모든 직원들에게 부여됨 |
최소성 | 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함 | 사원번호만으로도 고유한 구조인데, 사원분류코드+사원코드로 식별자가 구성될 경우 부적절한 주식별자 구조임 |
불변성 | 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함 | 사원변호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생하는 개념 |
존재성 | 주식별자가 지정되면 반드시 데이터 값 존재(Null 안됨) | 사원번호 없는 회사직원은 있을 수 없음 |
2) 종류
분류 | 식별자 | 설명 |
대표성 여부 | 주식별자 | 대표성을 만족하는 식별자로, 각 컬럼을 구분할 수 있는 구분자이며 타 엔터니와 참조관계를 연결할 수도 있음 |
보조 식별자 | 유일성과 최소성만 만족하는 식별자로, 대표성을 가지지 못해 참조 관계 연결에 사용할 수 없음 | |
스스로 생성 여부 |
내부 식별자 | 엔터티 내부에서 스스로 만들어지는, 자연스럽게 존재하는 식별자 (=본질식별자) |
외부 식별자 | 타 엔터티와의 관계를 통해서만 생성되는 식별자 | |
속성의 수 | 단일 식별자 | 하나의 속성으로 구성 |
복합 식별자 | 둘 이상의 속성으로 구성 | |
대체 여부 | 본질 식별자 | 업무에 의해 만들어지는, 대체할 수 없는 식별자 |
인조 식별자 | 인위적으로 만들어지는 대체가능한 식별자 (순서번호(Sequence Number)를 사용하여 생성된 식별자) -> 후보 식별자 중 주식별자로 선정할 것이 없거나, 주식별자가 너무 많은 칼럼으로 구성되어 있을 때 사용 |
※ DB 키의 종류
‒ 기본키(PK; Primary Key): 엔터티를 대표하는 키, 후보키 중 선정됨
‒ 후보키: 유일성과 최소성을 만족하는 키
‒ 슈퍼키: 유일성만 만족하는 키
‒ 대체키: 기본키를 제외한 나머지 후보키
‒ 외래키(FK; Foreign Key): 여러 테이블의 기본 키 필드, 참조 무결성(Referential Integrity)을 확인하기 위해 사용됨 (허용된 데이터 값만 저장하기 위함)
3) 주식별자 도출 기준
- 업무에서 자주 이용되는 속성
- 명칭/내역 등과 같은 이름 명명 지양(일련번호와 코드 사용)
- 복합 식별자 지양(속성의 수가 많아지지 않도록 함)
4) 식별자 관계와 비식별자관계에 따른 식별자
(1) 식별자관계와 비식별자 관계의 결정
- 관계와 속성을 정의하고 주식별자를 정의하면 논리적인 관계에 의해 자연스럽게 외부식별자(Foreign Key 역할) 도출
- 엔터티에 주식별자 지정 후 엔티티간 관계를 연결하면, 부모쪽의 주식별자를 자식엔터티의 속성으로 내려 보냄
부모로부터 받은 외부식별자 이용 유형 | 설명 | 예시 |
자신의 주식별자로 이용 | null값이 오면 안되므로, 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성됨 |
부모 속성을 자식엔터티가 모두 사용하고, 그것만으로 주식별자로 사용한다면 부모-자식엔터티는 1:1의 관계 |
부모 속성과 다른 부모 속성을 합치거나, 부모 속성을 스스로 가지고 있는 속성과 합쳐서 함께 주식별자로 구성한다면 부모-자식엔터티는 1:m의 관계 |
||
부모와 연결이 되는 속성으로만 이용 | 부모로부터 속성을 받았지만, 자신의 주식별자로 사용하지 않고 일반 속성으로만 사용 |
부모 없는 자식 엔터티가 생성될 수 있는 경우 |
엔터티별로 데이터의 생명주기(Life Cycle)를 다르게 관리할 경우 => 부모가 자식보다 먼저 소멸할 수 있음 |
||
여러 개의 엔터티를 하나의 엔터티로 통합되어 표현했는데, 각 엔터티가 별도의 관계를 가질 경우 | ||
자식엔터티에서 별도 주식별자를 생성하는 것이 더 유리하다고 판단될 경우 |
(2) 한 관계로만 설정할 경우의 문제점
- 식별자 관계로만 설정
: 특히 부모의 모든 속성을 자식의 주식별자로 만들 경우, 1개만 존재해야 하는 주식별자의 속성 수가 많아지게 됨
=> 개발 복잡성과 오류가능성 유발 요인이 될 수 있음
- 비식별자 관계로만 설정
: 다른 엔터티의 정보를 조회할 때 불필요한 조인이 다량으로 유발되며, SQL 구문이 길어져 성능 저하
(3) 식별자관계와 비식별자관계 모델링
1. 비식별자관계 선택 시 고려사항
2. 식별자관계와 비식별자관계 비교
항목 | 식별자관계 | 비식별자관계 |
목적 | 강한 연결관계 표현 | 약한 연결관계 표현 |
자식 주식별자 영향 | 자식 주식별자의 구성에 포함됨 | 자식 일반 속성에 포함됨 |
표기법 | 실선 표현 | 점선 표현 |
연결 고려사항 | - 반드시 부모엔터티 종속 - 자식 주식별자구성에 부모 주식별자포함 - 상속받은 주식별자속성을 타 엔터티에 이전 |
- 약한 종속관계 - 자식 주식별자구성을 독립적으로 구성 - 자식 주식별자구성에 부모 주식별자 부분 필요 - 상속받은 주식별자속서을 타 엔터티에 차단 - 부모쪽의 관계참여가 선택관계 |
'컴퓨터공학 공부 > SQLD (SQL 전문가 가이드)' 카테고리의 다른 글
SQLD 자격증 공부 데이터 모델과 성능-분산 데이터베이스와 성능 (SQL 전문가 가이드) (0) | 2024.04.22 |
---|---|
SQLD 자격증 공부 데이터 모델과 성능-대량 데이터에 따른 성능, 데이터베이스 구조와 성능(SQL 전문가 가이드) (0) | 2024.04.11 |
SQLD 자격증 공부 데이터 모델과 성능-성능 데이터 모델링의 개요, 정규화와 성능, 반정규화와 성능(SQL 전문가가이드) (0) | 2024.04.04 |
SQLD 자격증 공부 데이터 모델링의 이해-엔터티, 속성(SQL 전문가가이드) (0) | 2024.03.26 |
SQLD 자격증 공부 데이터 모델링의 이해-데이터 모델의 이해(SQL 전문가가이드) (0) | 2024.03.18 |