orm – 主键 – Native,Sequence或GUID键?
在阅读
this和
this然后阅读
this(其中讽刺地引用另外两个)时,我发现自己想知道这个主题的讨论有多大?我是一个SQL Server人,因此我倾向于使用以int形式自动生成的Identity.但是,当我知道我需要服务器和服务器之间的某种形式的复制或客户端和服务器之间的同步时,我倾向于使用GUID作为我的密钥.
问题:我是否应该始终在所有表中使用GUID作为我的主键,以防万一我可能需要这种可能的可扩展性?这是否使我的架构更灵活,因为它可以随时在平台之间迁移?这是否有助于我通过不嵌入平台特定功能来保持ORM的灵活性(无论风味如何)? 对策: @David Archer:根据你的评论我更新了我的帖子,不说“自然键”.你的自然键是正确的,因为自然键定义为such.感谢您的修正. 解决方法
我倾向于更喜欢应用程序生成的主键,通常使用由NHibernate实现的lo / hi算法(当我在项目中使用它时).否则,顺序GUID也可以正常工作.这不仅仅是我的建议,而是
several人
who have一直在做这个整个开发的事情比我自己长得多.
我在使用数据库生成的主键时看到的问题是,在将数据库保存到数据库之前,必须先访问数据库以获取这些标识值,而不是设置所有内容.由于这一事实,它通常会破坏NHibernate中的工作单元模式.如果你没有在你的应用程序中使用UoW模式,那么显然这个缺点不适用. 如果您正在为PK使用GUID,那么您肯定希望使用顺序GUID来消除索引碎片.这也为您提供了另一张海报所提到的“粗略排序顺序”,尽管我通常有一个DateInserted列或者类似于这些类型的东西. 加入GUID列has been shown,与4字节整数相比,性能开销相当小,我敢说,对于非大型数据集,性能差异微不足道. 自然键是魔鬼的产物. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |