dev-miri
[Server-4주차] 데이터베이스 설계/모델링 하는 방법 본문
데이터베이스를 설계하기 위해 3단계가 필요하다
1. 필요한 시스템 분석
2. 논리
3. 물리
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테이블을 만들어 따로 관리하면 중복을 최소화할 수 있다

-join(query에서 설명)
'Spring boot > UMC(22-1)' 카테고리의 다른 글
| [Server-7주차] 프레임워크 사용하기 실습 (0) | 2022.05.15 |
|---|---|
| [Server-7주차]개발환경 설정 (0) | 2022.05.13 |
| [Server 5주차] RDS와 Datagrip 연결하기/Datagrip table 생성 (0) | 2022.05.12 |
| [Server 4주차]AqueryTool을 이용해 데이터베이스 설계하기 (0) | 2022.05.12 |
| [Server-1주차] 서버 개념 정리(1) (0) | 2022.04.03 |