【问题标题】:Handling Database History for Banking Accounts处理银行账户的数据库历史
【发布时间】:2015-07-17 05:43:19
【问题描述】:

我正在创建一个银行数据库,但这里有以下问题。

假设 CustomerA 有一个帐号 4444,通过它我可以访问与该客户相关的所有详细信息,我有一个单独的主键,但我通常会查询此帐号。

现在,由于某种原因,客户 A 的帐号从 4444 更改为 5555,并且新客户 B 的帐号为 4444。

我希望我的数据库能够处理这样的变化,我应该采用什么方法?

我开发的方法是:为账号分配时间戳,这将有助于我有效地查询以找出当前账号相关的客户名称。

但我无法设计一个查询:

  • 当我使用 4444 访问 CustomerB 时,仅显示与 B 相关的当前详细信息,而不是 4444 指向 CustomerA,并且
  • 当 5555 访问客户 A 时,会显示所有详细信息,包括 4444 存储在数据库中的详细信息

【问题讨论】:

  • 最直接的解决方案是不使用改变值的字段作为外键/主键。在这种情况下,这意味着仅使用帐号来查找帐户 ID,然后将其用作标识符。
  • 好的,但我不能这样做,现在我已经通过帐号访问所有内容
  • 好吧,如果仅通过帐号无法找到您要查找的内容,而您只有一个帐号...
  • 帐号不应更改
  • 客户帐号可能会发生变化。当然,变化的不是一个数字;将号码分配给特定帐户会发生变化。

标签: mysql database rdbms surrogate-key


【解决方案1】:

我假设这是一个教育练习,而不是真正的银行应用程序。

仅使用帐号来识别客户信息并没有什么意义。客户可以拥有多个账户,并且账户可以由多个客户共同持有,因此帐号不太可能成为客户的合适密钥。我建议您为此创建一个客户编号。

我严重怀疑任何银行都会轻率地将旧帐号分配给新客户。自上次使用帐号以来,这可能会在多年后发生,但这可能不是您在数据库设计中需要预料的事情。同样,我不希望删除或覆盖客户帐号,因为包括帐号在内的帐号详细信息通常会保留数年(可能是数十年)。

【讨论】:

  • 非常感谢您花时间研究这个问题,实际上我想创建一个上视图,您可以说我的应用程序已经处于工作状态,现在我必须添加一个更改帐号的选项用于获取客户详细信息的各种查询,我想做一个映射,使帐号 + virtual_id 变成你可以说的辅助键或唯一键,然后我在开始时将所有帐户映射到 virtual_id 然后更改帐号,但也需要在此处调整时间戳,以便我只能获取最新的帐户持有人详细信息
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2019-07-22
相关资源
最近更新 更多