2009-06-18 69 views
0

這是我的情況。我有以下表格:處理已刪除表格行的最佳做法?

  • 產品
  • 產品屬性
  • 訂購產品(引用一個PRODUCT_ID和ORDER_ID)
  • 訂購產品屬性(引用一個order_product和一個product_attribute)。

當管理員進入編輯產品屬性(例如「顏色」)時,他可能會錯誤地刪除該屬性,然後將其添加回來。如果已經爲該產品下達了訂單,那麼當他刪除並重新添加該屬性時,其產品屬性表中的ID會更改。這使得訂單產品屬性引用不存在的屬性ID(雖然該屬性仍然存在)。

解決此問題的最佳方法是什麼?也許我只是需要對這個問題有不同的看法。

注意:如果在編輯產品時所有屬性都被刷新,並且當前選擇的屬性可能相同,那麼也可能會發生問題(同樣重要)。

回答

3

不允許'錯誤地刪除'...只是在產品屬性表中有一個'active'或'inactive'標誌作爲列。

您始終可以使用順序而不是屬性ID保存屬性。如果你的設計使得id屬性不斷變化,那麼你的訂單就沒有歷史的有效性。或者製作產品的新「版本」,並在進行更改時將舊版本設置爲不活動狀態,或者按順序保存產品狀態,以便獲得一些歷史記錄。

0

向表中添加觸發器以防止刪除使用中的屬性?

OR

添加刪除標誌該表,並設置標誌,而不是實際刪除的行。將IsDeleted = False添加到訪問要選擇的屬性表的任何查詢的where子句中。

+0

我也考慮過了,但看到底部的註釋。在這種情況下你會做什麼?看起來像這樣沖洗是一種相當普遍的做法。 – 2009-06-18 02:25:51

3

使用innodb作爲您的表類型並將正確的外鍵關係添加到您的相關表中。然後,您將無法意外刪除您所依賴的行。

當然,如果您仍然想(在某些情況下)允許這樣做,您可以將foreign_key_檢查設置爲關閉。

+0

+1非常同意。實際上,我會一直啓用所有外鍵檢查 - 您不希望產品引用未定義的屬性。如果您需要刪除該產品屬性,則需要先將其從所有現有產品中刪除。 – 2009-06-18 02:45:59

相關問題