簡體   English   中英

如何在sql數據庫中正確實現商務數據關系?

[英]How can I properly implement commerce data relationships in a sql database?

首先,我想開始表示我不是想讓別人為我創建表架構。 我花了一些時間在設計中權衡這兩種可能性之間的選擇,我想在我對當前想法狂奔之前獲得一些建議。

這是我當前的架構,我將放置一個? 我正在考慮使用的列旁邊。

鍵:

table_name
----------
col1 | col2 | col3

tax_zone
---------
tax_zone_id | tax_rate | description

sales_order
-----------
sales_order_id | tax_zone_id (FK) or tax_rate (?)

sales_order_item
-----------
sales_order_item_id | sales_order_id (FK) | selling_price | amount_tax or tax_rate (?)

因此,如果還不清楚,那么兩難選擇就是我是否應該將稅收數據存儲在訂單的各個行中,還是使用聯接來提取tax_zone信息,然后在查詢中執行類似(tz.tax_rate * so.order_amount) as order_total

目前,我正在考慮使用剛才描述的方法。 我發現這種方法存在一個問題,盡管我似乎無法弄清楚如何補救。 特定區域的稅率可能會發生變化。 這意味着,如果某個區域的稅率發生變化,而我使用的是外鍵引用,則稅率的變化將反映在過去使用不同稅率完成的訂單中。 這引起了一個問題,因為目前我正在使用此表中的數據存儲已處理的訂單和仍處於打開狀態的訂單,因此,如果有人要重新打印過去的訂單,則該訂單的總金額將會改變。

我存儲特定稅率或稅額的問題是,這意味着每次有人要編輯訂單時,我都必須使用這些值的更改再次更新該行。

在撰寫本文的過程中,我開始朝着后一個想法邁進,即兩者取其好。

也許有人能為我提供以下問題的答案,以便我自己研究更多。

這是數據庫建模中的已知問題嗎? 是否有關於該主題的知名“權威”出版過書/文章?

非常感謝任何幫助,謝謝!

2分。 您將不得不將稅率存儲在某個地方,或者您無法將其添加到sales_order或其他任何地方。 其次,稅率會隨時間變化,因此您不想每次都更新。

因此,您有兩個選擇。

將稅率存儲在參考表中,並在輸入表時以正確的稅率更新每個訂單。

每次訪問時都要計算所有內容。

個人而言,我會選擇選項1,但在參考表中將開始時間作為主鍵的一部分,就好像您確實需要更改稅率時一樣,您可能需要知道訂購時的正確稅率是多少。放置。

在您描述的情況下,最終將必須將稅率存儲在訂單表中,因為您將需要關閉訂單的費率。

因此,最干凈的解決方案是每次更新訂單時都要計算稅率,除非關閉該訂單。 您可以使用觸發器來執行此操作。

(在我撰寫本文時,Ben的答案突然出現-似乎我們不同意,這可能無濟於事:-)

好吧,版本控制和歷史記錄是數據庫建模中的一個眾所周知的問題。 您的解決方案很常見。

對於像增值稅率這樣的簡單枚舉,可以使用簡單的“引用taxtable(id)的外鍵tax_id”。 永遠不要更新稅表,一旦輸入了tax_id,它就應該永遠存在。 如果在年底更改稅率,則即使已經存在具有新值的記錄,也應將新記錄輸入到tax_table中。

搜索引擎的最佳搜索短語可能是“時間數據庫”。

更新: http : //www.google.nl/url? sa = t&source = web&cd =2& ved = 0CCMQFjAB&url= http% 3A%2F%2Fwww.faapartners.com%2Fdownloads%2Foverige-publicaties%2Fpresentatie-over-tijd- in-數據庫%2Fat_download%2Ffile&rct = j&q = veldwijk%20temporal&ei = HQdxTtimCcKr-QansM28CQ&usg = AFQjCNEg9puU8WR1KIm90voSDp13WmE0-g&cad = rja

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM