배달의 민족 앱을 구성하기 위해 필요한 정보들이 무엇인지 생각해보자.
① 가게
② 회원
③ 주소
④ 쿠폰
⑤ 찜
⑥ 리뷰
⑦ 메뉴
⑧ 메뉴 옵션
⑨ 주문
⑩ 주문메뉴
주문:주문메뉴=1:N, 메뉴:주문메뉴=1:N의 관계를 가진다.
DB에서 다대다 관계를 설정할 수 없어 중간 테이블의 역할로 주문 메뉴 테이블을 만든 것이다. 회원이 한 가게에서 여러 메뉴를 주문할 경우 여러 개의 주문메뉴 테이블이 생성된다.
price는 메뉴의 가격에 메뉴 옵션의 가격을 합친 가격이다.
ERD가 완성되면 아래와 같은 모습이 될 것이다. 참고로 분홍색 선은 비식별관계를 하늘색 선은 식별관계를 의미한다.
※ 식별관계와 비식별관계
부모테이블의 기본키가 자식테이블의 기본키이자, 외래키로 쓰이는 경우에 두 테이블이 식별관계에 있다고 한다. 반면, 부모테이블의 기본키가 다른 테이블에서 기본키가 아닌 외래키로 쓰인다면 이는 비식별관계에 있다고 한다.
참고로 Aquery Tool은 유료 서비스이다. 결제를 진행한 사람만 아래와 같은 실습을 진행할 수 있다. 무료버전에서도 테이블 5개까지는 지원되므로 대강 따라해보도록 하자.
① Aquery Tool 사이트에 들어가 아래와 같이 ERD 메뉴에서 "새로운 ERD"를 눌러준다.
② 그 후 아래와 같이 설정해준다.
③ 수정을 클릭한 후 ERD 메뉴 우측에 있는 설정 버튼을 클릭한다.
④ '논리'가 들어가는 속성은 체크 해제하고 나머지는 모두 체크한다.
⑤ 아래의 자동 생성 SQL옵션에서 FK, Join무시를 체크해준다.
⑥ 이제 우클릭을 통해 테이블을 생성하자. 테이블명은 파스칼 방식이라고 해서 대문자로 시작해야 한다. 먼저 USER라고 하는 회원테이블을 만들어보자.
⑦ 회원 테이블에서 기본 키는 user_id이고 AI 설정을 해준다.
⑧ 회원테이블과 마찬가지 방법으로, 가게(Store), 주소(Address), 쿠폰(Coupon), 찜(Dibs), 리뷰(Review), 메뉴(Menu), 메뉴옵션(Menu_Option), 주문(Order), 주문메뉴(Order_Menu) 테이블을 생성한다.
참고로 외래키를 기본키와 연결짓는 방법은 FK(Foreign Key)의 화살표를 드래그하여 참조테이블의 기본키에 드롭하면 된다. 최종 결과는 아래와 같은 모습이다. 각 테이블의 구성도 첨부하였다. 테이블을 작성하고 우클릭 > 테이블 정렬, 우클릭 > 테이블 재배치를 누르면 아래와 같이 깔끔하게 표시된다.
이 때, order_id는 Order_Menu 테이블의 기본키이면서 외래키이다. 따라서 Order 테이블과 Order_Menu 테이블은 식별관계에 있다.
[이미지 출처]