比方說,我有一個數據庫表叫products
擁有的產品列表,與主鍵product_id
是否可以將冗餘數據存儲在國外表的情況下記錄被刪除
然後我叫一個數據庫表purchase_order_products
其中包含分配給採購訂單的產品列表,其中包含外鍵product_id
。
現在,如果我強制執行兩個表之間的參照完整性,它只需要一個採購訂單來引用一個產品,並且不可能從數據庫中刪除該特定產品(除非該產品也被刪除)。
看來我有幾個選擇:
1)實施參照完整性,不要讓產品永遠被刪除。
2)不強制執行參照完整性,如果有人查看產品不再存在的採購訂單,只需將產品名稱顯示爲「UNKNOWN」或「DELETED」。
3)最後一個選項是不僅將產品名稱存儲在products
表中,還將其存儲在purchase_order_products
表中並與外鍵一起存儲。顯然這是多餘的數據,但它可以讓產品從products
表中刪除,同時仍允許用戶查看過去購買訂單中不存在的產品的名稱。
我對選項#3搖擺不定,但想知道什麼是「正確」的處理方式。
刪除你是硬刪除還是軟刪除? –
還有很多其他的選擇,甚至更多的組合。這使得你的問題「太廣泛」,直到你定義了需求。 –