靠,怎么能取这个拗口的题目。
啥子意思?什么是主键?
我觉得主键数据中不能被修改和删除的区别其他记录的数据。
什么又是非主键的主键呢?
很多时候在企业开发中,真正在数据库定义的主键其实并不是主键,通产是XXId定义为主键,但其他列中可能是主键。
比如:BOM系统中,物料编码应该为唯一,可惜很多bom系统里面是定义它是唯一索引,却不一定是主键。如果在数据层没有定义为主键,这个数据理论和事实上就会被修改。
在企业其他的引用此BOM的物料编码的时候,一旦BOM系统的物料编码被修改,结果造成下游的数据出现断层,一些数据无法关联对应。
呵呵,这就是我讲的“非主键”的主键。
以下说的到的主键就代表的是“非主键”的主键。
当主键被修改或删除的时候会带来上游数据链和下游数据链的脱节,造成业务上面处理错误。
比如:象刚才的问题就会造成计算BOM成本的时候少算一些BOM清单。
而且这种隐含的错误,会在意想不到的时候造成大家对系统的不信任感。
所以,我们要注意这种隐含主键在整个企业中的影响。
说了危害,我说说我处理这种主键的方法。
当然,最简单的方法莫过于直接在数据层定义为主键,不过,不是任何系统都是我开发,理想虽好,但不一定能做到了。
我的方法是 - 建立异常报告,建立自动恢复功能。
实现技术很多,但大概方向应该是这样的。
把主键的变化记录下来,其他的系统通过定时扫描的方式(或者通过远程调用挂接接口的方式)把自身用的数据根据主键变化记录表进行纠正。