在一列中存储另一个表中的多个ID?

时间:2012-03-15 20:36:08

标签: php mysql

道歉,如果这真的很愚蠢,但我没有任何php和mysql的经验,知道应该怎么做。我在mysql数据库和组表中有一个customer表:

客户 - ID名称电子邮件电话组 组 - ID名称描述

因此,如果需要,我需要为客户分配组,这可以是每个客户不止一个组。所以例如客户1在第4,5,6组中

我应该在customer表的group列中分配组的方式。我应该只添加逗号分隔的组ID,然后在需要获取个人ID时使用explode吗?

也许这根本不是正确的方法,请有人开导我。我很高兴知道这样做的正确方法,谢谢。

3 个答案:

答案 0 :(得分:4)

不要在一列中存储多个ID。这是一种非规范化,会使查询和更改数据变得更加困难,并且会损害性能。

而是创建一个单独的CustomerGroup表(包含CustomerIDGroupID列),并且每个客户/组关系都有一行。

答案 1 :(得分:1)

  

我是否应该添加以逗号分隔的组ID,然后在需要获取个人ID时使用explode?

没有!如果您这样做,那么您将无法快速(例如)查询特定组中的用户。

而是使用带有两列的join table,每列都有一个对应表的foriegn键约束。

group_id  customer_id
4         1
5         1
6         1

答案 2 :(得分:1)

以下是表示如何实现此目的的表示例:

表1消费者:

id name email 
1  john john@something.com
2  ray  ray@something.com

表2组:

id group_name   description
1  music        good music group
2  programming  programmers

表3 CONSUMERS_GROUPS

consumer_id  group_id
1              1
1              2
2              1

现在,表3列出了属于哪个组ID的消费者ID。

这种类型的关系称为 一对多 关系,其中一个消费者可以拥有多个群组。如果一个群体可以拥有许多消费者,那么反向也可能是正确的。在这种情况下,关系称为 多对多