SQL循环外键

时间:2018-06-28 21:16:21

标签: sql foreign-keys

假设数据库中包含一些帐户及其交易。

会有一个表Account(为简单起见,它仅包含一个ID)和一个表Transaction,该表具有列idaccount_id(外键),{ {1}}和type

现在,如果存入一些钱,那就没问题了。选择value并定义account_idtype。但是,如果我想从帐户a转移到帐户b,该怎么办?

我曾考虑过添加一种value来区分从哪里到哪里,但这不是imo的好解决方案。

还是为每个涉及的帐户添加两个交易?然后,我首先必须同时插入两者,并在更新后都需要互相引用。

第三,我考虑添加一个“转帐”表,该表将保存所涉及帐户的offset_account_id

我最后一个解决方案的问题是,如果我要删除一个帐户,而我想在整个数据库中级联它,则所有交易都应自动删除。但是,如果我删除a,则a的交易将消失,转帐表中的条目也将消失,但帐户b的交易仍将存在于数据库中。

如何解决这些“会计”问题?

其他问题:您是在运行时计算余额还是在插入/删除/更新触发器上使用余额来存储相应帐户?

1 个答案:

答案 0 :(得分:1)

我正在发布上述表格的示例。在此示例中,帐户ID“ 100”已向帐户ID“ 123”支付了$ 30。交易显示为应付账款表中的记录和应收账款表中的记录。

Table Examples

然后,如果一天关闭了100的帐户,则可以通过在应付帐款表中创建新记录来从帐户中删除剩余余额。如果将钱转移到新帐户,则还将在应收帐款表中创建一条记录。这将显示资金流动的历史。如果要跟踪哪个帐户已打开或关闭,我也建议创建一个包含所有帐号,客户名和“打开/关闭”列的表。这样,已关闭的帐户将反映在您的数据中,您仍然可以基于已打开或已关闭的帐户进行查询,但不会删除历史记录,这对于良好的会计记录至关重要。