2011-07-05 2 views
0

나는 대부분의 초보자와 같은 쇼핑 카트 웹 앱을 구현하려고 시도하고있다. & 동면 ... 많은 교과서를 통과했지만 여전히 의문을 품고있다. 여기 누군가가 내 생각을 바로 잡는데 도움이되기를 바랍니다.cartitem과 Invoice의 수명 관계 쇼핑 바구니 구현

나는 Product 클래스와 CartItem을 구현했다. CartItem에는 Product 필드와 수량 필드가 있습니다. 사용자가 제품을 구매하고자 할 때 CartItem을 장바구니에 추가합니다.

사용자 구매를 모델링하기 위해 CartItem 개체 집합을 사용하여 Invoice 클래스를 작성했습니다. 또한 고객 필드가 있습니다. 이제, 나는 테이블에 대해 조금 혼란스러워하며 그들의 생애를 어떻게 연관시켜야 하는가.

송장 기록이 생성 된 후 (사용자가 일부 항목을 구매할 때) 해당 cartitem을 db로 보관해야합니까? 또는 사용자가 상품을 구매 한 후에는 cartitem 레코드를 삭제해야합니까?

누군가이 부분을 밝힐 수 있다면 좋을 것입니다.

감사합니다,

마크

소스 코드 :

class CartItem { 
    private Long cartItem_id; 
    private Product product; 
    private int quantity; 
... 
} 

class Invoice { 
    private Long invoice_id; 
    private Customer customer; 
    private Set<CartItem> cartItems; 
    private Date invoiceDate; 
    private int invoiceNumber; 
    private double totalAmount; 
... 
} 

나는 다음과 같이 테이블 CARTITEM과 INVOICE를 만들었습니다. 송장 레코드가 작성

CREATE TABLE CARTITEM(
    CARTITEM_ID BIGINT NOT NULL PRIMARY KEY IDENTITY, 
    QUANTITY INTEGER, 
    PRODUCT_ID BIGINT, 
    FOREIGN KEY(PRODUCT_ID) REFERENCES PRODUCT(PRODUCT_ID) 
) 

CREATE TABLE INVOICE(
    INVOICE_ID BIGINT NOT NULL PRIMARY KEY IDENTITY, 
    INVOICE_NUMBER INTEGER, 
    INVOICE_DATE DATE, 
    TOTAL_AMOUNT DOUBLE,  
    CUSTOMER_ID BIGINT, 
    UNIQUE(INVOICE_NUMBER), 
    FOREIGN KEY(CUSTOMER_ID) REFERENCES CUSTOMER(CUSTOMER_ID) 
) 

답변

1

되면 (사용자가 어떤 상품을 구입하는 경우) 대응 CartItems의 DB는 유지되어야 하는가?

모두 비즈니스 규칙에 따라 다릅니다. 앞으로 이러한 정보를 복구 하시겠습니까? 아마도 일 것입니다. 그렇다면 그들은 끈질 기 있어야합니다.

계속 유지하고 싶지 않다면 데이터베이스 테이블을 만들 필요가 없습니다 (충돌을 복구하고 싶지 않은 경우). CarItem 세션을 계속 유지할 수 있습니다 (웹 앱이라고 가정).

1

인보이스를 계속 사용하는 경우 인보이스를 구성하는 CartItems를 유지하는 것이 좋습니다. 그렇지 않은 경우 사용자가 나중에 다시 나와 인보이스를 다시 인쇄 할 수있는 방법은 무엇입니까?

CARTITEM 테이블에 외래 키를 추가하여 인보이스에 연결하면 설정됩니다.

관련 문제