【发布时间】:2011-03-17 12:08:12
【问题描述】:
我的表单中有一个复选框列表,用户可以选择其中任何一个,也可以选择全部。
认为用户选择了他感兴趣的运动类型。
我需要最好的数据库结构来存储这个用户选择。这样,将来我就可以获得所有这些数据。
我认为,我可以将每个(用户 ID、运动)选择存储为数据库表中的新行。但这让我很困惑,因为只有少数用户的表格会更快地扩展。
兄弟们有什么想法吗?
【问题讨论】:
我的表单中有一个复选框列表,用户可以选择其中任何一个,也可以选择全部。
认为用户选择了他感兴趣的运动类型。
我需要最好的数据库结构来存储这个用户选择。这样,将来我就可以获得所有这些数据。
我认为,我可以将每个(用户 ID、运动)选择存储为数据库表中的新行。但这让我很困惑,因为只有少数用户的表格会更快地扩展。
兄弟们有什么想法吗?
【问题讨论】:
您可以设置多对多表,例如:
FavoriteSports
------
id user_id sport_id
1 5 20
你在哪里:
User
-------
id name
5 Mike
Sport
-----
id name
20 Football
这是有道理的,因为一个用户有很多运动,而一项运动有很多用户。
【讨论】:
决定如何执行此操作称为规范化。
有多种方法可以做到这一点,具体取决于您希望数据的标准化程度。
最简单的方法就是你描述的。
userID userName sport
或者你可以有 2 张桌子
users
userID userName sportID
sports
sportID sport
或者你可以有 3 张桌子
users
userID sportName
sports
sportID sportName
user_sports
userID sportID
user_sports 表包含哪个用户喜欢哪个运动。
您选择哪种方法取决于您的数据关系以及您期望的重复次数。
如果您只存储用户选择的运动,我会选择第二个。这可以防止重复运动名称,但每个用户只允许一项运动。如果您想让用户选择多项运动,请使用第三个选项。
【讨论】: