[英]Python and SQL - Best practice for managing changing Customer Data in a Order?
目前我經常使用 Python 和 SQL 進行練習,現在我正在嘗試使用保存在 SQL 數據庫中的數據創建訂單工作流以進行測試。
例如,我的客戶表目前看起來像這樣:
CustomerSK CustomerID VersionID FirstName LastName Address DateEffective DateExpired IsCurrent
---------- ---------- --------- --------- -------- ------- ------------- ------------ ---------
42942 123 1 Robert Smith 10001 2018-12-07 2019-12-22 0
42943 123 2 Robert Johnson 10002 2019-12-23 NULL 1
所以我試圖跟蹤客戶的歷史數據,因為如果客戶的數據發生變化,我不希望舊訂單受到影響。
到目前為止工作正常,但我有幾個問題:
如果一個“訂單”,目前我只有一個訂單表,它也可以包含一個查詢,正在與客戶一起積極開發,所以還沒有關閉,並且客戶的數據發生變化,它需要獲取最新的客戶數據如果發生上表所示的情況(地址或名稱更改)。 如果訂單被關閉,它應該保持數據的凍結狀態。
我如何以及在何處構建這樣的流程,最好的方法是什么? 或者我在一般情況下做錯了什么?
下一個問題是:我想為 ID 設置前綴,以便為用戶記住 ID 提供一些幫助。 就像客戶 ID 的“CU”和地址的“AD”等。 我應該將它們也保存在數據庫中還是只在 GUI 中顯示它們?
如果我正在編輯 Customer 並想創建 CustomerID 123 的新版本,但使用版本 3,我的 SQL 查詢看起來如何? 我是update
還是insert
? 或者我不知道這樣做嗎?
如果我在我的問題中遺漏了一些信息,請告訴我!
非常感謝!
如果一個“訂單”,目前我只有一個訂單表,它也可以包含一個查詢,正在與客戶一起積極開發,所以還沒有關閉,並且客戶的數據發生變化,它需要獲取最新的客戶數據如果發生上表所示的情況(地址或名稱更改)。 如果訂單被關閉,它應該保持數據的凍結狀態。 我如何以及在何處構建這樣的流程,最好的方法是什么? 還是 > 我一般都做錯了什么?
您的客戶表是緩慢變化的維度 (SCD) 類型 2。一種方法是將您的訂單表創建為 SCD 類型 2,並根據 CURRENT_DATE BETWEEN DateEffective AND DateExpired 在您的訂單表中填充 CustomerSK (FK)。
這樣,您就有了 2 個不同版本的訂單並能夠對其進行跟蹤。
另一種方法是創建單獨的查詢表並在訂單完成或取消時按順序插入數據。 (提示:觸發)
下一個問題是:我想為 ID 設置前綴,以便為用戶記住 ID 提供一些幫助。 就像客戶 ID 的“CU”和地址的“AD”等。 我應該將它們也保存在數據庫中還是只在 GUI 中顯示它們?
我會在我的表中添加一個 ID_FLAG (C/U) 字段來檢查 id 是用於客戶還是地址。 字符串字段的所有連接/過濾操作都是昂貴的。
如果我正在編輯 Customer 並想創建 CustomerID 123 的新版本,但使用版本 3,我的 SQL 查詢看起來如何? 我是更新還是插入? 或者我不知道這樣做嗎?
你需要做一個更新然后插入(UPSERT)。 我假設您將使用臨時表來存儲修改后的(新數據)
第一步 --> 更新當前記錄。 設置 end_dte = CURRENT_DATE , VERSION = MAX(VERSION) + 1
第二個 --> INSERT NEW Record with start_dte = CURRENT_DATE AND VERSION = MAX(VERSION) + 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.