관계형 데이터 모델링 - 2

큰모래·2023년 3월 8일
0
post-custom-banner

출처 - 생활코딩

https://www.youtube.com/watch?v=moAXl6fvDO0&list=PLuHgQVnccGMDF6rHsY9qMuJMd295Yk4sa&index=5

생활코딩 이고잉님의 강의를 토대로 정리했습니다.


정규화

정제되지 않은 데이터를 관계형 데이터베이스에 어울리는 표로 만들어주는 레시피이다.


정제되지 않은 데이터

  • 현재 tag 칼럼의 데이터가 2개 이상이다.
  • 제 1 정규화를 통해 Atomic 하게 만드는 것이 목표!
topic
titletypedescriptioncreatedauthor_idauthor_nameauthor_profilepricetag
MySQLpaperMySQL is ...20111kimdeveloper10000rdb, free
MySQLonlineMySQL is ...20111kimdeveloper0rdb, free
ORACLEonlineORACLE is ...20121kimdeveloper0rdb, commercial

제 1 정규화

  • 제 1 정규화는 테이블 내의 모든 칼럼이 원자적(Atomic)값만을 가지도록 하는 과정이다.
  • 즉, 테이블의 칼럼이 하나의 값을 가지고, 그 값을 구성하는 다른 속성들로 분해되지 않도록 하는 것이다.
  • 핵심은 Atomic Columns 이다.
  • 따라서 제 1 정규화는 데이터베이스의 중복을 제거하고 데이터 일관성을 유지하기 위한 필수적인 과정이다.
topic
titletypedescriptioncreatedauthor_idauthor_nameauthor_profileprice
MySQLpaperMySQL is ...20111kimdeveloper10000
MySQLonlineMySQL is ...20111kimdeveloper0
ORACLEonlineORACLE is ...20121kimdeveloper0

topic_tag_relation
topic_titletag_id
MySQL1
MySQL2
ORACLE1
ORACLE3

tag
idname
1rdb
2free
3commercial
  • tag 칼럼을 독립된 테이블로 분리했다.
  • topictag 는 다대다 매핑이므로 두 테이블은 연결하는 연결 테이블이 필요함.
  • topic의 PK인 titletag의 PK인 id를 FK로 가지는 연결 테이블 topic_tag_relation 생성
  • 제 1 정규화 완료

제 2 정규화

  • 제 2 정규화의 핵심은 부분 종속성을 제거하는 것!
  • 부분 종속성이란 테이블의 후보키 중 일부 속성만으로 다른 속성들의 값을 결정할 수 있는 경우이다.
    기존 topic 테이블
topic
titletypedescriptioncreatedauthor_idauthor_nameauthor_profileprice
MySQLpaperMySQL is ...20111kimdeveloper10000
MySQLonlineMySQL is ...20111kimdeveloper0
ORACLEonlineORACLE is ...20121kimdeveloper0

제 2 정규화 완료

topic
titledescriptioncreatedauthor_idauthor_nameauthor_profile
MySQLMySQL is ...20111kimdeveloper
ORACLEORACLE is ...20121kimdeveloper

topic_type
titletypeprice
MySQLpaper10000
MySQLonline0
ORACLEonline0
  • description, created, author_id, author_name, author_profiletitle 에 종속됨.
    • 즉, title 값에 따라 값들이 자동으로 결정됨.
  • 종속되지 않은 typepricetopic_type 이라는 테이블을 만들어 중복을 제거했다.

제 3 정규화

  • 제 3 정규화의 핵심은 이행적 종속성(Transitive Dependency)을 제거하는 것이다.
  • 테이블이 더 작은 단위로 분해되면서 각 테이블은 자신만의 후보키를 가지게 된다.

기존 topic 테이블

topic
titledescriptioncreatedauthor_idauthor_nameauthor_profile
MySQLMySQL is ...20111kimdeveloper
ORACLEORACLE is ...20121kimdeveloper
  • author_nameauthor_profileauthor_id 에 종속하고 author_idtitle에 종속한다.

제 3 정규화 완료

author
idauthor_nameauthor_profile
1kimdeveloper

topic
titledescriptioncreatedauthor_id
MySQLMySQL is ...20111
ORACLEORACLE is ...20121
  • author 테이블을 따로 만들어 이행적 종속성 제거
profile
큰모래
post-custom-banner

0개의 댓글