![]() |
1
1
每次更改父级时,都会创建子级的副本:如果父级数据更改过多,则会很快耗尽存储空间。此外,将所有子记录更改存储在单个父记录中会导致父记录膨胀(因为有很多子记录往往会膨胀),这可能会影响数据检索的性能。 存储版本化数据有许多不同的方法,但它们分为两类:
在这些方法之间进行选择取决于您希望如何处理历史版本。它们只是为了回滚吗?还是用户会定期浏览更改? 另一个复杂的问题并不总是适用的,但我认为在这里可能是相关的(因为您建议的解决方案),是父母和孩子之间的关系变化:当您显示父母的历史版本时,您需要显示孩子的适当版本吗?反之亦然,如果显示的是旧版本的子级,是否需要显示其父级(和同级)的适当版本? 您需要确定的关键是:大多数用户大部分时间都要做什么?优先考虑。如果最常见的用例是 只查看所有记录的当前版本 然后,您应该使用单独的表来存储版本。 如果您需要记录应用于给定父版本的子版本,那么可以引入一个附加的框架表(父\u id、父\u version、子\u id、子\u version)。当只有一个父级和一个子级的表时,维护此表并不太麻烦。当你有多个孩子的时候,你需要跟踪,这会让你很不舒服。 |
![]() |
developer · 带外键的SQL表设计 9 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 10 月前 |
![]() |
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 1 年前 |
![]() |
robertspierre · 在多对多关系中自动删除未引用的行 1 年前 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |