如何组织数据库中的
问题描述:
相关的表,我有以下情况:如何组织数据库中的
table User (id, name)
table Belonging (id, name, color)
table UserBelonging (id, user_id, belonging_id)
现在,UserBelonging
是我加入连接User
和他Belonging
表。
的问题出现时,我想拉出来的一定User
全部家当,是红色。
我看到两种方法可以做到这一点:
- 获取所有
UserBelonging
某个用户,然后依次通过他们,并检查它们是红色 - 将一个额外的列这样的:
UserBelonging (id, user_id, belonging_id, color)
,然后在查询同一张桌子。
这两种方法似乎丑陋给我。有没有人有数据库表的经验,可以告诉我哪种方式更好,为什么或可能给我一个更好的解决方案?
感谢
答
连接表应仅包含user_id
和belonging_id
,具有(user_id, belonging_id)
任一的复合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'
答
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'
我觉得像这样的连接会做你想要的。
答
这是一般最好不要使用循环数据库中。在SQL Server中我会做这样的(但我不知道这是否适用于你的DB)
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'
问候
添
请不要使用W3Schools的作为参考,HTTP: //w3fools.com/ – anderssonola