oracle – 征求意见:所有表的一个序列

oracle – 征求意见:所有表的一个序列,第1张

概述这是我最近一直在想的另一个. 我们在早些时候的讨论中得出结论:“自然主键是坏的,人造主键是好的”. 早期使用Hibernate,我已经看到Hibernate默认为所有表创建了一个序列.起初我很困惑,为什么要这样做.但后来我看到了这样的优点,它使得父母和孩子的联系成为愚弄.因为没有表具有相同的主键值,所以意外地将父级别与不是子级的表相链接将不会产生任何结果. 有没有人看到这种方法有任何缺点.我只看到 这是我最近一直在想的另一个.
我们在早些时候的讨论中得出结论:“自然主键是坏的,人造主键是好的”.
早期使用Hibernate,我已经看到Hibernate默认为所有表创建了一个序列.起初我很困惑,为什么要这样做.但后来我看到了这样的优点,它使得父母和孩子的联系成为愚弄.因为没有表具有相同的主键值,所以意外地将父级别与不是子级的表相链接将不会产生任何结果.

有没有人看到这种方法有任何缺点.我只看到一个:您的数据库中不能有9999999999999999999999999条记录.

根据序列在数据库中的实现情况,总是碰到相同的序列可能更好或更差.当只有几个或只有一个线程请求新值时,将不会出现锁定问题.但执行不良可能会导致拥堵.

另一个问题是回滚事务:序列不会被回滚(因为有人可能已经请求了更高的值),所以你可以有很大的差距,这将比您预期的要快得多. OTOH,需要一些时间才能吃2到4亿个ID(如果你只“使用32位(签名)”),那么在实践中很少出现问题.

最后,如果你需要,你不能轻易地重置序列.但是,如果您需要重新启动序列(例如,自午夜以来的记录数),您可以告诉Hibernate创建/使用第二个序列.

一个主要优点是您可以通过ID唯一识别数据库中的任何位置的对象.这意味着您可以严格地减少您在生产系统中写入的日志信息,如果您只有ID,仍然会找到一些内容.

总结

以上是内存溢出为你收集整理的oracle – 征求意见:所有表的一个序列全部内容,希望文章能够帮你解决oracle – 征求意见:所有表的一个序列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存