如何在表中存储用户选择的多个选项

时间:2011-09-22 11:52:21

标签: php mysql database database-design

所以我希望我的用户能够限制可以联系他们的人。

他们应该能够过滤几个因素,包括年龄(例如必须介于18 - 29之间),收入(必须赚取25,000至60,000美元),他们正在寻找的东西(例如友谊,闲逛等) 。),他们做了什么药(大麻,甲基溴,可卡因等)等。

问题是,我希望他们能够为某些标准(例如药物)选择和存储多个选项,但我不知道我应该如何将其存储在数据库中或者我应该如何将表格结构化为最好的完成。

例如,我如何在这种背景下存储“药物”选择“大麻”,“可卡因”和“海洛因”的用户行?我只是将它们作为逗号分隔值存储在“药物”列中吗?或者我应该以完全不同的方式做到这一点?

最好的方法是什么(考虑到每次用户想要联系其他用户时,我显然必须检索并检查此信息)以及为什么?

3 个答案:

答案 0 :(得分:3)

不,不要将值以CSV格式存储在数据库中。而是创建一个名为user_drug的{​​{3}}并为每个用户/药物组合存储一行:

user
id    name  income
1     Foo   10000
2     Bar   20000
3     Baz   30000

drug
id    name
1     Marijuana
2     Cocaine
3     Heroin

user_drug
user_id drug_id
1       1
1       2
2       1       
2       3
3       3

答案 1 :(得分:1)

DB列(至少在理论上)应该 NOT 保存多个值。不幸的是,有些程序员在一个列中存储多个值(例如用逗号分隔的值) - 那些程序员(在大多数情况下)破坏了DB和SQL的概念。

我建议您阅读 Database Normalization ,以便开始组织您的表格。并且,尽力实现 Codd's Third Normal Form

答案 2 :(得分:0)

你可以试试这个:

criterium
------------
user_id type          value
1       AGE_MIN       18
1       AGE_MAX       29
1       INCOME_MIN    25000
1       INCOME_MAX    60000
1       DRUGS         Marijuana
1       DRUGS         Meth