繁体   English   中英

数据库 ERD,潜在的循环问题?

[英]Database ERD, potential loop issues?

目前正在为一个自然遗产地开发 CMS,只是想获得一些关于数据库 ERD 的反馈,用于处理照片的特定部分。

我有一个名为 Species 的表,其中包含不同植物物种的记录。 与此相关的是基本上跟踪可以找到物种的区域的种群,然后目击记录基本上会记录每次有人外出并查看该种群以记录健康状况、变化等。

链接到所有媒体,这基本上是一个包含存储在云上的照片的散列链接的表格。 照片需要有关于拍摄了哪些物种的信息,但我们也想知道这张照片是在何时何地拍摄的,因此需要将其与目击事件联系起来。 这是 ERD 中突出显示循环的小节。

在此处输入图像描述

我只是想知道,这个循环是否会导致问题? 我知道我可能会删除从 Media 到 Species 的链接,并仅通过目击链接该参考,但是我想稍后使其有助于机器学习(基本上是针对照片存储库分析新照片以识别哪些物种是拍照)。 我假设如果它必须通过其他 2 个表格来获取特定物种的完整照片列表然后进行分析,那么它在处理时间方面会很昂贵。

这是一个有效的假设吗?

您没有任何循环/循环依赖项。 您所拥有的是两种可以从媒体确定物种的途径。 直接的功能依赖性:

mediaID -> speciesID

以及传递性函数依赖项:

mediaID -> sightID -> popID -> speciesID

这里的风险是不一致。 程序中的错误(或错误的手动输入)可能最终会通过两条路径记录给定媒体的不同种类。 理想情况下,我们只希望记录每个事实一次,并让DBMS确保数据的有效性。

您的假设不一定正确。 数据库管理系统具有许多加快连接速度的机制,例如索引。 联接查询的效率到底有多高取决于许多因素,例如特定的DBMS,在各种表中期望的记录量,创建的索引以及用于检索数据的特定查询。

我建议您暂时删除冗余属性。 如果发现无法充分优化联接查询,那么很容易在以后重新引入它并通过合适的查询填充它。 如果您保留(或重新引入)冗余属性,则可以使用触发器或外键约束之类的方法来增强一致性。 或者,每夜更新更新冗余属性的脚本可以帮助防止不一致。

您可以打破物种和媒体之间的循环,因此您只需要知道目击事件,这将导致获得种群,然后您将获得物种,但是如果您打破任何其他关系,您将获得像扇形陷阱这样的陷阱,如果你打破了人口目击之间的联系

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM