设计数据库:在表之间链接大量值

时间:2011-09-05 22:59:51

标签: mysql sql database database-design

没有措辞我的问题,但是使用这些表:

    USER TABLE                       ANIMALS
    u_id   username                   a_id   animal
    --------------------------       ---------------------------
      2    alice                       1    cat
      4    brian                       2    small dog
      7    carla                       3    big dog
                                       4    rabbit
                                       5    guinea pig
                                       etc.  

我希望用户能够将他们拥有的动物添加到他们的个人资料中。

哪些新的表/字段和数据类型对我来说是最好的方式?

谢谢。

3 个答案:

答案 0 :(得分:3)

如果您需要为每个用户允许多种类型的相同动物(珍妮特可以拥有多个兔子),请执行以下操作。将UserId和AnimalID作为主键。

我会做的

 UserAnimals
 ------------
 UserId
 AnimalID

您的表格可能如下所示:

 UserAnimals
 ------------
 UserId || AnimalId
      4 || 3
      4 || 2
      7 || 4
布莱恩有一只小狗和一只大狗。卡拉有一只兔子。

答案 1 :(得分:1)

基本上,您需要一个将用户ID映射到动物ID的表。 如果你想一次添加1个,你可以使用这样的表:

UserAnimals
-----------
UserID (fk to User Table)
AnimalId (fk to Animal Table)

假设他们可能拥有,比如3只狗,并且你想跟踪这个数字,你可以每只动物有一行,或者你可以修改表格以包括每种类型的动物数量:

UserAnimals
-----------
UserID
AnimalID
Count

如果我知道人们很有可能拥有给定动物的倍数,我可能会这样做,否则每当检索到达总数时,还有一些工作要做。

我想有人可以说,ID字段对动物来说也不是绝对必要的。它可能只是一个字符串的查找表,但是如果您因为某些原因决定要修改动物名称,则需要更多的存储空间并使事情变得复杂一些。

答案 2 :(得分:0)

我会向你推荐多对多关系表。

示例:

table: users_x_animals
-----------------------
pid  |  u_id  |  a_id
1       2        3
2       4        5
3       2        5
4       7        1
5       4        2

这种方式如果您在u_id和a_id上有索引(单独),您可以查询“id为X的动物是由用户拥有”,或者反过来“具有id x拥有这些动物的用户”。

希望有所帮助。 :)