본문 바로가기
web/맛슐랭 Project

맛슐랭 - db 설계

by su0a 2024. 3. 27.

 

맛집 리뷰를 구현하기 이전에 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)
);