ER Diagram을 그리기 위해 Quick DBD를 이용했다. 생성하는 동시에 표로 만들어줘 보기 편하고, db별로 export와 import 하기 편해 사용했다.
원래 유료이지만, 무료버전을 이용한 후기를 블로그에 500단어 이상 작성 후 promo@quickdbd.com 에 블로그 주소를 첨부한 메일을 보내면 1년동안 유료 버전을 사용할 수 있다.
생성한 테이블은 총 4개이다.

user 테이블
- 회원가입할 때 입력한 유저들의 정보를 저장한다.
- 패스워드는 암호화를 위해 text 형으로 설정했다.
- 비건과 논비건의 리뷰를 따로 보여주기 위해 회원 정보에 비건/논비건 정보를 저장했다.
처음에는 bool 형으로 받은 뒤 비건인 사람들만 단계를 나눠 enum으로 저장하려고 했으나 mysql에 enum 타입이 적절하지 않다는 글을 보고 논비건과 비건의 단계를 int형으로 저장하는 방식을 사용하려고 한다.
( 0. 논비건 / 1. 비건 / 2. 락토 / 3. 오보 / 4. 락토오보 / 5. 페스코 / 6. 폴로 )
( 참고 : 8 Reasons Why MySQL's ENUM Data Type Is Evil )
restaurant 테이블
- 오픈 api에서 받아온 식당의 목록을 저장하는 테이블이다.
- 처음 계획은 오픈 api에 존재하는 식당은 실시간으로 받아오고, 이용자가 직접 추가한 식당만 DB에 저장하는 방식으로 하려고 했으나
- 음식점 검색이나 리뷰 작성등을 구현할 때 식당이 api에 존재하는지 DB에 존재하는지 알 수 없어 둘 다 검사해야 함
- api 업데이트 주기가 6개월임
등을 고려하여 api에 존재하는 비건 메뉴 식당들을 db에 모두 저장 후 사용하기로 했다.
- 대신 6개월에 한 번 api 업데이트를 하는 과정에서 사용자가 직접 추가한 식당이 api에도 추가되어 중복되는지 중복 검사를 진행할 예정이다.
review 테이블
- 사용자가 등록한 리뷰를 저장하는 테이블이다.
- 줄 글로 입력하는 리뷰가 아닌 키워드 선택 리뷰이므로 유저 idx, 식당 idx와 함께 리뷰 카테고리를 만들었다. 리뷰 카테고리에는 키워드 리뷰에 번호를 매겨 어떤 리뷰를 선택했는지 저장할 예정이다.
favorite 테이블
- 즐겨찾기한 식당을 저장할 수 있는 테이블이다.
- 유저의 idx와 식당의 idx를 참조한다.