动态规范化表是否可行?

| 假设我的数据库跟踪鸟类的目击情况(注意:例如,我确实在刮擦桶的底部)。 这些字段是:
sighting_id | common_name | park_name | location | time | etc....
尽管我假设公园将始终位于同一位置,但该网站就像电子表格一样。用户为每个条目输入
park_name
location
。还请注意,我的实际架构还有其他字段,这些字段也取决于类似的“公园名称”(例如州)。 用户无法预定义公园,因此我无法提前知道它们。我是否应该甚至尝试动态标准化这些数据?例如,我的程序是否应该自动填充一个
parks
表,并用
park_id
替换观鸟表中的park_name和location列? 我主要担心性能。列出所有景点将需要加入以填充公园和位置。同样,动态管理此需求几乎可以肯定比其节省的资源更多。我可能需要Cron职位来消除孤立的公园,因为它们可能会在多个景点中被引用。     
已邀请:
        这取决于您的用法。规范化的方法(公园是一个表)将使以下查询更加容易: 每个公园有多少只鸟类景点 您最有可能在哪个公园看到XYZ鸟 可能还有更多这样的查询 但是,是的,您确实遇到了一些棘手的问题。模式“如果不存在停车XYZ,则将其插入到停车表中”会遇到必须处理的竞争状况。 现在,这里有一些反对规范化的论点呢...大多数客户数据库可能将我的街道地址存储为\“ 123 Foo Street \”,而没有动态地规范化街道名称(我们可以有一个街道表,并放置\“ Foo Street \”为什么要提出这个问题,以表明即使讨厌任何重复数据的人也可能会承认您不一定必须跨越某些界限。 另一个愚蠢的例子是我们可能共享姓氏。我们真的需要一个具有唯一姓氏的表,然后需要其他表中的外键吗?可能在某些应用程序中这很有用,但是对于99%的应用程序来说,这太过分了。它只是增加工作量而降低性能,几乎没有收益。 因此,我将考虑如何希望能够从表中查询回数据。老实说,在这种情况下,我可能会为公园做一张单独的桌子。但是在其他情况下,我选择不这样做。 那是我的两美分,税后是一美分。     
        我在原始的“ parks”示例中花费了2美分(与OP的实际问题相对): 反对尝试自动规范公园和位置列的决定性论点是可用性:当以可编辑的电子表格格式将数据呈现给用户时,他们自然会假设每一行都可以独立编辑,因此具有欺骗性(并可能最终导致混乱),如果某些列(例如\“ location \”)实际上与公园相关联,而不是与行相关联。 处理这种情况的典型模式是仅在提示输入用户新公园时,提示用户输入公园的详细信息,并在“公园”表中创建一行。例如,如果“公园”列包含一个下拉框,则最后一个选项可以是“添加新公园”。或者,当用户输入无法识别的公园名称时添加一个新的公园-但仍向用户清楚表明正在创建一个新的公园。     

要回复问题请先登录注册