我正在尝试管理数据库中的表关系,但是我模拟的每个选项最终都会创建周期性关系,这似乎是一个很大的禁忌。这是我的设置:

我有组表:

+----+--------+
| id |  name  |
+----+--------+
|  1 | group1 |
|  2 | group2 |
+----+--------+


我还有一个UserToGroup表,可让用户访问(具有不同的权限级别)组,而FK指向我的组(多对一)和用户表(多对一):

+----+----------+---------+---------------+
| id | group_id | user_id | permission_id |
+----+----------+---------+---------------+
|  1 |        1 |       1 |             2 |
|  2 |        1 |       2 |             3 |
|  3 |        2 |       1 |             2 |
+----+----------+---------+---------------+


卡住的地方是我想在Group表的每个实例上添加一个owner标志,在其中创建FK约束将阻止SQL删除组所有者的UserToGroup实例(最终,组的所有者不能失去对以下对象的访问权限)它的组。

从功能上讲,所有者权限完全独立于授予用户的权限(因为所有者将有权访问某些管理页面,而权限访问则授予各种级别的读/写权限),我想始终在数据库中维护所需的UserToGroup实例对于组的所有者,请停止数据库(通过FK约束),以免从UserToGroup表中删除所有者,在该表中,他管理给定组的所有用户。

最初,我有Group.owner_id指向给定的User,但这仅在删除用户时创建FK约束。

我还尝试过为数据库创建以下变体,但是它们创建了周期性关系:

在“组”表中创建FK的位置,指向一个UserToGroup实例并将其标记为所有者的实例:

+----+--------+---------------------+
| id |  name  | owner_user_to_group |
+----+--------+---------------------+
|  1 | group1 |                   2 |
|  2 | group2 |                   3 |
+----+--------+---------------------+


相反,我在其中创建了一个所有者表,该表将管理Group和UserToGroup表之间的所有者检查:

+----+----------+------------------+
| id | group_id | user_to_group_id |
+----+----------+------------------+
|  1 |        1 |                2 |
|  2 |        2 |                3 |
+----+----------+------------------+


但是,在这两种情况下,它都与组表创建了周期性关系,在这种情况下,彼此不能创建两者。

有没有一种方法可以分别管理组实例的所有者和权限,还可以在数据库中两者之间创建逻辑关系,以便可以使用FK约束来避免SQL删除组所有者的UserToGroup实例?

最佳答案

我可能误会了,但是您在找这个吗?

如果不是,请尝试更简单地解释您的确切需求,我将再次尝试。
mysql - SQL表关系-尝试避免循环关系-LMLPHP

09-26 22:22