- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道是否有人能帮我解决一个正常化的问题,当我试图创建一个单独的沟通表,为我的个人项目,我正在工作。假设我有以下表和表列:
表A:
表号、日期、姓名、代理号(FK)、备注
代理表:
代理人身份证、日期、姓名、电话、电子邮件、备注
直接接触表:
身份证、日期、姓名、电话、电子邮件、备忘
上面是我的实际表的一个示例,但是描述了我的问题。
基本上,要将上表规范化为1nf,我需要将notes列拆分为其on separate表,以帮助使表原子化,并遵守1nf规则。我想把它拆分成一个单独的列,叫做communication table,它可以让我跟踪我什么时候与相应的表和我讨论的内容进行对话。
我不知道如何最好地处理分离的通信表。因为表A中的notes也从表中链接到代理,但是代理表中的notes列只与与代理完成的通信有关。
因此,您建议以下哪项最适合通信表:
例1:
通讯表
com_id,日期,link_table,link_table_id,备注
这里,link_表应该定义正在处理的特定表,link_table_id是link_表上的特定id
更新:
抱歉,我忘记了,我还需要在上面添加另一个名为communicated_with的列,因为可能存在与表A相关的通信可能与其他代理或人员发生的实例。
所以这张桌子看起来像:
com_id,日期,链接表,链接表id,通信对象,备注
或
例2:
通讯表
通讯ID、日期、表ID、代理ID、D C ID、备注
在这里,所有不相关的id列都必须设置为空,而相关的列则用id定义。
或
例3:
通讯表
账号、日期、备注
在这里,所有其他表都有这个表的外键。(但是,这可能会迫使我重复其余的列,只是为了标识它是一个不同的列)。
更新2
想到了一个新的解决方案,在浏览了一些youtube视频之后,我注意到也许一个连接表可以工作。
例4
通信表(与示例1相同,没有“comminicated_with”列)
com_id,日期,链接表,链接表id,通信对象,备注
通信代理连接表
通讯号,探员号
我觉得这是可行的,因为它允许我使用link_table和link_table_id来匹配所表示的表,最后,当link_table链接到table_a时,可以使用comm_agent_join_id来指定与哪个代理通信。
抱歉,如果答案是直截了当的,我上次做正常化是在两年前,因此一直在努力做到这一点。
谢谢您。
最佳答案
对于如何将表放入1NF,这不是一个答案。不过,我希望这会有帮助。
在创建数据库时,我们通常不考虑1nf、2nf等,而是考虑要建模的对象和实体。当我们仔细考虑后,通常数据库已经在5nf左右了。如果有疑问,我们可以使用nfs作为一种检查表。
我不知道你的具体要求,所以这里有很多猜测或者只是一般性的建议。也许你的问题之一是你使用的名词“notes”并不能准确地描述这是怎么回事。后来你称之为“通信”,但所有的“注释”都是“通信”?
您的数据库是关于您直接从代理或服务公司获取的服务的。我看到的一个实体是这个提供者:
供应商
提供商ID
名称
联系人姓名
电话
电子邮件
类型(代理或最终服务提供商)
如果一个提供商可以有多个联系人、电话和电子邮件,则您可以将其改为提供商联系人表:
供应商
提供商ID
名称
类型(代理或最终服务提供商)
提供商联系人
提供商联系人ID
名称
电话
电子邮件
提供商ID
至于注释:如果有关于提供者的注释(“总是找简,她是那里最专业的。”)或联系人(“简在伦敦和马德里工作过。”),我通常只制作一个文本列,您可以在其中输入任何您喜欢的内容。您甚至可以存储HTML或Word文档。我想每个提供者不需要多个文档。
现在也有服务。要么需要一个谁提供哪个服务的列表,然后添加这些表:service
(哪些服务存在)和provider_service
(谁提供哪个服务)。但也许你可以这样做,因为你知道哪些服务存在,谁提供它们,并且不想在你的模型中有这种服务。
我不知道你是想咨询服务还是只想订一份固定的服务合同。在任何情况下,您都可能需要一个带状态或不带状态的service_contract
表。
服务合同
服务合同
提供商ID(或者提供商联系人ID?)
服务(引用服务表的免费文本或服务id)
有效的
有效的
在这里,你可能会有“我们还在等文件”这样的注释。简说,他们将在2018年3月来。”,这又是一个专栏。
然后你说你想要那封信,那可能是另外一张表:
服务合同
服务合同对应
服务合同
类型(从提供程序接收或发送到提供程序)
文本
但话说回来,也许你可以不用它。您是否需要访问单个对应项(例如,“从2017年12月起给我所有对应项”或“删除所有超过一年的对应项”)?或者一份合同上会有成千上万封信?别这样。也许您可以再次将其视为一个单独的文档(文本、html、word,…)并将其作为一个字段添加到表中。
包含多个联系人的文本,如
2018年1月2日简
她说他们需要几个星期才能提出报价。
2018年1月20日
我问过情况。和托马斯·史密斯谈过了。他说他们明天会打电话给我们。
2018年1月21日简
她已经把合同发电子邮件给我们签了。
不是针对NF1的。只要您对数据库中的细节不感兴趣(例如,您永远不会在合同中单独选择所有一月的通信),那么对于数据库来说,这是原子的;不需要更改。
与联系人相同。如果您只有一个字符串列“jane(销售人员)123-45678 jane@thems.com,jack(助理)123-98765 jack@thems.com”,那么这本身就不是针对nf1的。只要您不想只选择姓名或检查电话号码,但始终将字符串作为一个整体,作为联系人,然后就这样做。
你看,这一切都归结为你到底想建模什么,以及你想如何处理数据。是的,有代理和直接提供程序,但是这两者之间的差异是否太大以至于需要两个不同的表?是的,每个合同都有一个对应关系的年表,但是您真的需要将它们分为数据库中的单个对应关系吗?
关于sql - 如何规范化可以链接到一个或多个表的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49079754/
我正在寻找一个库函数来规范化 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
我是一名优秀的程序员,十分优秀!