Database design 数据库设计、愿望清单及其项目

Database design 数据库设计、愿望清单及其项目,database-design,Database Design,我正在创建一个新的数据库来管理愿望列表 解决方案A: 两张桌子 愿望清单和 愿望清单项目 解决方案B: 一张桌子 愿望清单和物品 每列都有一个愿望列表项,因此该表上有许多列 哪个更好?解决方案A更好。每当您尝试将集合存储在列而不是行中时,都会遇到问题。我肯定会选择第一种解决方案: 至少,这意味着您可以拥有您想要的任意多个项目——而且在应用程序端处理起来可能会更容易(例如,考虑“删除项目”或“添加项目”) 第二个解决方案绝对不合适 溶液A是标准化的,而溶液B不是。在大多数情况下,解决方案

我正在创建一个新的数据库来管理愿望列表

解决方案A:

两张桌子

  • 愿望清单和
  • 愿望清单项目
解决方案B:

一张桌子

  • 愿望清单和物品

    每列都有一个愿望列表项,因此该表上有许多列


哪个更好?

解决方案A更好。每当您尝试将集合存储在列而不是行中时,都会遇到问题。

我肯定会选择第一种解决方案:

  • 至少,这意味着您可以拥有您想要的任意多个项目——而且在应用程序端处理起来可能会更容易(例如,考虑“删除项目”或“添加项目”)
  • 第二个解决方案绝对不合适

溶液A是标准化的,而溶液B不是。在大多数情况下,解决方案A会更好、更灵活。最主要的情况是,如果要在大型表上创建某个复杂联接的汇总表,以用作常见问题的快速查询源,则情况并非如此。除非您正在构建数据集市,否则不太可能出现这种情况。使用解决方案A。

第二种解决方案会更好,只有当您为了更方便的缓存而被迫进行非规范化时,或者如果您的应用程序大幅增长并且需要数据库分片时。在所有其他情况下,我更喜欢数据库的干净设计

多表比较复杂,所以单表比较实用、简单,值得考虑。假设愿望列表是网站的一项功能,一些用户来这里,创建用户帐户,然后列出他们的愿望,这可能不太明显,但如果你想到了,需要问一个问题,为什么你希望有一个标题表来定义愿望列表,而不是只有第二个表,列出愿望。在我看来,这种方法的需要表明,每个用户(可能)都希望拥有不止一个愿望列表。一个是给亲密的朋友和亲戚的,一个是给计划在2050年进行太空船探险的:)否则,所有的愿望可能会整齐地列在愿望细节(第二)表中,没有第一个,因为一个巨大的愿望清单(我们称之为默认愿望清单),不区分愿望,是你想要的礼物,或者计划在准备太空船探险时完成(祝你的愿望成真!:)

回到表的设计,这里有一些注意事项。如果你不打算

  • 使用愿望清单实现愿望清单
  • 分别为每个“whishe”添加任何细节和细节
  • 而不是将列表存储在长字符串字段中,这样就允许使用单个表

    若您需要2,那个么添加第二个表是合理的,但仍然可以通过将“长字符串”字段转换为带有属性的XML列来避免,在该列中,您可以将所需的项与一些附加注释和/或信息配对

    如果您需要1,则需要两个以上的表格解决方案,以便可以在愿望列表上的项目和与此特定项目相关的任何项目之间建立关系,可以是来自亲密朋友或亲戚的满足愿望的礼物,也可以是存储在另一个表格中的类似物品目录的东西

    如果您确实使用多表方法,那么您需要小心,以便列出单个愿望项目的表中没有定义列表本身的匹配标题项的条目。数据库通常使用外键来强制这种关系。因此,“item”表需要有一个字段,其中包含来自父表的键

    总而言之,您很可能有2到3个表。 表1-列出用户帐户 在最简单的情况下,这个表将有一个字段“我的愿望列表”,带有长字符串和/或XML列。 表2-使用键枚举用户愿望列表,并注明相关用户帐户。 表3-枚举愿望项目,使用来自用户帐户(如果用户只能有一个愿望列表)或表2(如果每个用户可以有多个不同的愿望列表)的键

    最后,理论上,用户可以拥有共享的愿望列表。例如,凯特和西蒙计划在2025年结婚。他们希望在瓦松岛的一间小屋里举行婚礼(队伍很长,我上次检查的地方是提前4年预订的)。在这种情况下,可能出现第四个表。此表将“用户”和“愿望列表”进行比较,以实现愿望列表的联合所有权

    希望这有帮助


    --干杯

    我很想帮你,但我对你在这里想要表达的东西只有一个模糊的概念。请澄清@汤姆,我刚刚编辑过,希望这更清楚