我应该如何在mySQL表中存储用户“收藏夹”?

时间:2013-02-15 20:32:59

标签: mysql relational-database

我一直在读,我应该将它存储在一个单独的表中“每行一个值”。这究竟是什么意思?像这样 - 所以每个“faviting”获得另一个用户条目?

USER_ID     SKU_Favorited

001         10016
001         10067
024         10016
001         10010
024         16779

似乎多余必须两次输入同一个用户,但这是我应该做的吗?然后在查询中我只是SELECT sku WHERE用户ID ...并找到该号码旁边的所有SKU?

3 个答案:

答案 0 :(得分:4)

它被称为第3版正常形式的关系数据库

您有一个包含用户的表。

//users
id | username | password

带收藏夹的桌子

//favorites
id | userid | Favorited

在这里你如何得到它:

select * from favorites inner join users on favorites.userid=users.id where users.id=1

答案 1 :(得分:3)

relational model中没有其他简单的方法可以做到这一点,因为用户和收藏夹之间存在多对多关系。

您的方法遵循惯例。只需确保USER_IDSKU_Favorited成为主键(一起)。

我偶尔会看到的东西,但它是一种反模式,你应该从不这样做,就是“序列化”“收藏”方面,即将用户ID放在一列中,将“1001,4514,41154,4411”放在另一列中 这似乎更“简洁”,但是非常不明智,因为1)你被迫在第二列使用VARCHAR字段,2)反向查找很难,3)你不能改变喜欢的ID。

答案 2 :(得分:0)

是的,这正是你要做的。我不认为这是多余的。