Проектирование базы данных: связывание множества значений между таблицами - PullRequest
1 голос
/ 06 сентября 2011

Не очень хорошо сформулировал мой вопрос, но с помощью этих таблиц:

    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 ]

3 голосов
/ 06 сентября 2011

Если вам нужно разрешить несколько типов одного и того же животного для каждого пользователя (у Джанет может быть более одного кролика), выполните следующие действия.Сделайте UserId и AnimalID вашим первичным ключом.

Я бы просто сделал

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

Заполненный данными, ваша таблица может выглядеть так:

 UserAnimals
 ------------
 UserId || AnimalId
      4 || 3
      4 || 2
      7 || 4

У Брайана есть маленькийсобака и большая собака.У Карлы есть кролик.

1 голос
/ 06 сентября 2011

По сути, вам нужна таблица, которая будет отображать идентификаторы пользователей и животных.Если вы хотите добавить их по одной за раз, вы можете просто использовать таблицу, например, такую:

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

Предполагая, что они могут принадлежать, скажем, 3 собаки, и вы хотите отслеживать число, вы можете иметьпо строке на животное, или вы можете изменить таблицу, включив в нее количество животных каждого типа:

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

Я бы, наверное, сделал это так, если бы знал, что есть хороший шанс, что людииметь кратные данные данного животного, в противном случае есть немного больше работы, когда происходит поиск, чтобы получить общее количество.

Полагаю, можно утверждать, что поле идентификатора не является абсолютно необходимым для животных.Это может быть просто таблица поиска строк, хотя это требует немного больше места для хранения и немного усложняет ситуацию, если вы решите, что по каким-то причинам хотите изменить имена животных.

0 голосов
/ 06 сентября 2011

Я бы порекомендовал вам таблицу отношений "многие ко многим".

Пример:

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, вы можете запросить "animal"с id X принадлежит пользователям "или наоборот" пользователь с id x владеет этими животными ".

Надеюсь, это поможет.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...