我们应该使用序列还是身份作为我们的主键?

穿刺者

我们正在创建一个包含 20 多个表的新数据库,我们的数据库支持:

  • 序列。
  • 标识列(始终作为标识/序列生成)。

所以,问题是:我们应该使用序列还是身份?哪一个更好?球队似乎在这一个进行划分的,所以我想听到的优点缺点,以帮助确定。

添加数据库详细信息:

  • 我们正在 IBM DB2 上创建新数据库,但我们需要确保它与未来迁移到 PostgreSQL 的计划兼容。
戈登·利诺夫

您的问题是关于使用序列与身份(大概是“始终作为身份生成”列)。在 Postgres 中,这些将被声明为serial. 这些将始终是单列中的某种数字。

从数据库性能来看,两者没有太大区别。一个重要的区别是某些数据库会缓存标识列,这可以加快插入速度但会导致间隙。缓存序列的规则可能不同。在高事务环境中,缓存不足可能成为性能瓶颈。跨多个表共享一个序列会使这个问题变得更糟。

从数据管理的角度来看,存在更大的差异。一个序列需要管理两个对象(表和序列)。表中内置了一个identityorserial列。

对于单个表,我只考虑在不支持内置自动增量/序列/标识列(咳咳,“Oracle”)的数据库中使用序列。否则,我将使用设计用于处理表格的机制。

我确实想指出,使用自动递增的代理键还有其他好处。如果数据库中存在这样的概念,这也应该是用于聚类数据的键。新插入的内容总是在“结尾”(尽管如果您要删除数据,则页面可能只被部分使用)。主键也应该是用于外键引用的唯一键,即使其他列(单独或一起)是唯一的候选主键。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们应该使用元组还是列表作为index_together

我们应该使用HashSet吗?

我们应该将会话特权存储在python中还是作为会话变量存储?

我们如何确定我们使用的是Web API 1还是Web API 2?

为什么我们需要主键?

如果我们在程序中使用延迟,我们应该使用cron吗?

我们应该如何使用微服务构建我们的模型?

我们可以使用主键的约束名称作为外键引用吗?

我们应该在子进程中使用退出还是返回

我们应该使用lambda还是匿名类来观察LiveData

我们应该使用Azure Service Bus Queue内置的CorrelationId属性还是UserProperties?

我们应该在Android中使用getPath还是getAbsolutePath

Hyperledger Fabric:我们应该使用 Fabric 还是 Docker 提供的 TLS?

我们应该使用clone还是BeanUtils.copyProperties以及为什么

在查看软件要求时,我们应该使用突发速度还是正常时钟速度

我们应该在数据框上使用groupBy还是reduceBy

查询MongoDB时,我们应该使用Query还是Query <T>?

Objective-C-我们应该对类类型使用强,弱还是赋值?

我们应该在TFS 2015上使用Git还是TFVC

我们应该使用Option还是ptr :: null来表示Rust中的空指针?

我们应该如何使用pad_sequences在keras中填充文本序列?

我们应该利用“我”的时候,我们在类名称中使用“iOS版”作为一个词吗?

我们在Swift Realm中使用RLMObject还是Object?

我们应该记住关闭吗?

为什么我们使用序列化程序而不是完全干净来验证模型,或者我们应该互换使用它们?

我们什么时候应该使用@Component在春天?

为什么我们应该使用的的Mockito wiremock

我们应该如何使用异步等待?

我们什么时候应该使用 SNOWPIPE?