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

Database design 什么';存储此数据结构的最佳方式是什么?,database-design,data-structures,wiki,Database Design,Data Structures,Wiki,我正在创建一种wiki站点,它的数据结构由父实体组成,父实体与子实体有一对多的关系。我目前将其存储在数据库中的两个表中,具有从子实体表到父实体表的外键关系 我需要在数据库中为wiki功能设置此数据结构的版本。如果只有一张桌子的话,这将是直截了当的,但由于是两张桌子,这就有点棘手了。我正在考虑删除子实体表,并将它们作为XML数据存储在父实体表的字段中。我不需要按这些子实体进行搜索。这是个好主意还是个坏主意?有没有更好的方法来存储我的数据 我想把孩子带走 实体表并将其存储为XML 父实体字段中的数据

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

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

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

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

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

  • 一个存储中的当前版本,另一个存储中的历史版本
  • 单个存储中的所有版本
这些方法之间的选择取决于您希望对历史版本执行的操作。它们只是为了回滚吗?或者用户是否会定期浏览更改

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

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

如果需要记录应用于给定父版本的子版本,则可以引入额外的框架表(父版本、父版本、子版本、子版本)。当您只有一个父级和一个子级的表时,维护此表并不太繁重。当你有多个孩子需要跟踪时,情况变得更糟了

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

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

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

  • 一个存储中的当前版本,另一个存储中的历史版本
  • 单个存储中的所有版本
这些方法之间的选择取决于您希望对历史版本执行的操作。它们只是为了回滚吗?或者用户是否会定期浏览更改

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

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


如果需要记录应用于给定父版本的子版本,则可以引入额外的框架表(父版本、父版本、子版本、子版本)。当您只有一个父级和一个子级的表时,维护此表并不太繁重。当你有多个孩子需要跟踪时,情况变得更糟了

听起来将来可能会限制子实体中存储的数据的可扩展性。为什么不能只使用存储更改历史记录的父历史记录表和子历史记录表呢。i、 e.在数据更新到历史记录表之前,只需复制数据的精确副本。历史记录表将包含更改发生时要保存的日期时间字段。您可以使用触发器来进行复制,听起来您可能最终会限制子实体中存储的数据的可扩展性。为什么不能只使用存储更改历史记录的父历史记录表和子历史记录表呢。i、 e.在数据更新到历史记录表之前,只需复制数据的精确副本。历史记录表将包含更改发生时要保存的日期时间字段。您可以使用触发器进行复制