首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储记录元数据的最佳实践

存储记录元数据的最佳实践
EN

Database Administration用户
提问于 2013-06-12 11:07:23
回答 1查看 8.5K关注 0票数 15

在数据库中存储单个记录的元数据的最佳实践是什么?

我需要为我的数据库中的许多表存储常见的元数据,比如创建上次更新的时间和时间。我找到了几个不同的解决方案:

  1. 将元数据直接存储在表中。优点:
    • 元数据直接链接到记录。
    • 检索元数据不需要连接。

缺点:

代码语言:javascript
运行
复制
- A lot of duplicate columns are required (unless inheritance is used)
- Meta data and business data are not separated
  1. 创建通用元数据表,并使用软外键将数据链接到正确的表和记录。优点:
    • 栏不重复
    • 元数据与业务数据分离。

缺点:

代码语言:javascript
运行
复制
- No direct links between meta data and data (FK's can't be used)
- Joins require an additional condition 
  1. 为每个需要元数据的表创建单独的元数据表。优点:
    • 元数据直接链接到记录。
    • 元数据与业务数据分离。

缺点:

代码语言:javascript
运行
复制
- A lot of extra tables are required
- A lot of duplicate columns are required (unless inheritance is used)

是否有比我在这里提到的更多的选择、利弊?存储这些元数据的最佳实践是什么?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-06-13 23:24:23

您正在讨论的列占用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列(S)。不会为您的示例中的三个小列节省太多。

票数 11
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/44351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档