php - 在数据库设计中,无论如何也该设计一个自增ID字段作为主键吗?

查看:116
本文介绍了php - 在数据库设计中,无论如何也该设计一个自增ID字段作为主键吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

本人菜鸟,有个问题困惑了我挺久,今天决定提出来问问大家正确或常用的做法

举个简单的例子

文章表: id,标题,内容,……
标签表: id,标题

以上两张表显然都是需要自增ID作为主键以确保唯一性的

接下来要设计一个关联表,把文章和标签之间关联起来

文章标签关联表: id,文章id,标签id

可以看出实际上我只需要后面两个字段就能够实现功能了。这是否意味着我完全可以放弃自增的id字段呢?甚至是可以放弃使用主键,单纯加索引就行了呢?

如果自增ID主键不是必须的,请问我该如何判断是否需要它?仅仅通过业务需求来判断吗?

恳请各位不吝赐教,谢谢

解决方案

首先说一下主键和索引概念上的不同,主键只是个声明,通过哪些字段能标识出表的唯一纪录,只不过是通过唯一索引实现的。

关系型数据库中绝大部分的表,建议有唯一的主键(包括你说的自增ID或UUID方式),属于逻辑主键的范围,主要是为了程序后续开发方便,尤其是在Web应用上,这个Id可以很方便的在超链接中作为参数传递,如:editPost.do?id=123

在你说的文章标签关联表的例子中,一般会在文章展示和编辑页面中,显示关联的标签,就像segmentfault在提问的页面会显示所属的标签一样,如果没有这个id,编辑时删除一个标签,假设是通过一个Ajax请求实现的,可以按照这样的url:deleteTagOfPost.do?id=123,如果没有的话就会麻烦很多,需要把能够确定这一行记录的多个字段值都放到参数中,如:deleteTagOfPost.do?postId=123&tagId=456,显然有逻辑主键会更方便一些。

另外,用多个字段的组合作为主键来确定唯一的记录行,属于物理主键的范畴,是和业务的规则强相关的,在开发的方便性、扩展性上不如逻辑主键。

这篇关于php - 在数据库设计中,无论如何也该设计一个自增ID字段作为主键吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆