1

我想问一下你如何处理外键?
你是级联删除,还是只是将其标记为已删除但它在那里?
这是我的示例:

用户(表)1 ------ * 事务(具有用户 ID 的表)
                             1
                             |
                             |
                             *
Items(table) 1 ------ * TransactionItems(具有ItemId的表)

(此方案适用于销售交易)

如果我删除一个在事务中使用的用户,那么所有具有该用户 ID 的事务都将被删除,这当然是不行的。

简单的答案可能是不允许应用程序的用户删除被引用的用户记录。所以这意味着你不能允许级联删除对吗?

那么,如果我对 Transactions 和 TransactionItems 之间的关系使用级联删除,那可以吗?因为它没有被引用。

4

1 回答 1

0

我会在名为“Active”的用户和项目表中添加一个位或布尔字段。为所有记录设置为 TRUE。当需要“删除”用户或项目时,将该位设置为 FALSE。更改应用程序中的所有查询以过滤用户和项目表 WHERE Active = 'TRUE' 以便应用程序只看到“未删除”的用户或项目。

这将为诸如历史报告之类的内容保留 userId(您可以将 Transactions 表连接到 Users 表,并且仍然匹配 Transactions 表中的所有 usersId),但允许从应用程序的角度进行逻辑“删除”。

TransactionItems 表中的 itemId 也是如此;您对 Items 表的加入仍将与所有 itemId 匹配。

对于 Transactions 与 TransactionItems 的关系,由于没有两条 Transactions 记录可以关联到同一个 TransactionItems 记录,所以可以将关系设置为 Cascade Delete,这样当 Transactions 表中的一条记录被删除时,所有相关的 TransactionsItems 记录都会被删除,如出色地。(与那些已删除的 TransactionItems 相关的任何项目仍将保留。)

于 2013-07-12T18:04:12.220 回答