dev-miri

[Server-4주차] 데이터베이스 설계/모델링 하는 방법 본문

Spring boot/UMC(22-1)

[Server-4주차] 데이터베이스 설계/모델링 하는 방법

miri-dev 2022. 5. 12. 13:23

데이터베이스를 설계하기 위해 3단계가 필요하다

1. 필요한 시스템 분석

2. 논리

3. 물리

 

1. 필요한 시스템 분석

우선 인스타그램에 어떤 시스템이 필요한지 분석해야 한다

 

필요한 시스템

페이지1

 

-유저 닉네임

-유저 이름

-유저 프로필 사진

-유저 소개글

-유저 웹사이트 링크

-팔로워 수

-팔로잉 수

-게시물 개수

-게시물 사진

 

 

 

 

 

 

-게시물 내용

-게시물 좋아요 수

-게시물 댓글 수

-게시물 올린 시간

 

 

 

 

 

 

 

 

 

 

 

 

-댓글 내용

-댓글 올린 시간

-태그된 유저

-댓글 좋아요 수

-대댓글 여부

 

 

 

 

 

 

 

 

 

 

2. 논리

1단계에서 나열한 시스템들을 세 가지로 정의할 수 있다

-Entity 객체 : 데이터들을 하나로 묶을 수 있는 단위

-Attribute 속성 : 객체에 속성들이 존재한다

-Relation 관계 : 테이블 간의 관계를 설정해주어야 함

 

논리 단계에서 첫 번째로 데이터를 하나로 묶을 수 있는 단위인 객체로 분류해야 한다

 

User객체

<객체의 속성들>

유저 닉네임

유저 이름

유저 프로필 사진 

유저 소개글

유저 웹사이트 링크

 

게시물 객체

<객체의 속성들>

게시물 개수

게시물 사진

게시물 내용

게시물 좋아요 수

게시물 댓글 수

게시물 올린 시간

 

팔로우 객체

<객체의 속성들>

팔로워 수

팔로잉 수

 

댓글 객체

<객체의 속성들>

댓글 내용

댓글 올린 시간

태그된 유저

댓글 좋아요 수

대댓글 여부

 

User 객체에는 유저 닉네임, 유저 이름, 유저 프로필 사진, 유저 소개글, 유저 웹사이트 링크 등이 존재하는데

이들을 속성이라고 한다

 

관계에는 세 가지의 관계가 있다

1:1

1:N

N:M

 

(예시)

-유저 : 게시물 -> 유저 1명이 여러개의 게시물을 쓸 수 있지만, 한 개의 게시물을 유저 여러명이 쓸 수는 없으므로 

유저와 게시물은 1 : N 관계

 

-게시물 : 댓글 -> 게시물 1개에 여러 개의 댓글이 달릴 수 있지만, 댓글 여러개가 동시에 하나의 게시물에 달릴 수는 없으므로 게시물과 댓글은 1 : N 관계

 

-유저 : 댓글 -> 유저 1명이 여러 개의 댓글을 달 수 있고, 댓글 하나가 유저 여러명이 쓴 댓글일 수 없다

유저와 댓글은 1 : N 관계

 

-책 : 작가 -> 책 1권을 작가 여러명이 쓸 수 있고, 작가 한명이 책 여러개를 쓸 수 있으므로

책과 작가는 N : M 관계

 

 

 

3. 물리

논리단계에서 물리단계로 바꾸어줘야 한다

Entity는 테이블로

Attribute는 column으로

Relation은 3가지가 존재한다

 

-PK(primary key) : 유저가 여러 명이 있으면 유저를 구별할 수 있는 값이 무조건 있어야 함

(ex) 주민번호, 학번 등이 있지만 유출되면 안되므로 유저에 고유한 숫자 부여

->유저 속성에 유저인덱스 추가, 게시물 속성에 게시물인덱스 추가

 

-FK(Foriegn key) : 유저와 게시물의 관계를 1:N으로 지정->어떤 유저가 어떤 게시물을 작성했는지 알기 위해서

관계 설정이 필요함

유저 테이블과 게시물 테이블이 1:N 관계이므로 게시물 테이블에는 어떤 유저가 쓴지에 대한 컬럼이 필요하다->PK

     

 만약 유저 테이블에 게시물 인덱스를 넣는다면 

비효율적인 방법

똑같은 유저인데, 게시물 인덱스를 나타내기 위해 반복하고 있음 -> 비효율적

-데이터베이스 모델링 할 때 정규화가 중요 : 중복을 최소화하는 작업

 

-게시물 테이블에 유저 인덱스를 추가

효율적인 방법

 

1 : N관계에서는 =>N의 테이블에 1의 인덱스를 추가하면 된다!

 

-N:M 관계에서는 따로 N-M테이블을 만든다

중복 발생

 

N에 M을 추가해도, M에 N을 추가해도 중복이 발생한다

따라서 N-M테이블을 만들어 따로 관리하면 중복을 최소화할 수 있다

N-M테이블 생성하여 정규화

-join(query에서 설명)

 

 

 

 

 

Comments