gpt4 book ai didi

database - 规范化和历史数据

转载 作者:搜寻专家 更新时间:2023-10-30 23:22:56 24 4
gpt4 key购买 nike

在我描述我的问题之前,我想解决一些问题:

  1. 我是一位经验丰富(但不是专家)的数据库设计师。我相信我已经很好地掌握了关系模型。
  2. 我对关系模型的理解还不够深刻,以至于我无法确切地知道在每种情况下该怎么做。我还在学习。

假设我们每月从一家银行收到一次 Excel 电子表格,但并不总是同一家银行。电子表格只有六列:银行名称、帐号、账户余额、客户(账户持有人)姓名、客户 SSN 和账户持有人地址。每一行都有一个不同的帐号,没有一个帐号被列在多于一行中。我们想将此电子表格导入数据库,并在未来的任何时候说“John Smith 在 2010 年 10 月 13 日的地址是什么?”

为简单起见,假设每个客户只有一个地址,并且每个客户可以有零个或多个帐户。稍等片刻,让我们假装我们只需要导入一个 Excel 工作表,这是一个愚蠢的前提,但请耐心等待。如果是这样的话,下面的设计就足够了:

bank
--------
id
name

account
--------
id
bank_id
customer_id
number
balance

customer
--------
id
name
ssn
address
city
state_id
zip

state
--------
id
name

我的其余问题基于您同意该架构“正确”的前提,因此希望您对此没有意见。

现在,如果我们只进行一次导入就好了,但我们每年每家银行将进行 12 次导入。以下是我考虑的原因:

bank
--------
id
name

account
--------
id
import_id
bank_id
customer_id
number
balance

customer
--------
id
name
ssn
address
city
state_id
zip

state
--------
id
name

import
--------
id
date
excel_file (blob)

现在每个帐户都与一个导入相关联,我们可以肯定地说“帐户 12345 来自于 10/13/10 导入 572”。例如,当您查看 customer 表时,它可能会变得更加模糊。由于 customer 表中的行少于 account 表中的行(因为有些客户有多个帐户),我们之间没有一对一的关系客户和进口就像我们对账户和进口所做的那样。我知道不会丢失数据,也不会丢失数据完整性,但不知何故,这仍然感觉像是某种牺牲。

我的问题是(这可能过于开放):您认为这是存储数据的好方法吗?你会有不同的做法吗?

编辑:您必须了解一种重要的思考这些实体的方式。不要将 account 视为一个随着时间的推移而存在的帐户。将帐户视为某个时间点的帐户快照。因此,余额为 100 美元的帐户 12345 与余额为 150 美元的帐户 12345 不是同一帐户。是的,两条记录都与现实世界中的同一个银行账户相关联,但我存储的是某个时间点的账户快照。与客户的情况相似(但不相同)。

最佳答案

对不起,我无法调和“每个客户只有一个地址”和“我们想说‘John Smith 在 2010 年 10 月 13 日的地址是什么’”这两个说法。您是否建议在每次导入时为在导入中找到的每个人创建一个客户记录?如果是这样,如果帐号不同,您如何知道一次导入中的 John Smith 与另一次导入中的 John Smith 是同一个人?

如果您为同一个客户重复使用同一个客户记录(这对我来说似乎是正确的),您在哪里可以找到之前的地址信息?

[发帖人评论修改后]

好的,您快完成了。您确实需要将客户地址添加到 Account 表(实际上应该重命名为 AccountImports 或类似名称)。这是因为每次导入可能有不同的地址。

如果地址在导入与导入之间经常保持不变,那么将地址存储在 AccountImports 中有点不正常。如果是这样,您可以添加一个 CustomerAddressHistory 表。在每次导入期间,检查 CustomerAddressHistory 中 SSN 的最新地址,如果与导入不相同,则将新地址添加到该表中的新记录。

关于database - 规范化和历史数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com