2013-07-04 41 views
1

我想在RavenDB中實現產品折扣功能。如何在RavenDB中使用折扣

產品文檔:

{ 
    "RegularPrice": 10.00, 
    "ReferencePrice": 0.0, 
    "Categories": [ 
    "A", 
    "B", 
    "C" 
    ] 
} 

現在比如我想給所有產品的折扣在「A」類。 所以我在這樣的折扣文檔結構圖貼現率類別:

{ 
    "ProductDiscount": { 
    "A": 20.0 
    } 
} 

的問題是如何計算的ReferencePrice和存儲或更新時:添加

  • 新產品?
  • RegularPrice更新?
  • 折扣文檔已更新?

看來我應該用觸發器來處理這個問題。但我不確定!

回答

1

我不確定這個模型會支撐。你如何將產品與折扣聯繫起來?它們是按類別相關的,但通過這種模式,這是一種多對多的關係。這是你的意圖嗎?如果是這樣,您將如何處理可能適用於同一產品的多種折扣?

如果你想這樣做,你可以考慮的一個策略是多圖/減去計算價格,然後Indexed Properties Bundle將結果寫回文檔。但這是一個非常複雜的設置。

您或許可以通過每個類別獲得單一折扣並將折扣定義爲類別文檔的一部分來簡化操作。然後,您可以使用LoadDocument在建立索引時吸引類別的折扣。

您需要試驗一個適合您要求的模型,您可以維護該模型。

其他的想法:

  • 是的,你可以使用一個trigger,但是這將在服務器端運行的插件。可能難以維護。

  • 無論何時應用類別折扣,您都可以手動發送scripted patch request。新文檔和對現有文檔的編輯必須在您自己的代碼中手動完成。

  • 您可以完全離開產品的計算價格。每次加載產品時,都會包含折扣並即時計算價格。

還有其他的,我敢肯定。這真的取決於你的特定應用程序的作用。

+0

thanx爲您的答覆。 確實,一個產品與多個類別有關。如果有多種折扣,則會設置最低的計算價格。 好的建議和想法,但其中一些在我的情況下是沒有用的。 - 索引時使用LoadDocument不會更新文檔 - 觸發是一個選項,但維護將是一個問題(此外,我不知道如何通過觸發器實現解決方案) - 腳本修補請求是一個選項但我更喜歡避免手動工作的機制。 - 在運行時計算價格是不可取的 ... – MED

+0

所以還有一個選擇;索引屬性包。我曾嘗試以下: 將計算(折扣)價格指數: '地圖=產品=> 從產品 p從C在p.Categories 選擇新 { 的ProductId = p.Id, ReferencePrice = p.RegularPrice *((100 - LoadDocument ( 「折扣/」 + C).Amount)/ 100) };' ... – MED

+0

這MAPPS對產品文檔屬性 – MED