Modeling
데이터베이스는 entity와 그 관계로 모델링 될 수 있다. -> Entity-Relationship(E-R) Model
attribute type
simple / composite : 속성을 subpart로 나눌 수 있고 없음
- name -> {first_name, middle_name, lasst_name}
single-valued / multi-valued : 여러 개 값을 가지는 속성
- phone_number -> 한 사람당 2 개 이상의 전화번호를 가질 수 있음
derived attributes : 다른 속성으로부터 유추될 수 있는 속성
- age로부터 date_of_birth를 유추할 수 있다.
composite, multi-valued, derived 속성은 뒤에서 스키마 표현 방식이 조금 다르다.
Constrains
Mapping Cardinality Constraints
- one to one
- one to many / many to one
- many to many
Participation Constraints
- Total participation : 모든 엔티티가 최소 하나의 관계에 참여하는 집합
- Partial participation : 어떠한 관계도 참여하지 않는 엔티티가 있는 집합
E-R Diagrams
- 사각형 : 엔티티 셋을 의미
- 다이아몬드 : 관계 셋을 의미
- 속성은 사각형 안에 리스트로 정의됨
- 밑줄 : primary key를 의미
- 실선 : 엔티티 셋과 관계 셋을 연결
- 점선 : 관계 셋의 속성과 관계를 연결
Mapping Cardinality
실선과 화살표로 1:N (one to many) 관계를 표현한다. 다른 관계들(1:1, N:1, N:N)도 마찬가지로 표현할 수 있다.
Participation Constrains
선이 하나이면 partial 참여, 선이 두 개면 total 참여를 의미한다.
선 표현 대신 cardinality limits 표현으로 participation constrain을 의미할 수도 있음
0..*에서 최소 0번이니까 모든 엔티티가 참여하는 것은 아님 -> partial
1..1에서 모든 엔티티가 한 번씩 참여하니까 -> total
1..*은 최소 1번에서 N번 참여하는 것이므로 -> total
Roles
엔티티 셋과 관계 셋을 합쳐서 표현하는 경우도 있다. prereq는 course의 prerequired 과목을 알려줌.
Weak Entity Sets
Weak Entity Set : primary key가 없는 엔티티 셋을 의미한다.
Strong Entity Set : primayr key를 갖는 엔티티 셋.
weak 엔티티 셋은 다른 strong 엔티티 셋에 의존한다. (그 strong 엔티티 셋을 identifying entity set이라 함)
이 두 엔티티 셋 간의 관계를 identifying relationship 이라하고 double diamond로 표현한다.
discriminator(partial key) : weak 엔티티에서 점선 밑줄 그어진 속성. 나중에 section의 primary key를 만들 때 course_id와 함께 primary key를 구성하게 됨.
Reduction to Relational Schemas - ERD를 관계형 스키마로 만들기
E-R database schema -> relation schema
엔티티 셋과 관계 셋을 relation schemas로 표현할 수 있다.
1. Strong entity Sets
Stong Entity Set은 동일 속성을 가진 스키마로 똑같이 변환
2. Weak Entity Sets
identigying strong 엔티티의 PK와 weak 엔티티의 partial key를 primary key로 스키마 구성
couse_id는 section에서 FK가 됨.
3. Complex Attribues - Composite, multivalued, derived
composite attribute는 분리된 속성으로 정의한다.
엔티티 셋이 다음과 같으면 관계형 스키마는 instructor(ID, first_name, middle_initial, last_name)으로 정의
multivalued attribute는 분리된 스키마로 정의하고 foreign key로 연결한다.
- special case : 한 엔티티 집합이 PK와 multivalued 속성만 갖는 경우엔 분리된 스키마를 정의하지 않고 한 번에 정의
derived attribute는 따로 정의할 필요 없다.
4. Relationship Set
관계 셋의 스키마는 연결된 두 엔티티의 PK를 속성으로 정의된다. 정의된 스키마에서 PK를 뭘로 사용할 지는 집합 관계마다 다르다.
- one-to-one 관계 : 두 엔티티의 PK 중 아무거나 하나만 PK로 사용
- many-to-many 관계 : 두 엔티티의 PK를 모두 PK로 사용함.
- one-to-many / many-to-one 관계 : many쪽의 PK를 PK로 사용함
스키마 최적화 - Relationshp set 생략
- 중복 되는 속성을 갖는 스키마 제거 - 관계형 셋의 스키마의 속성이 엔티티 셋의 스키마 속성과 같은 경우
- many-to-one이면서 many쪽의 엔티티가 total 참여일 경우 제거. many 쪽의 스키마에 필요한 속성을 추가
- one 쪽에 추가할 경우 PK가 중복됨
- total 조건을 만족 못하는 경우 FK 속성에 null이들어가는 상황 발생 (관계에 참여 안하는 엔티티가 있으니까) -> FK-PK 조건 만족 X
reference : 상명대학교 김종욱 교수님
'컴퓨터과학 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] Indexing and Hashing (0) | 2021.12.19 |
---|---|
[데이터베이스] Storage and File Structure - Block, File organization, Fixed/Variable Records 저장 방식 (0) | 2021.12.19 |
[데이터베이스] Data Analytics with SQL - DW, OLAP (0) | 2021.12.05 |
[데이터베이스] SQL 총정리 1 (0) | 2021.10.27 |
[MySQL] SQL 추가 문법 정리 - 프로그래머스 SQL 고득점 kit (0) | 2021.03.01 |
댓글