php - 如何构建 phpmyadmin sql 数据库以允许多对多关系?

标签 php mysql database phpmyadmin

我对 phpmyadmin 有点陌生,我正在尝试想出一种方法来逻辑地构建联结表以完成我手头的任务。

我正在制作一个员工时间表网络应用程序。我目前有一个员工表、项目表和时间表表。我试图想出构建员工/项目联结表的最佳方法,以存储每个员工希望在他们的时间表中显示的项目。

我创建了一个 php 表单,它创建了一个包含所有可用项目的表格,并在每个项目旁边放置了一个复选框,以便员工可以使用他们的用户 ID 登录,然后管理他们正在处理的项目。

我应该如何设置我的表以允许添加/删除与每个员工的项目关联的 INSERT/UPDATE 语句?我尝试使用主键 ID 和外键 employeeID 和 projectID 制作 employees_projects,但是我无法引用该关联是否已经存在(即,我在想一些事情,比如循环遍历所选复选框的 php POST 结果并查询 INSERT INTO employees_projects VALUES ($eID,$pID) 但这不会捕获重复条目。

任何帮助都会很棒!

最佳答案

您需要的是数据透视表。例如,我将使用一个用户表和一个组表,其中用户可以在多个组中,每个组可以有多个用户。表结构如下所示:

用户表

+----+------+-------------+
| ID | name |    email    |
+----+------+-------------+
|  1 | Foo  | foo@baz.com |
|  2 | Bar  | bar@baz.com |
+----+------+-------------+

组表

+----+------------+--------------+
| ID | group_name | group_access |
+----+------------+--------------+
|  1 | Admins     |            1 |
|  2 | Users      |            0 |
+----+------------+--------------+

Group_Users 表

+----------+---------+
| group_id | user_id |
+----------+---------+
|        1 |       1 |
|        2 |       1 |
|        2 |       2 |
+----------+---------+

然后您在 Group_Users 表中设置外键以链接 group_idIDgroup表,同样适用于 user_iduser表。

最后,为了停止任何重复,您在 group_users 中的两列之间创建了一个唯一键。 table 。这个 SQL 可以做到这一点 - ALTER TABLE group_user ADD UNIQUE (group_id, user_id);

关于php - 如何构建 phpmyadmin sql 数据库以允许多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41703265/

相关文章:

php - 我多久可以通过 PHP 查询 MySQL 数据库

java - JDBC插入查询不会在数据库中插入记录

php - 基于多个字段创建序列的正确方法

mysql - MySQL 可以处理多少个数据库?

php - 如何使用 linux 命令从日志文件中检索数据并添加到数组

php - 让 PHP 页面输出静态图像

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

MySQL IF/Else 语句结果作为列

php - HTML 表单/PHP : select with option value = array

php - Laravel - 防止多个请求同时创建重复记录