sql - 数据库表中有主键真的有必要吗?

标签 sql database

我知道这个问题已经被问过很多次了,但是请在这个例子中解释一下。

所以...我有 2 个表:用户和组

Users(ID, Name...)
Groups(ID, UserID[FK], GroupName)

每个用户在Groups表中可以有多个记录(组)。

好的,那么为什么我真的需要 Groups 表中的 ID 字段? 我做的每个 SQL 都是这样的:

SELECT * FROM Groups WHERE UserID = ...

此外,用户不能有重复的组,因此表中永远不会有 2 行。

那么,ID字段是干什么用的呢?

最佳答案

您不需要使用单个整数列作为主键 - 您可以将主键定义为 UserIDGroupName

为什么要使用主键?

  1. 根据您的 DBMS,表中的记录将按主键组织,从而使按该键的查找速度尽可能快。定义主键非常容易。对于所涉及的微小投资,您将获得性能和可扩展性的巨大提升。

  2. 几乎所有的 DBMS 都强制主键的唯一性。你说一个用户不能有同一个组两次。将主键定义为 UserIDGroupName,您可以在数据库级别(无需任何其他代码)保证该假设始终为真。

关于sql - 数据库表中有主键真的有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22109557/

相关文章:

python - 在 python 中使用 """.. ."""而不是 "..."或 '...' 有什么用,尤其是在 MySQLdb cursor.execute 中

database - 数据库设计 : one or two tables to remember a user choice

mysql - 添加第四个表连接时结果减少

php - 如何从具有特定条件的表中查找列名?

mysql - 在另一个 SQL 语句中使用 SQL 语句的输出?

sql - 在不到 1 小时前创建通知的同一端点上查找没有通知和先前没有响应的响应

php - 具有多个标签的 SQL 请求文件

php - 如何从 MYSQL 数据库中的最后 10 条记录中获取最小的 ID?

php - 带有命名占位符的 PDO 准备语句 IN 子句不能按预期工作

C# - 如何找到列表框项目的数据库键?