由于多系统整合,需要将当前系统的数据库表格修改为视图的形式映射其他系统的表格。在做这项工作时需要导入数据和修改数据在这个过程中我发现了一个大坑,其他系统表格居然都没有主键。
(postgresql 使用pgadmin不能修改无主键的表数据,navicat 在批量复制数据时,也会因为表格没有主键导致多行数据覆盖,和复制失败等情况,当前使用insert语句是没有问题的 )
实在是想不明白当时哪位大神设计的这个数据库,也想不明白表格为什么不设置主键,而且基本上所有表都不添加主键。
注 : 若有大神知道数据库表为什么不设置主键,万请告知,万分感谢。
这里说一下主键的作用,来阐述数据库设计中表中需不需要主键(谨代表个人观点 )
1)主键约束 包含 唯一约束和非空约束。主键能唯一表示了二维表中的唯一一行数据。
2)一般数据库会使用主键来组织表行数据,其他索引只是存储了这个主键的索引位置,所以查询的时候如果用到主键查询排序应该更快。
3)只是postgresql没有主键是存在一些很坑的错误,上面已经说了一下我遇见的问题。
4)主键能在一定程度上保证数据不重复,唯一性。
5)主键是作为删除,更新最好的标示。
6)在某些数据库表中要求必须需要主键,例如:mysql的innodb数据库引擎 中必须有主键,不设置主键它会默认 设置主键
7)数据库主键可以优化。(减少数据冗余)