我正在尝试管理数据库中的表关系,但是我模拟的每个选项最终都会创建周期性关系,这似乎是一个很大的禁忌。这是我的设置:
我有组表:
+----+--------+
| 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实例?
最佳答案