2013-09-24 5 views
0

인벤토리 시스템을 개발 중이며 아래 요구 사항에 따라 제품 (항목) 테이블을 디자인하는 데 도움이 필요합니다.인벤토리 프로모션/할인 테이블 구조

  1. 일부 상품에는 프로모션이 있습니다. 상품 2 개를 무료로 가져 오는 것과 같습니다.
  2. 이 회사는 단일 청구서에 대해 100 달러 판매보다 2 % 할인을 제공합니다.
  3. 프로모션 : 누군가가 10 팩을 구매하면 회사는 일부 팩을 포함 해 1 팩을 제공합니다. 또한 누군가가 담배 10 상자 (담배 10 상자 포함)를 구입 한 경우 1 상자의 카톤과 5 박스의 담배를 무료로 제공한다고 말하십시오.

제 질문은 어떻게 처리 할 수 ​​있습니까? 이러한 모든 유형의 프로모션에 대해 개별 테이블을 생성해야합니까, 아니면 동일한 테이블에서 모든 테이블을 처리 할 수 ​​있습니까?

+0

데이터 모델 리소스 북 Vol. 1에서 Silverston의 가격 모델을 사용하십시오. –

답변

0

먼저 여기에서 설명한 내용은 데이터 저장이 아닌 행동입니다. 그렇다면 데이터베이스에 저장하는 방법이 무엇인지에 대한 기본적인 관심이 중요합니다.

그래서 C#의 예로서

public class Product { 
    public string Name { get; set; } 
    public decimal UnitCost { get; set; } 
    public List<IPromotion> { get; set; } 
} 

public interface IPromotion { 
    decimal CalculateTotalDiscount(Product p, int quantity); 
} 

public class BuyAndGetFreePromotion : IPromotion { 
    public int QuantityRequiredToGetPromotion { get; set; } 
    public int NumberOfUnitsFree { get; set; } 

    public decimal CalculateTotalDiscount(Product p, int quantity) { 
     if (QuantityRequiredToGetPromotion == quantity) { 
      return (p.UnitCost * quantity) - (p.UnitCost * NumberOfUnitsFree); 
     } 
     return 0; 
} 

이제 당신은 클래스 당 테이블 클래스 계층 구조 또는 테이블 하나를 수행 할 수 있습니다. 이것은 사용하는 ORM에 따라 달라집니다. 질문에 관해서는

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/inheritance.html http://my.safaribooksonline.com/book/web-development/ruby/9780132480345/advanced-active-record/ch09lev1sec5#title-ID0EBYHK

. 나는 2 % 할인이 프로모션으로 저장 될 것이라고 생각하지 않지만 오히려 청구서/청구서의 책임이 될 것입니다. 따라서 여러 개의 테이블을 보유할지 여부를 결정할 때 사용할 수있는 다양한 유형의 프로모션과 모델을 만들어 단일 테이블에 일관되게 저장할 수 있는지 여부를 결정해야합니다. 현재 하나의 테이블이 완벽하게 수용 가능하다고 말하면서 Promotions에 대한 더 많은 사례가 있습니까?

+0

감사합니다. Alistair는 실제로 두 사이트 http://docs.oracle.com/cd/B40099_02/books/PriceAdm/PriceAdm_ProductPromo5.html http : //www.databaseanswers.org/data_models/하지만 위의 예제에서 아이디어를 얻었을 때 너무 많이 감사합니다 – user2812500

+0

databaseanswers 웹 사이트가 무서워서 잘 모르겠습니다. Seibel 설명서 페이지가 도움이 될 것입니다 ... except 테이블에 넣을 여분의 필드를 제공함으로써? – Alistair