我们正在创建一个包含 20 多个表的新数据库,我们的数据库支持:
所以,问题是:我们应该使用序列还是身份?哪一个更好?球队似乎在这一个进行划分的,所以我想听到的优点和缺点,以帮助确定。
添加数据库详细信息:
您的问题是关于使用序列与身份(大概是“始终作为身份生成”列)。在 Postgres 中,这些将被声明为serial
. 这些将始终是单列中的某种数字。
从数据库性能来看,两者没有太大区别。一个重要的区别是某些数据库会缓存标识列,这可以加快插入速度但会导致间隙。缓存序列的规则可能不同。在高事务环境中,缓存不足可能成为性能瓶颈。跨多个表共享一个序列会使这个问题变得更糟。
从数据管理的角度来看,存在更大的差异。一个序列需要管理两个对象(表和序列)。表中内置了一个identity
orserial
列。
对于单个表,我只考虑在不支持内置自动增量/序列/标识列(咳咳,“Oracle”)的数据库中使用序列。否则,我将使用设计用于处理表格的机制。
我确实想指出,使用自动递增的代理键还有其他好处。如果数据库中存在这样的概念,这也应该是用于聚类数据的键。新插入的内容总是在“结尾”(尽管如果您要删除数据,则页面可能只被部分使用)。主键也应该是用于外键引用的唯一键,即使其他列(单独或一起)是唯一的候选主键。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句