首页 > 数据库每个表都应该有一个主键吗?

数据库每个表都应该有一个主键吗?

大家都说数据库在建表的时候,每个表都该有一个主键和唯一索引,老师也一直强调。希望有人能耐心解释一下为什么必须要这么做。


类似一对多那种关联映射用的表可以不用。


ORM的时候也会需要有主键,而现在开发都是三层分开的,基本都是需要做ORM的


不一定。这个是根据需求而定的。


针对MySQL的InnoDb引擎而言:建表一定要有一个自增主键(你不指定系统也会默认创建一个隐藏主键的),用来创建b树结构的索引,可以加快查找速度,同时可以保证写入时候树数的操作效率。如果写入的数据不用怎么查找,那还不如直接存成单独的文件,何必要用数据库呢?

因为互联网常用的就是MySQL的InnoDb,所以主要说这个。其他的数据库和引擎不太清楚,可能和我说的不太一样,抱歉之前没明白背景条件~


有主键和唯一索引是为了给记录一个唯一的标识与检索优化,可以很快速找到某个记录,对于整个系统的效效优化是很有利的。

程序有很多设计上虽然程序允许你很自由,前辈们仍会要求你必须这样做或那样做,这是规范化的常规方案,是为了提升代码质量与效率及代码的可维护化,所以应该按照规范进行。


说具体情况具体分析是一句废话,你要明白索引是用来提高查找效率的,代价是降低插入效率。
所以如果有一张表,数据量很大,而且有频繁的插入操作,但查找操作较少,这种表你就可以考虑不添加索引,这样可以保证插入的效率,但代价是查找操作可能会变得非常慢。

主键除了具有索引的功能之外还具有保证唯一性的功能,你不能在一张表里添加有重复主键的多条记录,这是对数据完整性/一致性的一种保证,如果你需要这个功能,那么就需要主键,否则可以考虑不要。


数据库有一个基础概念叫做范式,normalization。是设计数据库的通用规范。从第二范式起,就要求数据表里的所有数据都要和该表的主键有完全依赖关系。换言之,符合第二范式(及以上)的数据库表里面都是要有主键的,主键可以是一个字段也可以是多个字段。至于索引,就是效率上的需要了,所有的关于数据库优化的书或者文章中,第一条一定是合理地建立的索引,作为表中其他数据依赖的根本,主键索引当然是至关重要的。PS,上面所说的内容仅仅针对关系数据库。


不一定啊, 比如用户登录记录表。可能数据量比较大,只会给时间字段建个索引。
之所以需要主键和唯一索引是为了确保类似用户表里的userid不会重复。同时加了索引查询速度才快。主键和唯一索引的主要区别是:一个表只能有一个主键,而唯一索引可以根据字段情况建多个
是否需要主键还是根据实际情况来决定,但大部分表都需要个主键。日志类的表可能不太需要

【热门文章】
【热门文章】