【问题标题】:Datasets with different information - single table or 1 per set?具有不同信息的数据集 - 单个表还是每组 1 个?
【发布时间】:2011-02-17 21:00:19
【问题描述】:

我和其他同学在一个小组中设计软件,该软件允许用户上传有关某个区域的历史数据,然后根据其他列信息过滤该数据。每组数据的列信息可以完全不同。例如,我们有一个大型 CSV,其中包含有关 1700 年代后期生活在费城的人们的信息,包括以下列:

职业、寡妇、非洲人、地址、评论

地址是集合中唯一的共同属性。

我认为我们应该为每个数据集创建一个新表,因为我们不知道未来会有哪些列或会有多少列。明天有人可以上传文件,将有关养鸡场的信息,以及类似的列

有鸡配棕色鸡蛋、小麦、地址、苹果

我只知道我自学过的东西,但后来其他同学告诉我,每组新桌子在哲学意义上是。唯一的竞争设计是具有多个通用“属性”列的单个表,这些列与元信息/描述属性的另一个表按集合分隔。

我很难看到为每组创建一个新表的缺点,但我对我对 MySQL 的街头教育没有足够的信心来为它提供一个强有力的案例——尤其如此 如果有更好的方法可以做到这一点。我只被告知它是反数据库的(虽然不是这样 - 我的队友很棒,我只是想了解。)

似乎使用单独的表可以让我们选择特定的数据类型(varchardatetime 等),并在运行实际语句之前将查询限制在相关数据中。 另外,如果我们得到一个包含许多列的数据集,替代解决方案将需要新的通用列,即使以前/未来的集合不再需要它。我(部分)理解他们的推理,并认为它会起作用 - 但我无法看到看似更多工作的好处。

是否有“正确”的方式来做到这一点?

编辑: 过滤最终用于使用 Google 的 Maps API 在地图上绘制点。对地址进行地理编码的代码大部分已经完成。

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    你是要查询不同数据集的那些字段还是只显示信息?如果只是为了显示,您可以将所有这些信息放在一个字段中。如果您需要查询它,这是一个坏主意。您也可以使用 EAV 表,在这种情况下,我可能想知道关系数据库是否是该信息的最佳选择(除了地址的东西)。我会为此调查一个无 sql 数据库。 或者您可以为每种信息制作一个表格并加入它们。不过,在这种情况下,我不确定它是否有效,因为您将拥有如此多的查询,并且不知道要加入哪个查询以进行任何查询。

    【讨论】:

    • 我只是建议将所有信息也放在一个字段中:)
    • 实际上,有人建议调查 NoSQL 的事情!我肯定有兴趣,会看看。您和@webdevbyjoss 似乎都提到了 EAV,所以我将立即继续阅读。这个想法是我可以从下拉列表中选择一个属性列并要求一个值;我可以从 Phila 数据集中选择所有非洲医生并查看地址。
    • noSQl 通常可以比关系数据库更好地处理 EAV 类型的数据,所以我会看看它。我相信这正是 noSQL 数据库旨在处理的那种事情。
    • 感谢您的额外帮助!我希望我有足够的代表来投票! :)
    【解决方案2】:

    如果您只是要过滤它(而且我认为您不能做更多的事情),请将所有内容放在一个表中,并添加一个额外的列(外键)指向到另一个具有集合名称的表(以防用户想要集合中的所有数据。

    我建议将所有内容放在一个表中,因为听起来、感觉和看起来就像您正在尝试使用来自不同来源的数据构建某种数据仓库,而这些数据来源之间并不一致。

    您可能希望为未填充的列创建默认值,但这在很大程度上取决于您将如何使用数据。

    【讨论】:

    • 啊,我将在主帖中添加一个编辑:最终,过滤用于使用 Google 的 Maps API 绘制点。这部分(对地址进行地理编码)在很大程度上已被编码。据我所知,一次只能从同一个集合中访问数据。不打算使用交叉集查询,这就是我最初认为单独的表的原因。有了这些信息,把它放在同一张桌子上还有意义吗?每个集合都与自身一致,只是与未来或先前存在的集合不一致。抱歉,如果我的原始帖子根本不清楚,我会尽力澄清。感谢您的快速回答!
    【解决方案3】:

    正确的方法是使用 EAV(实体-属性-值)方法。有很多关于如何为 MySQL 实现它的信息。

    无论如何,如果您必须搜索/过滤该数据,您可以为它建立一个搜索索引,或者为每个具有相似属性集的数据集建立一个单独的搜索表。

    例如,您可以有以下表格:产品、 属性, 价值观。

    为了实现快速有效的搜索,我们可以创建并定期重建一个特殊的搜索索引或单独的搜索表,这些搜索表具有特定产品集的共同属性,例如:

    搜索工具, 搜索家具, search_otheritems

    【讨论】:

    • 谢谢!您和@HLGEM 都提到了 EAV 方法,所以我一定会开始阅读它。感谢您的帮助;就像我说的,我只知道我自己教过的东西,否则不会有这种洞察力!
    猜你喜欢
    • 2014-02-21
    • 2020-08-05
    • 1970-01-01
    • 2010-12-26
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多