如何在MySQL中创建用户/组关联

3
我正在使用PHP/MySQL开发Web应用程序,我已经到了需要创建用户/组关联的阶段。
这是我所追求的:
- 我将拥有越来越多的组和用户。 - 用户将能够在任何时候修改他们的组关联。 - 组关联将决定网站上显示的内容优先级。 - 发送给用户的电子邮件更新将由他们当前的组关联确定。
我的问题是,如何处理这个用户/组关联是最好的方式?
我的当前表结构简化如下:
Users:
User_ID, User_name, Fname, Lname, is_dealer

Deals:
Deal_ID, Dealer_ID, Deal_name, Deal_content

Dealers:
Dealer_ID, User_ID, Dealer_name, Dealer address.. etc.

我的初步想法是创建一个包含Group_ID和Group_name列的Groups表。然后我可以做以下两件事情之一: 1. 我可以在Groups表中创建一个名为“User_ID”的列,并且对于每个组合关系,我都有一行记录它的Group_ID、Group_name和User_ID。但是,这种方式会创建一个非常冗余的数据库表。 2. 我能想到的另一个选择是在Users表中创建一个Group_ID列,并将其填充为用户所关联的所有组的某种文本数组,需要进行解析。问题在于我希望有无限数量的组,并且将所有用户的组关联压缩成一个“值”显得非常笨拙。
实际上这是一个SQL数据库逻辑/设计问题。 任何帮助都将是巨大的帮助。
谢谢!

如果您愿意,我们可以将这个问题迁移到我们的 DBA 姐妹站点:http://dba.stackexchange.com/。如果您认为这是可行的,请标记一个 mod 进行迁移。 - Kev
3个回答

10

只需创建一个表格,将用户与组相关联。两列:一列存储唯一的user_id,另一列存储唯一的group_id。

在此表格中,如果您使user_id-group_id组合唯一,则不需要唯一键。两列就足够了。

+---------+      +------------+
| user    |      | user2group |     +----------+
+---------+      +------------+     | group    |
| user_id |----->| user_id    |     +----------+
| name    |      | group_id   |<----| group_id |
| pass    |      +------------+     | name     | 
| ...     |                         | ...      |
+---------+                         +----------+

如果我没记错的话,这是“规范化”中的三个步骤之一。也许你应该看看这个。

太好了,非常感谢!现在你这么说,似乎很明显,但出于某种原因我想不出来。非常感激。 - Alex Straffin
@AbuDun 那么 group 表是否真的存在?user2group 表中的 group_id 也可以指向 user 表中的 user_id 吗? - tim peterson
@timpeterson 这就是在像MySQL这样的关系型数据库中创建多对多关系的方法。user2group表中的group_iduser_id是它们各自表格中的“外键”。删除任一“父行”将同时删除user2group的“子行”。 - Buttle Butkus

1

您需要创建一个交叉表。

保留您的用户,然后创建以下两个表格:

Groups:
Group_ID, Group_name

Groups_Users:
Group_ID, User_ID

这是一种典型的多对多关系,没有冗余数据。

我同意你的观点,但他也应该为外键使用引用完整性。 - Tearsdontfalls

0

在我看来,将用户链接到群组表,您需要创建第三个名为u_g_realationship的表。

表结构如下:

id    user_id    group_id
--    -------    --------
1     2          7
2     2          5

相比于将其塞入一个列中,这将使更新或删除关系变得非常容易。

我希望这能解决你的问题,Alex。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接