Как организовать связанные таблицы в базе данных - PullRequest
0 голосов
/ 09 августа 2011

У меня следующая ситуация:

table User (id, name)
table Belonging (id, name, color)
table UserBelonging (id, user_id, belonging_id)

Теперь UserBelonging - это моя таблица соединений, которая соединяет User и его Belonging.

Проблема возникает, когда я хочу вытащить все вещи определенного User, которые красного цвета.

Я вижу два способа сделать это:

  1. Получить все UserBelonging для определенного пользователя, затем просмотреть их и проверить, какие из них красные
  2. Поместитьдополнительный столбец такой: UserBelonging (id, user_id, belonging_id, color), а затем запрос в той же таблице.

Оба метода кажутся мне безобразными.Есть ли кто-нибудь с опытом работы с таблицами базы данных, который мог бы сказать мне, какой путь лучше и почему или, возможно, дать мне лучшее решение?

спасибо

Ответы [ 4 ]

1 голос
/ 09 августа 2011
SELECT B.* FROM User U
INNER JOIN UserBelonging UB on UB.UserId=U.Id
INNER JOIN Belonging B on B.Id = UB.BelongingId
Where B.Color = 'red' AND U.Name='Sam'

Я думаю, что подобное объединение сделает то, что вы хотите.

1 голос
/ 09 августа 2011

Таблица объединения должна только содержать user_id и belonging_id с составным идентификатором (user_id, belonging_id) или с автоинкрементом id столбца.

Это исключает #2.


Теперь вы можете использовать стратегию № 1 или отфильтровать не красные вещи в операторе select.

SELECT b.id, b.name, b.color
FROM UserBelonging ub
LEFT JOIN Belonging b
ON ub.belonging_id = b.id
WHERE ub.user_id = 123456789
AND b.color = 'red'
0 голосов
/ 09 августа 2011

Обычно лучше не использовать циклы в базах данных.В SQL Server я бы сделал это так (но я не знаю, применимо ли это к вашей БД)

    Select User.Name, Belonging.name, Belonging.color from User inner join UserBelonging 
    on User.id =     UserBelonging.user_id inner join Belonging 
    on UserBelonging.belonging_id = Belonging.id 
    where Belonging.color = 'red' and User.name = 'put the name here'

regards

Tim

0 голосов
/ 09 августа 2011

Вы можете легко использовать 1 оператор JOIN и оператор WHERE с вашим состоянием цвета и user_id.Объединения являются одной из наиболее распространенных операций при обсуждении реляционных баз данных.Проверьте W3schools для некоторых основных примеров.

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