我对在 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/