
맛집 리뷰를 구현하기 이전에 DB 설계부터 진행하였다.
엔티티 분석
member
- 간편 로그인 서버로부터 받은 email,nickname 정보
- 각 사용자의 권한을 담은 role
- 회원가입 시간을 담은 created_at
- 회원정보 수정 시간을 담은 last_modified_at
wishlist
- 특정 회원이 특정 장소를 찜하였을 때 장소와 멤버를 저장하기 위해 만든 엔티티이다.
review
- 맛집 리뷰를 담기위한 엔티티이다.
- eatFoods에는 먹은 음식들이 리스트 형태로 저장된다.
- 리뷰를 쓴 member의 id, 리뷰의 대상인 음식점의 id, 리뷰 관련 정보들이 저장된다.
upload_image
- 리뷰에 들어가는 이미지들을 저장한다.
- 사용자가 업데이트 한 파일의 이름인 originalFilename
- 실제 서버에 저장되는 파일 이름인 savedFilename 이 저장된다.
place
- 리뷰가 작성된 음식점의 정보를 담고 있다.
- 리뷰가 작성되기 전에는 해당 음식점의 정보가 생성되지 않는다.
- 음식점의 상호명, 주소, 경도, 위도가 저장된다.
연관관계 매핑 분석
member - wishlist
- 멤버 한명이 여러개의 위시리스트를 가질 수 있으므로 일대다 관계이다.
- wishlist를 연관관계 주인으로 정하고 wishlist 테이블 내에 member의 id를 저장했다.
- 양쪽에서 모두 참조가 가능하도록 양방향 관계로 만들었다.
member - review
- 멤버 한명이 여러개의 리뷰를 작성할 수 있으므로 일대다 관계이다.
- 양방향 관계로 만들었다.
review - upload_image
- 리뷰 한개에 여러개의 이미지를 등록할 수 있도록 만들었기 때문에 일대다 관계이다.
- 양쪽에서 참조 가능하도록 양방향 관계로 만들었다.
wishlist - place
- 위시리스트 한개에는 장소 하나만 선택 가능하다.
- 여러 위시리스트가 한 장소를 가리킬 수 있으므로 다대일 관계이다.
- place에서 위시리스트를 참조하는 일은 없으므로 단방향 관계로 만들었다.
mysql 쿼리
CREATE TABLE member (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255),
nickname VARCHAR(255),
role VARCHAR(255),
created_at DATETIME,
last_modified_at DATETIME
);
CREATE TABLE place (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
place_name VARCHAR(255),
address VARCHAR(255),
posX VARCHAR(255),
posY VARCHAR(255)
);
CREATE TABLE review (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT,
place_id BIGINT,
eatFoods TEXT,
title VARCHAR(255),
content TEXT,
created_at DATETIME,
last_modified_at DATETIME,
FOREIGN KEY (member_id) REFERENCES member(id),
FOREIGN KEY (place_id) REFERENCES place(id)
);
CREATE TABLE upload_image (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
originalFilename VARCHAR(255),
savedFilename VARCHAR(255),
review_id BIGINT,
FOREIGN KEY (review_id) REFERENCES review(id)
);
CREATE TABLE wishlist (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
place_id BIGINT,
member_id BIGINT,
FOREIGN KEY (place_id) REFERENCES place(id),
FOREIGN KEY (member_id) REFERENCES member(id)
);
'web > 맛슐랭 Project' 카테고리의 다른 글
| 맛슐랭 - 맛집 리뷰 생성을 위한 Repository 구현 (0) | 2024.03.27 |
|---|---|
| 맛슐랭 - 엔티티 등록 (0) | 2024.03.27 |
| 맛슐랭 - 카카오 지도 API 사용하기 (0) | 2024.03.27 |
| 맛슐랭 - 스프링부트 OAuth2 로그인 구현 (소셜로그인,간편로그인) (0) | 2024.03.20 |
| 맛슐랭 - UI 설계 (0) | 2024.03.16 |