目前正在为自然遗产网站开发CMS,只是希望获得有关处理照片的特定部分的数据库ERD的一些反馈。
我有一张名为Species的表,它有不同植物种类的记录。与此相关的是基本上跟踪物种可以找到的区域的种群,然后每当有人出去时,观察基本上记录并观察该群体以记录健康,变化等。
链接到所有媒体,它基本上是一个包含存储在云上的照片的散列链接的表。照片需要有关于拍摄物种的信息,但我们也想知道拍摄照片的时间和地点,因此需要将其与拍摄事件联系起来。这是ERD的子部分,突出了循环。
我只是想知道,这个循环是否可能导致问题?我知道我可能会删除从媒体到物种的链接,并且仅通过目击链接该引用,但是我希望以后能够对机器学习做出贡献(主要是为了分析照片库中的新照片以确定哪些物种已经存在拍摄)。我假设它在处理时间方面会很昂贵,如果必须通过其他2个表来获取特定物种的整个照片列表然后进行分析。
这是一个有效的假设吗?
答案 0 :(得分:0)
您没有任何循环/循环依赖关系。你拥有的是通过媒体确定物种的两条路径。直接功能依赖:
mediaID -> speciesID
以及传递函数依赖:
mediaID -> sightID -> popID -> speciesID
这里的风险是不一致的。程序中的错误(或错误的手动输入)最终可能会通过两条路径记录给定媒体的不同物种。理想情况下,我们只想记录每个事实,并让DBMS确保数据的有效性。
您的假设不一定正确。数据库管理系统有许多加速连接的机制,比如索引。连接查询的效率或效率究竟取决于许多因素,例如特定的DBMS,您在各种表中预期的记录量,您创建的索引以及用于检索数据的特定查询。
我建议您暂时删除冗余属性。如果您发现连接查询无法充分优化,那么以后重新引入它并通过合适的查询填充它很容易。如果保留(或重新引入)冗余属性,则可以使用触发器或外键约束等强制执行一致性。或者,用于更新冗余属性的夜间脚本可以帮助防止出现不一致。