看到自然主键和代理主键,建表时带来的一些问题

学习Hibernate的时候,看见了有个叫做自然主键和代理主键的。代理主键说应该通过另外定义一列id进行标识这样做的好处是,需求更改了,我这个代理主键也不影响业务需求。但是想想数据库的三大范式,似乎好像不符合第二范式。。第二范式要求我们建表的时候表的所有字段除了主键外都要依赖于主键,不能依赖于其他的非主键的字段,而乍一看如果一个学生表中,原本使用身份证作为id那么使用代理主键新建了一列id作为主键,但是其他字段也可以依赖于身份证这一字段。。感觉好像有矛盾。。希望有大牛帮忙解答一下。。

主要区别于数据库吧,有些数据库没有自增长id比如Oracle,所以需要代理或者建立序列表,如果是mysql,哪种策略貌似影响不大,,,hibernate由于查询性能问题,用得越来越少了,不要太纠结,有时间抓紧学mybatis

楼上说的不错,要学会变通,太死板,工作起来会很别扭的。