제품 할인을 제공하기 위해 데이터베이스 솔루션을 만들어야합니다.데이터베이스 디자인 브레인 스토밍 : 판매 가격
현재 테이블 :
Products
Columns: ProductId, ProductTypeId, ReleaseDate
ProductPrices
Columns: ProductPriceId, ProductPriceTypeId (one product may have n prices), ProductId, Price
우리는 제품 ID 및/또는 ProductTypeId 및/또는 ProductPriceTypeId 및/또는 RELEASEDATE 할인 할 수 있어야합니다.
예 판매 :
- 할인 단일 제품 ID.
- 지정된 ProductTypeId 및 ProductPriceTypeId의 모든 제품을 할인합니다.
- 지정된 ProductTypeId의 모든 제품을 지난 달 내에 ReleaseDate로 할인합니다.
# 2의 도전적인 측면은 문자 그대로의 예제가 아니지만 미래에 새로운 필드가 추가 될 경우 장기적인 확장 성을 고려해야합니다.
ReleaseDate 때문에 # 3을 처리하는 방법이 난처한 상황입니다.
아래는 내가 Stackoverflow에 올 필요가 있다는 것을 깨닫기 전에 정신적으로 생각한 것입니다. 명시 적으로 포함 된 열 때문에 견고한 구조가 좋은 확장 성을 허용하지 않는다는 것을 알 수 있습니다. 미래에 새로운 기준을 추가하면 해당 열을 테이블에 추가해야 할 필요가 있습니다. 출시일 요건.
새로운 테이블 :
ProductPriceDiscounts
Columns: ProductPriceDiscountId, ProductPriceId, ProductTypeId, ProductPriceTypeId, Discount, DiscountTypeId (1 for percentage, 2 for fixed)
가 그럼 난 가격 얻기 위해이 같은 것을 사용할 수 있습니다 : 만이 나쁜 예제를 포함
from p in Products
join pp in ProductPrices on p.ProductId equals pp.ProductId
let ppd = (
from ppd in ProductPriceDiscounts
.WhereIf(ppd.ProductPriceId != null, ppd.ProductPriceId == pp.ProductPriceId)
.WhereIf(ppd.ProductTypeId != null, ppd.ProductTypeId == pp.ProductTypeId)
.WhereIf(ppd.ProductPriceTypeId != null, ppd.ProductPriceTypeId == pp.ProductPriceId)
select ppd).FirstOrDefault()
where p.ProductId = productId
select new
{
...,
Price = pp.Price,
Discount = pp.Discount,
DiscountedPrice =
(ppd.DiscountTypeId == 1) ?
(pp.Price - (pp.Price * pp.Discount)) :
(pp.Price - pp.Discount) :
}
나는 방법의 최종 결과를 보여주기 위해 함께했다 이 새로운 제품 할인 기능을 사용할 수 있어야합니다. 이 상황을 처리하는 좋은 방법에 대한 조언을 누군가가 제공 할 수 있습니까? 감사.