我想问一下你是如何处理外键的? 您是否级联删除,或者只是将其标记为已删除但是在那里? 这是我的样本:
Users(table) 1 ------ * Transactions(Table that has userId) 1 | | * Items(table) 1 ------ * TransactionItems(Table That has ItemId)
(此方案适用于销售交易)
如果我删除了在事务中使用的所有事务的用户 用户ID将被删除,当然不是正确的..
简单的答案可能是不允许应用程序的用户删除正在引用的用户记录。那么这意味着你不能允许级联删除吗?
所以,如果我对Transactions和TransactionItems之间的关系使用级联删除 那可以吗?由于没有被引用。
答案 0 :(得分:0)
我会在名为“Active”的Users和Items表中添加一个位或bool字段。将所有记录设置为TRUE。当需要“删除”用户或项目时,将该位设置为FALSE。更改应用程序中的所有查询以过滤用户和项目表WHERE Active ='TRUE',以便应用程序仅看到“未删除的”用户或项目。
这将保留userId以用于诸如历史报告之类的东西(您可以将Transactions表加入Users表并仍然匹配Transactions表中的所有usersId),但允许从您的角度进行逻辑“删除”应用
同样适用于TransactionItems表中的itemId;您对Items表的加入仍将匹配所有itemId。
对于Transactions与TransactionItems的关系,由于没有两个事务记录可以与同一TransactionItems记录相关,因此可以将关系设置为Cascade Delete,这样当删除Transacations表中的记录时,所有相关的TransactionsItems记录都是也被删除了。 (与那些已删除的TransactionItem相关的任何项目仍将保留。)