关于建模数据库

时间:2013-08-28 16:07:39

标签: mysql sql database database-design

我想创建一个表格,代表用户的联系人列表,但每个用户可能有不同的联系人...

我有一个表格用户,其中包含 id_user,nome,info

每个组需要包含作为组所有者的用户的ID,其他用户的ID以及其他每个用户的其他整数值。

因此,表类似于

id_dono_do_grupo,id_user_1,id_user_2,..,id_user_N,valor_1,valor_2,..,valor_N

N 可能会改变。

有关建模此表的任何想法吗? 非常感谢你。

3 个答案:

答案 0 :(得分:2)

您需要有两个表才能正确建模。

第一个表应存储有关该组的信息,包括FK给拥有用户。

第二个表应该存储该组的成员资格。基本上是列group_iduser_id

答案 1 :(得分:2)

这样的事情:

  • (P)表示主键
  • (F table.column)表示table.column的外键

所有小组的表格。

groups
    id              unsigned int(P)
    owner_id        unsigned int(F users.id)
    name            varchar(50) // Vitor's Group, Dan's Group, etc.

适用于所有用户的表格。

users
    id          unsigned int(P)
    name        varchar(50)
    info        varchar(50)

最后是一个将用户绑定到组的表。该组的所有者在groups表中指定,因此此users_groups表允许您根据需要拥有与组关联的任意数量的用户|值对。

users_groups
    id          unsigned int(P)
    user_id     unsigned int(F users.id)
    group_id    unsigned int(F groups.id)
    value       unsigned int // Or whatever data type the "value" is...

答案 2 :(得分:0)

您希望拥有一个名为user_per_group的中间表,并让它只存储用户ID和组ID,这样您就可以在一个组中拥有无限量的用户而不会更改你的代码。

作为一般的经验法则,如果你的表有很多列,你可能做错了,特别是如果大多数列都是外键。

这是一个SQL小提琴建模:

http://sqlfiddle.com/#!9/5179d/2