所以我希望我的用户能够限制谁可以联系他们。
他们应该能够过滤几个因素,包括年龄(例如必须在18 - 29岁之间),收入(必须在25,000 - 60,000美元之间),他们在寻找什么(例如友谊,闲逛等),他们吸食什么毒品(大麻,冰毒,可卡因等),等等。
问题是,我希望他们能够选择和存储多个选择的一些标准(例如药物),但我不知道我应该如何在数据库中存储,或者我应该如何构建表来最好地完成这一点。
例如,如何在上下文中存储"毒品"选择"大麻"、"可卡因"answers"海洛因"的用户行?我会简单地将这些以逗号分隔的值存储在"Drugs"列中吗?或者我应该用一种完全不同的方式来做?
最好的方法是什么(考虑到每次用户想要联系另一个用户时,我显然必须检索并检查此信息),为什么?
不可以,不要以CSV格式存储在数据库中。相反,创建一个名为user_drug
的连接表,并为每个用户/药物组合存储一行:
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
一个DB列(至少理论上)应该NOT保存多个值。不幸的是,有一些程序员在一个列中存储多个值(例如,用逗号分隔的值)—这些程序员(在大多数情况下)破坏了DB和SQL的概念。
我建议您阅读Database Normalization以开始组织您的表。并且,尽你所能达到Codd的第三范式
你可以试试:
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