jeongwon
[데이터 모델링] 논리적 데이터 모델링 본문
1. Mapping Rule
ERD > 관계형 데이터베이스 형식으로 전환할 때 사용해볼 수 있는 방법론.

<참고>
(오픈소스. 설치하는 게 좀 까다로운 툴)
http://ermaster.sourceforge.net/
ER Master
ermaster.sourceforge.net
※ 도메인을 설정한다 = 컬럼에 대한 영역을 설정/제한한다. (길이 등)
Entity 와 Attribute 의 표현

1:1과 1:N 관계의 표현
Relationship을 PK와 FK로 표현함에 있어 따져볼 것은 Cardinality(카디널리티)이다.

1:1 에서 고민할 것은 누구에게 Primary Key를 줄 것인가 혹은 그러므로 누가 Foreign Key를 갖는가 이다.
dormant(휴면) 저자의 경우 author(저자)에 의존적인 존재이다. 따라서 author를 기준으로 foreign 이 되는
dormant 테이블의 id값이 dormant를 기준으로 Primary이면서 Forein Key가 되었다.
M:N의 표현을 위한 Mapping Table의 작성

kim과 lee가 함께 집필한 글이 있다. id 값을 1,2 와 같이 등록할 수는 없으므로, Mapping Table을 만들어 각 테이블의 id를 매핑시켜준다.
위 이미지에서 Mapping Table에 해당하는 것은 write 테이블이다.
(1번 저자는 세 개의 글을, 2번 저자는 2개의 글을 집필한 것을 알 수 있다.)

author에게 write는 옵션, write는 author에게 의존적.
topic과 write는 서로에게 의존적(topic이 있다는 것은 write 했다는 것)
2. 정규화(Normalization) - 1~3 정규형
에드가 프랑크 커드 박사가 개발한 정규화를 통해 정제되지 않은 데이터를 관계형 데이터베이스에 어울리는 표로 만들 수 있다.
1) 제 1 정규화
- 제 1 정규형의 원칙 : Atomic columns(원자적 속성)
각 컬럼의 값이 하나 이상이라면 여러 문제를 야기시킬 수 있다. (JOIN의 사용도 어렵다)
중복되지 않으면서 1 정규화의 원칙을 충족시키기 위해 표를 쪼개자.

정규화 이전의 표에서 tag는 2개 즉, 유일하지 않은 값을 지니고 있다.
tag의 정보가 title의 정보에 의존하고 있다는 점을 이용해 이 문제를 해결할 수 있다.
tag의 정보를 따로 분리해 내되, title과의 연관성을 맺어주는 것이다.
두 값을 묶어 'topic_tag_relation'이라는 표를 만들었다. 이 표가 일종의 Primary Key 역할을 하게 될 것이다.
2) 제 2 정규화
- 제 2 정규형의 원칙 : No partial dependencies (부분 종속성이 없을 것)
표의 특정 속성만(부분적으로) 대표적 key에 종속적인 경우, 제 2 정규화가 필요하다.

모든 항복은 기본적으로 title (key) 에 종속적이다.
그런데 동시에 price는 title이 아닌 type에 부분적으로 종속돼 있다.
또한 price 로 인해 표에 중복이 발생한다.
price와, price가 의존하고 있는 type title에 종속된 새로운 표로 분리함으로써 중복 요소를 완화했다.
이로써 topic 테이블에 남은 모든 요소는 온전히 표(또는 하나의 key:title)에 종속적이 되었다.
(title이 행 전체를 대표한다)
3) 제 3 정규화
- 제 3 정규형 원칙 : No transitive dependencies (이행적 종속성이 없을 것)
표의 특정 속성이 표(key: title에)에 온전히 종속적이면서 동시에, 표의 부분적 속성에도 종속적이라면
이것은 이행적이며, 제 3 정규화가 필요하다.


author_id 및 그것에 의존적인 author_name, author_profile 을 author 라는 테이블로 분리해주었다.
'DataBase' 카테고리의 다른 글
[Oracle] Built-in Data Types (0) | 2022.06.05 |
---|---|
[데이터베이스 모델링] 물리적 데이터베이스 모델링 (0) | 2022.05.29 |
[데이터 모델링] 개요, 개념적 데이터모델링 (0) | 2022.05.27 |
[Oracle] SQL SELECT 문의 활용 - JOIN (0) | 2022.05.26 |
[Oracle] 서버&클라이언트, SQL Developer, 스키마 (0) | 2022.05.25 |