본문 바로가기

DB/DB 구성

How to implement DB Schema[1]

*시행착오를 겪은 과정을 남기는 글이므로 DB관련 contents들은 작성하지 않을 예정입니다*

몇달 전부터 전역 후에 진행할 사이드프로젝트에 관한 사전 작업을 진행 중이었는데, DB Schema를 구현하는 연습을 해보는 것이 좋을 것 같다는 나의 mate의 조언에 따라 기억 속 묻혀있던 내용을 다시 공부해보기로 하였다. 주제는 Instagram의 DB schema 설계


DB schema란 ?
- DB에서 자료 구조, 자료 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다
- 쉽게 말하면 관련 있는 table들끼리 구분지은 디렉토리라고 생각하면 되겠다
- 정보를 기록하고 읽는 곳이다

기억에 의하면 BCNF, 1-6차까지의 정규화가 있던 것 같은데, 바로 그 부분을 들어가기보다는 오랜만이기 때문에 차분히 first-step부터 밟기로.

<개념적 모델링 >
이 단계가 초석이라고 할 수 있다. 개념적 모델링을 통해 ER diagram을 제작하는 것이 필수이다.
ER diagram이란 Entity Relation diagram으로 개체들이 어떤 관련을 맺고 있는지를 도식화한 그림이다.
필수요소에는 3가지가 있다

  1. entity > 개체로서 차후에 테이블의 이름이 된다
  2. attribute > entity가 지니고 있는 현실세계의 정보들로 차후에 테이블 column에 mapping이 된다
  3. relation > 어떤 관계를 지니고 있는지 나타내는 것으로 1:n, 1:m을 결정짓는 요소가 된다

코드로 예시를 들자

class User{
  String name;
  int follower;
}
//User와 Post 사이에는 posting이라는 relation이 존재 
class Post{
  int like;
}

위 코드에서 User,Post는 entity가 되고, name, follower은 attribute가 되며 User과 Post 사이에는 Posting이라는 relation을 지니게 된다

위에서 개념적 모델링의 내용을 바탕으로 업무를 파악하는 것이 도움이 된다.
내가 얻어내야하는 정보는 무엇인지? 어떤 관계들을 담아내야하는지? 어떤 attribute들이 필수적인지 등을 작성하며 정리하는 시간을 가지는 것이 좋다

필자는 Schema의 target을 instagram으로 잡고 설계해보는 과정을 진행하려 한다.
< 업무파악
가) 인스타그램 속의 핵심 entity는 무엇들이 있는가?
나) 각각의 entity들이 지닌 attribute는?

가)
1. Users2. comments3. Story4. posts정도로 잡았다

나)Users - Email address, ID, Followers, How many postsComments - ID, DateStory - How many views, ID , DatePosts - Date, Likes, ID

위의 것들을 ER diagram으로 나타낸 모습이다


it is just draft for draft ERd


하지만 위의 것들은 엄연히 정규화를 신경쓰지 않은 채 draft용도로 작성한 것이다.
위 ERd로 구현할 시 매우 많은 문제점들이 발생할 수 밖에 없다.
중복된 PK 사용, FK사용X, 중복된 값을 통한 이상발생 등 정말 많은 문제들이 발생하는 구조이다.

위 초안을 토대로 DB Schema 재구성을 해보았다.




그 후 feedback을 받은 내용이다

<DB schema should be way more specific and must include every details not only the relations between attributes and properties. The work you uploaded seems quite rough, sufficient to understand your idea though.

Refer to the link below for further examples and details:
https://dbschema.com/documentation/schema.html

The diagram shown on the link is called UML diagram which includes 1. relations (1 to 1, 1 to n, n to n) between attributes, 2. attribute type(INT, DOUBLE, FLOAT, etc), and DB schematic info(Views, Sequences). Your future work should include all of these information precisely

DB schema 구성이 1학년 이후로 처음이라 감을 잠는 시행착오를 겪고 있다.
겸사겸사 DB 관련 내용도 공부하고 있기에 어렵기보다는 즐거운 느낌이 너무 행복하다.

'DB > DB 구성' 카테고리의 다른 글

How to implement DB Schema[5]  (0) 2022.10.11
How to implement DB Schema[4]  (1) 2022.10.08
How to implement DB Schema[3]  (0) 2022.10.07
How to implement DB Schema[2]  (0) 2022.09.20