mysql - 创建MySQL表问题,为什么有些人创建两个相互关联的表而不是一个?

标签 mysql database

我对在 MySQL 中创建表感到非常困惑,因为我阅读了一些 PHP 教程,并且作者在他们的数据库中创建了两个表,然后稍后在 PHP 中使用联接将它们链接起来。

这是我从一篇文章中得到的示例..

作者在这里创建了表用户和组。

    CREATE TABLE users (
       id int(8) NOT NULL auto_increment,
       name varchar(255) NOT NULL default '',
       pass varchar(255) NOT NULL default '',
       PRIMARY KEY (id)
    ) TYPE=InnoDB;

   CREATE TABLE groups (
       uid int(8) NOT NULL default '0',
       grp varchar(255) NOT NULL default ''
   ) TYPE=InnoDB;

我一看,groups表不是没有必要的吗?我的意思是我可以这样创建表格:

CREATE TABLE users (
       id int(8) NOT NULL auto_increment,
       name varchar(255) NOT NULL default '',
       pass varchar(255) NOT NULL default '',
       grp varchar(255) NOT NULL default ''
       PRIMARY KEY (id)
    ) TYPE=InnoDB;

这样,我只需查询数据库即可,根本不需要将两个表连接在一起。

那么创建两张表而不是一张表的目的是什么呢?请向我解释为什么将两个表链接在一起比一个表更好。

最佳答案

我有很多身份验证系统,1 个用户可以有多个组。因此2个表是必要的。如果您想了解如何设计表格,可以阅读 database normalization .

如果您为组创建一个表、为用户创建一个表以及为组中的用户创建一个表,那就更好了。这是因为一个组中有多个用户是很常见的,并且用户可以有多个组(多对多关系)。关系数据库中的多对多关系是不可能的。因此你需要额外的 table 。
该系统的另一个优点是,如果您决定更改组名称,则无需为每个用户更改该名称。您只需更改一次名称,所有用户都会更改。

你会得到这样的东西。

- table user
  - id
  - username
  - password
  - etc

- table groups
  - id
  - name
  - etc

- table usergroups
  - userid
  - groupid

您还可以看看 FCO-IM,与 ERM 相比,这是一种更复杂的数据库设计方法,但对于更大、更复杂的数据库可能会很方便。

关于mysql - 创建MySQL表问题,为什么有些人创建两个相互关联的表而不是一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4593909/

相关文章:

c# - 如何在 DataGrid 中显示大量行

mysql - 两个没有子查询的简单 COUNT 列

mysql - 通过状态获取最后的预订 (mysql)

c# - 如何使用 Entity Framework 设置连接字符串

sql - 您可以在 select 命令中创建一个 case 语句来评估两个不同的表字段吗?

c# - LINQ 中类似 Scala 集合的 SQL 支持

mysql - 使多子选择更有效率?

javascript - JS 对象到 PHP,然后通过 PDO INSERT

php - 查找用户的哪些推文被收藏

sql-server - 大型数据集是否需要存储过程?