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

问题描述:

我正在创建一种维基网站,并且有一个由父实体组成的数据结构,该实体与子实体具有一对多的关系。我目前将它存储在数据库中的两个表中,具有从子实体表到父实体表的外键关系。存储此数据结构的最佳方式是什么?

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

+2

听起来像您可能最终会限制将来存储在子实体中的数据的可扩展性。为什么你不能只拥有存储变更历史的parent_history和child_history表。即在将数据更新到历史记录表之前复制数据的确切副本。历史记录表将包含一个日期时间字段,以便在发生更改时进行保存。您可以使用触发器来执行副本 – Andrew 2010-02-19 10:13:10

我想在父实体的领域 表

更改父每次取出孩子 实体表,并将其保存为XML 数据,您将创建的副本孩子们:如果父母的数据变化很大,那么你很快就会吃掉你的存储空间。另外,将所有子级更改存储在单个父级记录中会导致父级膨胀(因为有很多子级倾向于),这可能会影响数据检索的性能。

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

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

这些方法之间的选择取决于您想要对历史版本进行什么操作。他们在那里只是为了回滚?或者用户是否会定期浏览更改?

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

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

如果您需要记录应用于给定父版本的子版本,那么您可以引入额外的框架表(parent_id,parent_version,child_id,child_version)。当您只有一个家长和一个孩子的表格时,维护此表格不会太繁重。粗糙的地方是当你有多个孩子需要跟踪时。