피자집 POS 고객과 주문 테이블 어떻게 만들어야하나요?? 0 6 2,826

by dkfldkfl [DB 모델링/설계] 정규화 중복 설계 [2016.11.19 16:07:12]


IMG_1848.JPG (1,665,562Bytes)
IMG_1851.PNG (132,068Bytes)
db.png (57,670Bytes)

고객과 주문이 있는데
 
고객   1 ----<-   N 주문 
 
이렇게 하는건 맞는데 주문 테이블을 주문번호(PK), 고객번호(FK) 로 해서 주문 리스트들을 저장하려고 한다면
 
 

(이그림에서는 편의상 고객번호를 PK로 생각해서 그려봤어요)​
 
이렇게 주문들이 여러개 돼서 정규형에 위배 되는것 같아요
 
그러면 이걸 테이블을 하나 더 만들어서 주문번호를 PK로 해서 하나의 메뉴마다 주문번호 FK가 참조 하고있다
 
라고 하면 너무 낭비가 될것같기도 하고요,,;;
 
이 부분을 어떻게 하는게 좋을까요
 
어떤 고객이 어떤 메뉴를 주문했었고 하는 정보를 저장하는데 어떻게 설계해야하나요?
by Kyle [2016.11.20 10:45:34]
WITH CUSTOMER(ID, NAME) AS (
    SELECT 'C001', 'HONG' FROM DUAL UNION ALL
    SELECT 'C002', 'LEE' FROM DUAL 
), MENU(ID, NAME) AS (
    SELECT 'M001', 'PIZZA' FROM DUAL UNION ALL
    SELECT 'M002', 'COKE' FROM DUAL 
), ORDERS(ID, SEQ, C_ID, M_ID, O_DT) AS (
    SELECT 'O001', 1, 'C001', 'M001', '20161118' FROM DUAL UNION ALL
    SELECT 'O001', 2, 'C001', 'M002', '20161118' FROM DUAL UNION ALL
    SELECT 'O002', 1, 'C002', 'M001', '20161119' FROM DUAL
)
SELECT 
    A.ID    "주문번호",
    A.SEQ   "주문순서",
    B.NAME  "주문자명",
    C.NAME  "메뉴명",
    A.O_DT  "주문일자"
FROM ORDERS A INNER JOIN CUSTOMER B ON ( A.C_ID = B.ID)
    INNER JOIN MENU C ON (A.M_ID = C.ID)
ORDER BY A.ID

 


by Kyle [2016.11.20 10:59:02]

ORDERS 테이블에 부가 정보가 별로 없다면 한 테이블로 하는 것이 관리면에서 편합니다

그러나 결제정보(현금+카드 혼합결제, 쿠폰 + 결제, 제휴 할인 등) , 메뉴 정보(기본 메뉴 + 토핑 등) 가 많아 진다면 결제, 메뉴 정보등을 위한 별도 테이블을 구성 하여 나눠어 주는 것이 좋습니다.

 

복잡한 구조가 아닌 위 예시와 같은 단순 정보라면 한 테이블로 가는 것이 좋을 듯 하네요


by dkfldkfl [2016.11.21 11:54:45]

저 죄송한데 제가 오라클언어를 잘몰라서요.. 위에 사진하나 더 올렸어요 DB구조를요,

 

메뉴에 대한 정보를 뺀다면 쉽게 할수있을것같은데 저기 주문 테이블에

속성으로 메뉴1메뉴2를 더 추가하라는 말씀이신가요??

한개 주문에 대해서 튜플이 엄청 생기기는 하지만

마지막 사진 처럼 새로운 테이블 만들어야할것같아요,, 이게 맞겠죠??

제가 아직 배우는입장이라 잘몰라서 기초적인걸 부탁드릴게요


by 지현명 [2016.11.21 12:40:37]

http://ko.exerd.com/

이 모델링 툴 설치하시면(평가판) pos모델링 샘플로 들어가 있습니다. 참고해 보세요.


by dkfldkfl [2016.11.21 14:03:54]

저 죄송한데, 설치를 했는데 어떻게 하는지를 모르겠네요 eXERD 창 하나 뜨는데 구조보는방법을.... 모르겠어요


by 지현명 [2016.11.22 10:41:17]

eXERD -> 샘플 -> pos예제

근데 이건 너무 단순하네요...

여긴 그림이 안올라 가네요. 메일주소 남겨주세요. 간단히 erd그려서 보내드릴께요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입