Tid*_*ddo 13 postgresql database-design metadata
在数据库中存储单个记录的元数据的最佳实践是什么?
我需要在我的数据库中存储许多表的常见元数据,例如创建时间和上次更新时间。我找到了几种不同的解决方案:
将元数据直接存储在表中。
优点:
缺点:
创建一个通用元数据表,并使用软外键将数据链接到正确的表和记录。
优点:
缺点:
为每个需要元数据的表创建单独的元数据表。
优点:
缺点:
是否有比我在这里提到的更多的选择、优点或缺点?存储这些元数据的最佳实践是什么?
您正在谈论的列占用20 个字节(如果没有填充对齐):
创建时间、更新时间和创建源
时间戳 .. 8 字节
时间戳 .. 8 字节
整数 .. 4 字节
单独表中单独行的元组标题和项目标识符将占用 23 + 1 + 4 = 28 个字节加上实际数据的 20 个字节,加上末尾的 4 个填充字节。使得每行52个字节。看:
关于存储,您没有任何好处。关于性能,每行仅增加 16 - 24 个字节,您几乎不会丢失任何东西。
列也直接属于行,因此将它们放在一起是有意义的。我习惯于将这些列(加上上次更新的单独源)添加到所有相关表中。
编写一个TRIGGER ON INSERT OR UPDATE使它们保持最新状态也更容易。
长话短说:强烈投票支持您的选项 1。
我会选择选项 3 的地方:
如果元数据经常更新,而核心行不是。然后可能需要保留一个单独的 1:1 表以降低更新成本并减少主表的膨胀 - 甚至选择选项 2。
我会选择选项 2 的地方:
如果元数据列集高度重复。您可以在主表中的元数据集上有一个 FK 列。不会像您的示例中那样为三个小列节省太多。
| 归档时间: |
|
| 查看次数: |
5780 次 |
| 最近记录: |