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

时间:2017-01-17 17:20:36

标签: php mysql database phpmyadmin

我对phpmyadmin有些新手,我正在尝试提出一种逻辑结构连接表来完成手头任务的方法。

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

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

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

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

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

用户表

+----+------+-------------+
| 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_idID表格中的group相关联,同样user_id中的user } table。

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