3

我正在开发 PHP/MySQL 中的 webapp,我已经到了需要创建用户/组关联的地步。

这是我要拍摄的:

  • 我将拥有越来越多的组和用户。

  • 用户将能够随时修改他们的组关联

  • 组协会将决定
    网站上显示的内容的优先级。

  • 发送给用户的电子邮件更新将由他们当前的组关联决定。

我的问题是,处理此用户/组关联的最佳方式是什么?

我当前的表结构如下所示(为便于沟通而简化):

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 表。然后我可以做以下两件事之一:

我可以在 Groups 表中创建一个名为“User_ID”的列,并且对于每个组关联,我都有一行说明 Group_ID、Group_name 和 User_ID。该选项感觉就像它会创建一个巨大的超级冗余数据库表。

我能想到的另一个选项是在 Users 表中创建一个 Group_ID 列,然后在必须解析的某种文本数组中填充与用户关联的所有组。这里的问题是我希望有无限数量的组,并且为我的用户表中的每一行将所有用户的组关联塞入一个“值”似乎超级草率。

真的,这是一个 SQL 数据库逻辑/设计问题。任何帮助都会有很大帮助。

谢谢!

4

3 回答 3

10

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

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

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

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

于 2013-03-03T14:15:07.110 回答
1

您必须创建一个交叉表。

保持您的用户原样并创建以下两个表:

Groups:
Group_ID, Group_name

Groups_Users:
Group_ID, User_ID

这是典型的 n:m 关系,没有冗余数据。

于 2013-03-03T14:12:41.017 回答
0

在我看来,将用户链接到 GROUPS 表

您必须创建第三个名为 u_g_relationship 的表

表结构

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

与将关系塞入一列相比,这将使更新或删除关系变得非常容易

我希望这能解决你的问题,亚历克斯。

于 2013-03-03T14:15:52.307 回答