数据库设计,愿望清单及其项目

时间:2009-09-10 19:12:20

标签: database-design

我正在创建一个新的数据库来管理愿望清单。

解决方案A:

两张桌子,

  • wish_list和
  • wish_list_item

解决方案B:

一张桌子,

  • wish_list_with_item

    每列会有一个愿望清单项,因此该表上会有很多列。

哪个更好?

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

  • 至少,这意味着你可以拥有你想要的任意数量的项目 - 它可能更容易处理,在应用程序端(考虑“删除项目”或“添加项目” “,例如)
  • 第二种解决方案绝对不正确

答案 3 :(得分:0)

第二种解决方案只有在为了更容易缓存而被迫进行非规范化或者如果你的应用程序发展得非常庞大并且需要数据库分片时才会更好。在所有其他情况下,我更喜欢数据库的更清洁的设计。

答案 4 :(得分:0)

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

回到表的设计,这是考虑因素。如果你不打算

  1. 使用愿望清单进行愿望清单履行
  2. 添加每个" whishes"的任何细节,细节。分别
  3. 比在长字符串字段中存储列表允许单个表格。

    如果您需要2,那么添加第二个表是合理的,但仍然可以通过转动" long string"字段到带有属性的XML列,您可以在其中配置所需项目和一些其他注释和/或信息。

    如果您需要1,则需要两个表解决方案,以便可以在愿望清单上的项目与与此特定项目相关的任何内容之间建立关系,即来自亲密朋友或亲戚的礼物,满足愿望,或类似于存储在另一个表中的事物目录。

    如果您使用多表方法,则需要小心,以便列出单个愿望项的表没有匹配的标题条目定义列表本身的条目。通常,数据库使用外键来强制执行这种关系。所以,"项目" table需要有一个带有父表的键的字段。

    总结一下,你很可能会有2或3个表。 表1 - 列出用户帐户 在最简单的情况下,这个表将有一个字段"我的愿望清单"使用长字符串和/或XML列。 表2 - 使用密钥记录相关用户帐户来枚举用户愿望列表。 表3 - 使用来自任一用户帐户的密钥(如果用户只能有一个愿望清单)枚举愿望项目,或者如果每个用户可以有多个不同的愿望清单,则使用表2。

    最后,理论上,用户可以拥有共享的愿望清单。例如,凯特和西蒙计划在2025年结婚。他们希望在Vashon岛的一个小屋举行婚礼(线路很长,上次我检查这个地方是提前4年预订的)。在这种情况下,第四个表的可能性出现。这张桌子可以和#34;用户"和#34;愿望清单",以启用愿望清单的加入所有权。

    希望这有帮助。

    - 干杯!