网上搜索,很多都是说逻辑主键各种好的。但我在使用过程种确很糟心。
遇到的问题:
- entity 重复插入的问题。如果使用业务主键,通过主键就能识别是同一个entity,而使用逻辑主键确没办法识别,在更新的时候变得艰难。如果没有逻辑主键的辅助在insert的时候存在插入属性相同但主键不同的entity的可能性。
- 很多业务都是基于业务主键,而作为外键的确实逻辑主键。这直接导致了业务主键在其他模型根本就没办法使用,必须每次都要通多业务主键去查询到逻辑主键,在通过逻辑主键作为外键去查询。如果是跨项目,那就更难受了,可能绕好几次。
这些问题并非没有解决办法,但有时候确实感觉到没有必要。至于推荐逻辑主键中最强有利的理由,业务主键会遭遇变化,我是真的一次也没遇到过。
我在很多个问题下的都会回答一句话:
这是 IBM 大型机之父布鲁克斯的一句名言。这个人名你可能比较陌生,但他写过一本书你应该听过(没读过的我建议读读,很薄,但非常经典),叫《人月神话》。
所以这个问题并不存在完美解,你的感觉是对的,某些场景下业务主键就确实更简单、也更好用。