gpt4 book ai didi

sql - 当存在其他唯一字段时,为什么要使用自动递增的主键?

转载 作者:太空狗 更新时间:2023-10-30 01:37:56 25 4
gpt4 key购买 nike

我正在学习一门名为“数据库系统”的类(class),为了我们的类(class)项目,我必须设计一个网站。

这是我创建的表格的示例:

CREATE TABLE users
(
uid INT NOT NULL AUTO_INCREMENT,
username VARCHAR(60),
passhash VARCHAR(255),
email VARCHAR(60),
rdate DATE,
PRIMARY KEY(uid)
);

教授告诉我“uid”(用户 ID)完全没有用且不必要,我应该使用用户名作为主键,因为没有两个用户可以拥有相同的用户名。

我告诉他使用用户 ID 对我来说很方便,因为当我调用类似 example.com/viewuser?id=5 的东西时,我只需检查参数:is_numeric($ _GET['id'])...不用说他不相信。

由于我在大量教程中看到了 user_id 和其他类似属性(thread_id、comment_id 等),并查看了流行软件(例如 vbulletin)的数据库模式,所以一定有很多其他(更强大的)原因。

所以我的问题是:与使用其他属性(如用户名)相比,您如何证明需要一个非空的自动递增 ID 作为主键?

最佳答案

自动递增主键很有用,原因如下:

  • 他们允许在 Stack Overflow 上使用重复的用户名
  • 他们允许(轻松地)更改用户名(或电子邮件地址,如果用于登录)
  • 选择、连接和插入比 varchar 主键更快,因为它维护数字索引要快得多
  • 正如您提到的,验证变得非常简单:if ((int)$id > 0) { ... }
  • 输入的卫生是微不足道的:$id = (int)$_GET['id']
  • 由于外键不必复制可能很大的字符串值,因此开销要少得多

我想说,当自动递增的数字键如此容易获得时,尝试使用任何一段字符串信息作为记录的唯一标识符是一个坏主意。

具有唯一用户名的系统对于极少数用户来说很好,但互联网已经使它们从根本上崩溃了。当您考虑到可能必须与网站交互的名为“john”的人数众多时,要求他们每个人都使用唯一的显示名称是荒谬的。它导致了我们经常看到的可怕的系统,它使用随机数字和字母装饰用户名。

但是,即使在您强制使用唯一用户名的系统中,主键仍然不是一个糟糕的选择。想象一个拥有 500 篇帖子的用户:posts 表中的外键将包含用户名,重复 500 次。即使在您认为某人最终可能需要更改其用户名之前,开销也是惊人的。

关于sql - 当存在其他唯一字段时,为什么要使用自动递增的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com