代码之家  ›  专栏  ›  技术社区  ›  Charlie Gevious

存储这种数据结构的最佳方法是什么?

  •  1
  • Charlie Gevious  · 技术社区  · 14 年前

    我正在创建一种wiki网站,它有一个由父实体组成的数据结构,父实体与子实体具有一对多关系。我目前将它存储在数据库中的两个表中,具有从子实体表到父实体表的外键关系。

    我需要在我的数据库中为wiki功能修改这个数据结构。如果只是一张桌子的话,这会是一条直线,但既然是两张桌子,就更难了。我正在考虑删除子实体表,并将它们作为XML数据存储在父实体表的字段中。我不需要通过这些子实体进行搜索。这是个好主意还是坏主意?有没有更好的方法来存储我的数据?

    1 回复  |  直到 14 年前
        1
  •  1
  •   APC    14 年前

    我想把孩子搬走 实体表并将其存储为XML 父实体字段中的数据 桌子

    每次更改父级时,都会创建子级的副本:如果父级数据更改过多,则会很快耗尽存储空间。此外,将所有子记录更改存储在单个父记录中会导致父记录膨胀(因为有很多子记录往往会膨胀),这可能会影响数据检索的性能。

    存储版本化数据有许多不同的方法,但它们分为两类:

    • 一个存储中的当前版本,另一个存储中的历史版本
    • 单个存储区中的所有版本

    在这些方法之间进行选择取决于您希望如何处理历史版本。它们只是为了回滚吗?还是用户会定期浏览更改?

    另一个复杂的问题并不总是适用的,但我认为在这里可能是相关的(因为您建议的解决方案),是父母和孩子之间的关系变化:当您显示父母的历史版本时,您需要显示孩子的适当版本吗?反之亦然,如果显示的是旧版本的子级,是否需要显示其父级(和同级)的适当版本?

    您需要确定的关键是:大多数用户大部分时间都要做什么?优先考虑。如果最常见的用例是 只查看所有记录的当前版本 然后,您应该使用单独的表来存储版本。

    如果您需要记录应用于给定父版本的子版本,那么可以引入一个附加的框架表(父\u id、父\u version、子\u id、子\u version)。当只有一个父级和一个子级的表时,维护此表并不太麻烦。当你有多个孩子的时候,你需要跟踪,这会让你很不舒服。