【问题标题】:How to structure phpmyadmin sql database to allow many to many relationship?如何构建 phpmyadmin sql 数据库以允许多对多关系?
【发布时间】:2017-01-17 17:20:35
【问题描述】:

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

我正在制作一个员工时间表 Web 应用程序。我目前有一个员工表、项目表和时间表表。我正在尝试考虑构建员工/项目连接表的最佳方式,以存储每个员工希望在他们的时间表中显示的项目。

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

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

任何帮助都会很棒!

【问题讨论】:

    标签: php mysql database phpmyadmin


    【解决方案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_id 链接到 group 表中的 ID,同样地链接到 user 表中的 user_id

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

    【讨论】:

    • 嗯,这听起来与我所考虑的相似。但是根据您的示例,我将如何根据需要构建插入和更新的查询? IE。如果用户当前不在组中,则插入 group_access = 1 的新记录,但如果用户离开组,只需将 group_access 更新为 0?
    • 糟糕,抱歉,我刚刚看到您评论的最后一部分。我会试试这个!另外,group_access 列到底是用来做什么的?我考虑将它放在 group_users 表中作为存储关系的一种方式,并且只是停用它们而不是每次都删除/重新插入?
    • 在我的示例中,组访问权限仅适用于具有 ACL 的权限,但您可以创建应用程序所需的任何列。
    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 2010-12-17
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多