데이터베이스 수업 기말 팀 프로젝트가 시작되었다. 우리 팀은 온라인 의류 쇼핑몰을 주제로 잡았다. 1주차에는 개념적+논리적 설계 및 간단한 API 명세서를 작성하였다. 나는 주문 파트를 맡았다.

주문과 관련된 엔티티들만 ERD를 작성하였다. 아래는 ERD를 설계해보며 어려웠던 점을 기록하였다.
위에 ERD를 바탕으로 논리적 설계를 하였다.
주문 (주문ID(PK), 회원ID(FK), 주문일자, 주문시점 배송지, 총결제금액)
주문ID (BIGINT): NOT NULL, AUTO_INCREMENT
회원ID (BIGINT): NOT NULL
주문일자(DATETIME(6)): NOT NULL
주문시점 배송지 (VARCHAR(255)): NOT NULL
총결제금액(INT): NOT NULL
참조 무결성:
주문목록(주문목록ID(PK), 주문ID(FK), 상품ID(FK), 주문상태ID(FK), 수량, 주문시점 가격)
주문목록ID (BIGINT): NOT NULL, AUTO_INCREMENT
주문ID (BIGINT): NOT NULL
상품ID (BIGINT): NOT NULL
주문상태ID (BIGINT): NOT NULL
수량 (INT): NOT NULL, DEFAULT 1
주문시점 가격 (INT): NOT NULL
참조 무결성:
주문상태(상태ID(PK), 상태명)
주문이 생성(create)될 때, 클라이언트가 보낸 상품 배열 데이터를 바탕으로 주문목록 테이블에도 일괄적으로 삽입(insert)이 되어야 한다. 또한 회원이 본인의 '전체 주문 내역 목록'을 조회하는 것과 특정 주문 클릭 시 '상세 내역'을 조회하는 read가 각각 필요하다. 마지막으로 주문 전체 최소를 할 경우의 update가 필요하다.
주문상품은 주문이 들어오면 자동으로 주문상품도 같이 생성되어야 하므로 주문상품의 create는 필요없다. 그리고 고객입장에서는 개별적으로 생성/삭제할 일이 없다. admin이 주문상태를 변경시켜 줄 때와 사용자가 개별 상품을 주문 취소할 때만 update가 필요하다. 논리적으로 삭제는 필요하지 않다. Admin 권한이 필요한 행위는 URI 최상단에 /admin을 붙여 사용자 API와 명확히 분리하였다.
주문상태는 룩업 테이블이니 API 명세서를 따로 작성할 필요가 없다.