SQL表关系 - 试图避免周期性关系

时间:2015-09-10 15:44:07

标签: mysql database foreign-key-relationship

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

我有群组表:

+----+--------+
| 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 |
+----+----------+---------+---------------+

我遇到的问题是我想在表的每个实例上添加一个所有者标志,其中创建FK约束会阻止SQL删除 UserToGroup 群组所有者的实例(最终群组的所有者不能失去对其群组的访问权限。

从功能上讲,所有者权限完全独立于授予用户的权限(因为所有者可以访问某些管理页面,而权限访问授予不同级别的读/写),并且我希望始终保持必需的实例,停止数据库(通过FK约束)从 UserToGroup 表中删除所有者的可能性,他在那里管理所有给定组的用户。

最初我有Group.owner_id指向给定的用户,但这只会在用户被删除时创建一个FK约束。

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

我在表格中创建了一个指向 UserToGroup 实例的FK,并将其标记为所有者的实例:

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

Inversly,我创建了一个所有者表,用于管理 UserToGroup 表之间的所有者检查:

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

但在这两种情况下,它都与表创建了一个周期性关系,在这两个表中,两者都无法相互创建。

我是否可以单独管理实例的所有者和权限,还可以在我的数据库中创建两者之间的逻辑关系,以便我可以使用FK约束来避免SQL删除群组所有者的 UserToGroup 实例?

0 个答案:

没有答案