2011-06-04 171 views
1

我正在創建一個數據庫,其中特定材料的價格來自鏈接的表格,您可以更新和修改鏈接到該值的所有記錄。更新產品價格更改所有訂單的價格

問題是,當我更新它時,它是普遍的,並且先前以更低/更高價格購買的客戶也被修改。我只是想能夠更新價格,而不是更改所有記錄,但只能從這一點開始。

這怎麼辦?

回答

2

在存儲購買信息的表格中,您需要存儲他們購買產品的價格。

我通常使用產品表作爲查找表。這意味着當用戶在訂單輸入屏幕中輸入部件號時,我只需使用DLookups(或記錄集)將描述,價格和任何其他相關信息放入我的訂單明細表中。這允許用戶在不影響產品表格的情況下,根據其特定訂單更改商品的描述或價格。它的確增加了存儲容量的需求,但我的印象是這是大多數訂單輸入系統的工作原理。用您明顯使用的設計來實現相同的靈活性和數據完整性是不可能的。

爲了保存歷史記錄,我還存儲了有關可能在以後更改的客戶的任何信息。這種做法當然是有爭議的。但是,我發現能夠查看以前的訂單很方便,例如,當我們向他出售x時,特定的客戶仍然位於他的舊地址。

0

根據HK1的建議(另外並明確地存儲每個訂單的適用項目價格),可能是您想要的方式,因爲您提到了這個有趣的DBMS。

這不構成「冗餘」與項目表中持有的價格,因爲該表是關於當前價格,將被記錄訂單中的項目表中的價格將大約過去價格。

但是,請注意,仍然存在一種「冗餘」,即對於同一項目和同一時刻的兩個不同訂單項必須具有相同的價格值。嚴格地說,這是一個你應該執行的約束。

因此,「真正」優雅的解決方案是保留一個單獨的物品價格歷史表,如果您想完全重建過去的訂單,請將其與過去的訂單一起加入,並在日期/時間。

+0

爲反阿波特偏執反撥。你爲什麼堅持認爲這是一個完美的答案?這完全不是一個Access特定的問題,模式設計錯誤不是由提問者使用Access引起的,而是由於忽視瞭如何正確建模數據造成的。失去「amateabase DBMS」,我會扭轉我的失望。 – 2011-06-09 01:40:19

+0

OP用MS-ACCESS明確標記了問題。這確實意味着他打算在Access平臺上做這件事,我想。這確實證明了我認爲特定平臺對於解決/解決這類特定問題的適當性:無所謂。即使你不喜歡這些措辭,情況依然如此。 – 2011-06-10 15:00:23

+2

你沒有提到你不喜歡Access的任何實際原因 - 你只是搞名字調用。如果您想註冊您有關使用Access的預訂,請務必簡要概述您的理由。我可能達不到相同的結論,但至少我能理解你來自哪裏。放棄「amateuristic DBMS」的評論只是懶惰的名字調用,沒有別的,除了減少答案之外別無他法。如果你想提供一個很好的答案,那麼切斷它或將它擴展到有意義的東西。 – 2011-06-12 20:09:20

相關問題