- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我描述我的问题之前,我想解决一些问题:
假设我们每月从一家银行收到一次 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/
我正在寻找一个库函数来规范化 Python 中的 URL,即删除路径中的“./”或“../”部分,或添加默认端口或转义特殊字符等。结果应该是指向同一网页的两个 URL 唯一的字符串。例如 http:/
我有 2 个版本的 XSD 文件,我想看看它们之间做了哪些更改。不幸的是,发布者选择完全重写 XSD,更改元素、属性、命名空间前缀等的顺序。是否有工具(命令行或 GUI)可以将它们转换为我可以使用的规
我一直在想,同时使用 normalize.css 和某种 CSS 重置会不会有什么大问题?我一直在四处挖掘,我遇到的所有文章都只是以非此即彼的方式谈论它们,而没有谈及将两者结合起来。 诚然,我在规范化
这对我来说是一个新话题,我已经阅读了几篇文章,但我仍然不清楚,甚至不确定以下问题是否与这篇文章的标题有关。 我的系统向用户发送数据。用户可以选择通过以下方式发送数据: XML 电子邮件 发布 根据用户
我正在从设计不佳的旧数据库升级到新数据库。在旧数据库中有带有字段 Id 和 Commodities 的 tableA。 Id 是主键,包含一个 int,Commodities 包含一个逗号分隔的列表。
假设我有包含此字符串的 Apache Solr 索引文档: Klüft skräms inför 我希望能够使用此关键字通过搜索找到它(注意“u”-“ü”): kluft 有没有办法做到这一点 ? 最
假设您正在处理常规的联系人数据库(您知道...姓名,电话号码,地址,电子邮件等...)。如果您在本地对此感到疑惑,那么一般来说这不是什么大问题,但是当我们查看国际场景时,它就是。 查看电话号码系统,您
尝试在不使用 python 中的任何包的情况下计算 L1 范数 假设我有向量:l = [2.34, 3.32, 6.32, 2.5, 3,3, 5.32] 我想找到这个向量的L1,没有任何包: 我已经
我们拥有 10 年的存档体育数据,分布在不同的数据库中。 尝试将所有数据合并到一个数据库中。由于我们将处理 10 倍的记录数量,因此我现在正在尝试重新设计架构以避免潜在的性能影响。 一项更改是将团队名
我正在使用以下设计为我的网站创建表格 设计1 设计2 由于并非所有注册用户都会尝试挑战,因此设计 1 适合。插入第三个表时,表 2 分数会相应更新。但是 user_id 字段变得多余。 设计 2 中为
我有一个带有字段 json 的表模板。由于 json 对于许多 template 来说可能是相同的 (1:n),我创建了另一个表 template_json 并添加了字段 template_json_
我有一个具有正交投影的 C++/OpenGl/Glut 应用程序。 窗口的宽度为 500 x 500 像素。目前,当鼠标点击发生时,该点将在 (0,0) 和 (500, 500) 之间。 我想获取该点
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我的印象是 JavaScript 解释器假设它正在解释的源代码已经被规范化。什么,规范化到底是做什么的?它不能是文本编辑器,否则源的明文表示会改变。是否有一些执行规范化的“预处理器”? 最佳答案 EC
我被分配了一项任务,但我不确定如何完成它: 我必须构建一个支持多种设备的消息系统,并且它应该尽可能高效。用户最多可以有 10 台设备,当用户收到消息时,所有设备都需要接收消息。 我有两个想法: Tab
我正在尝试将规范化合并到我的数据库设计中,互联网上提供的一些解释让我有点困惑 - 我不确定我是否在朝着正确的方向前进? 到目前为止我有: 用户: id username password 用户配置文件
规范化数据时,是否可以接受在同一张表中重复使用外键? 例如一家 express 公司有一个订单表和一个客户表,订单表会记录从哪个客户那里取件(Customer_ID),并且还会有一列用于说明要交付给哪
用 Java 制作规范形式的 XML 文件的最简单方法是什么?你有一些完成的代码吗?我在网上找到了几个链接,比如 this , this , 和 this ,但我无法让它工作:/ 谢谢, 伊凡 编辑:
在 Python 中是否有标准方法来规范化 unicode 字符串,以便它只理解可用于表示它的最简单的 unicode 实体? 我的意思是,可以将 ['LATIN SMALL LETTER A', '
我知道这个问题已经讨论了很多——但实际上我还没有找到这个问题的最终答案。 我想从我的 VBA(Excel)脚本中的日期“删除”(或更确切地说是标准化)时间。例如。: 20.12.2017 15:16
我是一名优秀的程序员,十分优秀!