gpt4 book ai didi

mysql - 动态规范化一个表是否可行?

转载 作者:可可西里 更新时间:2023-11-01 08:00:13 24 4
gpt4 key购买 nike

假设我的数据库跟踪鸟类目击事件(注意:为了示例,我真的在挖桶底)。

字段是:

sighting_id | common_name | park_name | location | time | etc....

尽管我假设公园始终位于同一位置,但该网站就像一个电子表格。用户为每个条目输入 park_namelocation。另请注意,我的实际架构还有其他字段也依赖于类似的“公园名称”(例如州)。

我没有办法让用户预先定义公园,所以我无法提前知道它们。我什至应该尝试动态规范化这些数据吗?例如,我的程序是否应该自动填充 parks 表,将观鸟表中的 park_name 和 location 列替换为 park_id

我主要担心性能。列出每一个目击事件都需要一个连接来填充公园和位置。此外,动态管理这几乎肯定需要比节省更多的资源。我可能需要一个 Cron 作业来消除孤立的公园,因为它们可能会在多次目击中被引用。

最佳答案

这在一定程度上取决于您的使用情况。规范化方法(park 是一个表)将使以下查询更容易:

  • 每个公园有多少次鸟类目击
  • 您最有可能在哪个公园看到鸟 XYZ
  • 可能还有很多这样的查询

但是,是的,您确实遇到了一些棘手的问题。 “如果公园 XYZ 不存在,则将其插入公园表”的模式存在您必须处理的竞争条件。

现在,这里有一些反对规范化的论点怎么样......大多数客户数据库可能将我的街道地址存储为“123 Foo Street”,而没有动态规范化街道名称(我们可以有一个街道表并将“Foo Street”放在那里, 然后从其他表中引用它。为什么我要提出这个,好表明即使那些讨厌任何重复数据的人也可能承认有一些你不一定要跨越的界线。

另一个愚蠢的例子是我们可能共享姓氏。我们真的需要一个唯一的姓氏表,然后是其他表的外键吗?这可能对某些应用程序有用,但对于 99% 的应用程序来说,这太过分了。这只是更多的工作和更少的性能,几乎没有收获。

所以我会考虑如何能够从表中查询数据。老实说,在这种情况下,我可能会为公园做一张单独的 table 。但在其他情况下,我选择不这样做。

那是我的两分钱,税后一分钱。

关于mysql - 动态规范化一个表是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318752/

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