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

时间:2010-02-19 10:03:35

标签: database-design data-structures wiki

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

我需要在我的数据库中为维基功能版本化这个数据结构。如果它只是一张桌子,这将是直截了当的,但由于它是两个,这有点棘手。我正在考虑删除子实体表并将它们作为XML数据存储在父实体表的字段中。我不需要搜索这些子实体。这是一个好主意还是坏主意?有没有更好的方法来存储我的数据?

1 个答案:

答案 0 :(得分:1)

  

我在考虑去除孩子   实体表并将它们存储为XML   父实体字段中的数据   表

每次更改父级时,您都会创建子级的副本:如果父级数据发生了很大变化,那么您将很快耗尽您的存储空间。此外,将所有子更改存储在单个父记录中会使父进程膨胀(因为有很多子进程),这可能会影响数据检索的性能。

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

  • 一个商店中的当前版本,另一个商店中的历史版本
  • 单个商店中的所有版本

在这些方法之间进行选择取决于您对历史版本的处理方式。它们只是用于回滚吗?或者用户会定期浏览更改吗?

另一个并不总是适用但我认为可能与此相关的并发症(由于您的建议解决方案)是父母与子女之间的关系:当您显示父母的历史版本时,您需要显示孩子的适当版本?反之亦然,如果您展示一个旧版本的孩子,您是否需要显示其父(和兄弟姐妹)的适当版本?

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

如果需要记录应用于给定父版本的子版本,则可以引入其他框架表(parent_id,parent_version,child_id,child_version)。当您只有一个父项和一个子项的表时,维护此表并不会太繁琐。如果你有多个孩子,你需要跟踪的地方。