Php 是否存在我们没有主键的情况?

Php 是否存在我们没有主键的情况?,php,mysql,login,Php,Mysql,Login,我最近读了一篇关于创建安全的php登录系统的文章,这篇文章将一步一步地指导我,现在我遇到了一个问题,为什么在这篇文章的login_尝试表中没有主键。 我谈到的那篇文章: 请转到步骤4 创建一个表来存储登录尝试 那么问题就真的很清楚了,就像标题一样。是否存在没有主键的情况?是的,但您至少需要在列用户ID上添加一个非唯一索引,以提高查询表时的性能 ALTER TABLE login_attempts ADD INDEX idx_userID (User_ID) 是的,但是您至少需要在列User_

我最近读了一篇关于创建安全的php登录系统的文章,这篇文章将一步一步地指导我,现在我遇到了一个问题,为什么在这篇文章的login_尝试表中没有主键。 我谈到的那篇文章:

请转到步骤4

创建一个表来存储登录尝试


那么问题就真的很清楚了,就像标题一样。是否存在没有主键的情况?

是的,但您至少需要在列用户ID上添加一个非唯一索引,以提高查询表时的性能

ALTER TABLE login_attempts ADD INDEX idx_userID (User_ID)

是的,但是您至少需要在列User_ID上添加一个非唯一索引,以提高查询表时的性能

ALTER TABLE login_attempts ADD INDEX idx_userID (User_ID)

主键的要点是提供一些值,在这些值中,您可以根据性能的唯一值对数据进行索引。在这种情况下,可能两列都不是唯一的。假设您的登录是多线程的,那么很多用户都有相同的登录时间,这是一个很小的机会,在上面放置一个主键显然会拒绝某人或导致错误。如果将主键放在用户id上,则将拒绝同一用户多次尝试

在其他情况下,例如为外键在其他两个表之间创建多对多关系,您可以执行类似的操作


免责声明我相信有人可以提供更有力的解释,但这是我的理解。

主键的要点是提供一些值,您可以在这些值中为性能的唯一值编制数据索引。在这种情况下,可能两列都不是唯一的。假设您的登录是多线程的,那么很多用户都有相同的登录时间,这是一个很小的机会,在上面放置一个主键显然会拒绝某人或导致错误。如果将主键放在用户id上,则将拒绝同一用户多次尝试

在其他情况下,例如为外键在其他两个表之间创建多对多关系,您可以执行类似的操作


免责声明我相信有人可以提供更有力的解释,但这是我的理解。

默认情况下不需要主键-这取决于表中的每一行是否必须可识别,例如,当它在其他表中用作外键时


在这种特定情况下,我想说用户id已经足够了,但它应该按照您最希望使用该列的方式进行索引。

默认情况下,主键不是必需的-这取决于表中的每一行是否必须是可识别的,例如,当它在其他表中用作外键时


在这种情况下,我想说用户id已经足够了,但它应该按照您最可能希望使用该列选择的方式进行索引。

很少有不需要主键的情况。想象一下,如果要删除特定行,如何删除正确的行?同时尝试两次登录将插入两个相同的行。

很少有不需要主键的情况。想象一下,如果要删除特定行,如何删除正确的行?同时尝试两次登录将插入两个相同的行。

主键是一种数据库管理工具,它已成为在数据库注册表中保持一致信息的支柱。。但是,只要有一个清晰、安全的机制来保持数据库表中所需的信息一致性,就可以不使用它们。在DB级别,您可以处理主键。但在逻辑层面上,您必须有一种机制来帮助您区分不同的注册中心,这本身就是主键是什么的实用概念。。。因此,基本上:如果您需要一致的信息,您永远无法在逻辑级别处理PK

在我目前的工作中,我成为了一个GPS跟踪系统的dba,我发现所有的信息都在MySQL中分类。我得到了这个项目的“原样”,几乎没有文档,也没有起点,但有很多任务要完成。我的第一个想法是扫描数据库模式。我发现所有的桌子都缺少PKs。。。他们甚至都没有接近尾随。这是一个没有PKs或FKs的关系数据库,但它是可操作的,为数千台GPS设备提供服务

当然,该db模式极易出现故障,但公司以一种非常原始的方式保持了信息的轻度一致性

所以。。。我选择重做DB模式,并将所有信息迁移到一个新的、基于自动增量PKs、约束和完整性触发器的规范化模式,开发一个MVC应用程序来处理所有DB数据,我遇到了一个相当大的挑战:我有史以来的第一个专业项目

作为我个人经验的总结。主键是关于ke的标准指南
信息的一致性、真实性和组织性。您可以随时处理它们,但使用它们将为您节省大量设计和实现上完全不必要的工作。

主键是数据库管理工具,它已成为保持数据库注册表中信息一致性的支柱。。但是,只要有一个清晰、安全的机制来保持数据库表中所需的信息一致性,就可以不使用它们。在DB级别,您可以处理主键。但在逻辑层面上,您必须有一种机制来帮助您区分不同的注册中心,这本身就是主键是什么的实用概念。。。因此,基本上:如果您需要一致的信息,您永远无法在逻辑级别处理PK

在我目前的工作中,我成为了一个GPS跟踪系统的dba,我发现所有的信息都在MySQL中分类。我得到了这个项目的“原样”,几乎没有文档,也没有起点,但有很多任务要完成。我的第一个想法是扫描数据库模式。我发现所有的桌子都缺少PKs。。。他们甚至都没有接近尾随。这是一个没有PKs或FKs的关系数据库,但它是可操作的,为数千台GPS设备提供服务

当然,该db模式极易出现故障,但公司以一种非常原始的方式保持了信息的轻度一致性

所以。。。我选择重做DB模式,并将所有信息迁移到一个新的、基于自动增量PKs、约束和完整性触发器的规范化模式,开发一个MVC应用程序来处理所有DB数据,我遇到了一个相当大的挑战:我有史以来的第一个专业项目


作为我个人经验的总结。主键是保持信息一致性、真实性和组织性的标准指南。您可以随时处理它们,但使用它们将在设计和实现方面节省大量完全不必要的工作。

但在这种情况下,没有任何理由跳过主键。但在这种情况下,没有任何理由跳过主键。