관계형 데이터베이스(RDB) 모델링
개념적 데이터 모델링
: 파악한 업무에서 개념을 뽑아내는 과정
ERD(Entity Relationship Diagram)
- 현실에서 개념을 추출하는 필터 적용
- 개념에 대해서 다른 사람들과 대화하게 해주는 언어
- 현실을 3개의 관점으로 바라볼 수 있는 finder 제공
정보 - 정보를 발견하고 다른 사람들에게 표현할 수 있게 도와줌
그룹 - 서로 연관된 정보를 그루핑해서 인식하고 이것을 다른 사람들에게 표현할 수 있게 도와줌
관계 - 정보, 그룹 사이의 관계를 인식하고 다른 사람들에게 표현할 수 있게 도와줌
현실로부터 개념을 인식하는 도구, 그것을 다른 사람들도 알아볼 수 있게 표현하는 도구 -> ERD
ERD 만들기
- RDB는 내포관계를 허용하지 않음. 포함관계보다는 평면관계가 RDB에는 더 어울림
- 거대 단일 테이블로 표현을 하면 중복이 발생
- 주제에 따라서 테이블을 쪼개자
- 주제에 따라서 데이터를 그루핑할 수 있음
- 컴퓨터의 자원 아낄 수 있음
- Join

Entity
- 글, 저자, 댓글 : 동등한 표로 표현할 수 있음. 이러한 개념을 Entity
- 나중에 표(Table)로 전환
- 구체적인 데이터(attribute, 속성, column)를 그루핑 한 것
저자 -쓰다- 댓글 , 저자 -쓰다- 글 , 글 -소속- 댓글
: 이렇게 연관성을 표현한 것을 Relation(PK, FK)
기획서에서 Entity 추출하기
: 읽기 화면보다는 쓰기 화면을 봐라. Entity 알기 쉬움.
속성 정의
- ERD에서는 속성은 원을 사용. Entity와 연결.

식별자
- Entity의 속성들 중에 대표적인 걸 뽑음
- 유일해야함
- PK(primary key)가 되는 것
- 밑줄을 쳐준다.
- 후보키(candidate key) - PK가 될 수 있는 애들
- 대체키(alternative key) - 후보키 중에 PK가 아닌 애들
- 인조키(artificial key) 혹은 대리키(surrogate key)
- 행이 추가될 때마다 자동으로 1씩 증가시켜서 중복되지 않는 값을 부여함으로써 식별자를 제공 ex) user_id
- 마땅치 않을 때
- 비즈니스 모델에서 자연스레 나오는 속성으로 기본키를 정함 - 자연키(natural key)
- 중복키(composite key)
- 속성 두개를 합쳐서 식별
- 직원번호, 부서번호 각각만으로는 행을 식별할 수 없기 때문.


Entity에 식별자가 될 수 있는 속성이 없다면
-> 식별자가 될 수있는 인조키 만들기. ex) 글아이디, 댓글아이디, 저자 아이디

Relationship
- Entity간의 연결
- 마름모로 표현
- RDB의 relationship은 PK와 FK가 연결되면서 구현됨

Cardinality
- 특정 데이터 집합의 유니크(Unique)한 값의 개수
- 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표
- 중복도가 ‘낮으면’ -> 카디널리티가 ‘높다’
- 중복도가 ‘높으면’ -> 카디널리티가 ‘낮다’
- ex) 주민등록번호는 중복되는 값이 없으므로 카디널리티가 높다
이름은 ‘주민등록번호에 비해’ 카디널리티가 낮다
- 각 선생님은 한 반만 담임한다. 각 반의 담임은 한 명이다. -> 1:1
- 각 저자는 여러 댓글을 작성한다. 각 댓글은 하나의 저자만 존재한다. -> 1:N
- 하나의 글을 여러 명이 편집할 수 있다면
: 각 저자는 여러 글을 작성한다. 각 글은 여러 저자가 존재한다. -> N:M (다 대 다)
: 실제 테이블에서는 N:M 표현 불가. 중간에 연결 테이블을 만들어서 최종적으로는 1:N 관계로 바꿔줌.
Optionality
- 저자는 댓글을 작성하지 않을수도 있다. 저자에게 댓글은 옵션이다. -> 동그라미 표시
- 각 댓글은 반드시 저자가 있다. 댓글에게 저자는 필수다.(Mandatory) -> 짝대기 하나 표시



'SQL > 공부' 카테고리의 다른 글
| select 문 총정리 (0) | 2023.07.09 |
|---|---|
| Codecademy - Multiple Tables (0) | 2023.02.05 |
| Codecademy - Aggregate Functions (0) | 2023.02.05 |
| Codecademy - Queries (0) | 2023.02.05 |
| sql select문, join (생활코딩) (0) | 2023.02.04 |