1

我想問問你是如何處理外鍵的?
您是否級聯刪除,或只是將其標記爲已刪除,但在那裏?
這裏是我的示例:如何處理在交易中使用的外鍵?

 
Users(table) 1 ------ * Transactions(Table that has userId) 
          1 
          | 
          | 
          * 
Items(table) 1 ------ * TransactionItems(Table That has ItemId) 

(這種情況下是銷售交易)

做,如果我刪除在交易中使用具有該 用戶ID將被刪除所有交易用戶這當然不好..

簡單的答案可能是不允許應用程序的用戶刪除被引用的用戶記錄。所以這意味着你不能允許級聯刪除的權利?

所以,如果我使用級聯刪除事務和TransactionItems 之間的關係會好嗎?由於它沒有被引用。

回答

0

我會在名爲「Active」的用戶和項目表中添加一個bit或bool字段。爲所有記錄設置爲TRUE。當需要「刪除」用戶或項目時,將該位設置爲FALSE。更改應用程序中的所有查詢以過濾用戶和項目表WHERE Active ='TRUE',以便應用程序僅查看「未刪除」的用戶或項目。

這將爲userId保留諸如歷史報表之類的東西(您可以將Transactions表添加到用戶表,並且仍然與交易表中的所有用戶ID相匹配),但允許從角度看邏輯「刪除」你的申請。

這同樣適用於TransactionItems表中的itemId;對於Items表的加入仍然會匹配所有itemId的。

對於事務與TransactionItems的關係,由於沒有兩個事務記錄可以與同一個TransactionItems記錄相關,因此可以將關係設置爲級聯刪除,以便當刪除Transacations表中的記錄時,所有相關的TransactionsItems記錄也被刪除。 (任何與刪除的TransactionItems相關的項目仍然會保留。)

+1

嗨,感謝您的回答。我在考慮之前..所以應用程序用戶將按刪除按鈕,但其剛剛在數據庫中被刪除並不顯示在查詢中..謝謝..但如何處理事務和交易項目之間的關係,我必須把級聯刪除他們的關係? –

+0

我不明白Transactions和TransactionItems是其他表......所以在這種情況下,你可以在這些表之間的關係上設置級聯刪除。我添加到我的原始答案。 – jh00ker

+0

感謝您的幫助jh00ker .. –