我有一个带有如下用户表的数据库:
table users:
user_id (int)
user_name (varchar)
etc..
该用户将能够填写一些要求,例如:
- 最低工资(整数)
- 有驾驶执照(布尔值)
- 我的其他要求(文本)
User->get(user_id);
的返回值必须如下所示:
user_id: 1,
user_name: 'John Doe',
user_requirements: {
minimal_salary: 2000,
drivers_license: true,
demands: 'These are my demands..'
}
将其存储在数据库中的最佳方法是什么?
我知道你可以使用1对1的关系。(这将花费联接或单独查询)您可以将所有内容存储在一个表中。(这将在 de code 中进行一些调整)您可以将其规范化为具有需求表中的类型(int/bool/text)的多对多关系。
编辑
注意:我在用户表中已经有 25 列,那么如果我添加 3 到 6 列需求会有什么区别吗?对于眼睛,它将在 1 个表中获得大量信息。
只使用一个表来存储这些数据,因为我看不出是否有任何复杂性:
选项 1:(仅使用一个表)
|--------|-----------|----------------|-----------------|------------------------|
user_id user_name minimal_salary drivers_license demands
|--------|-----------|----------------|-----------------|------------------------|
1 John Doe 2000 true These are my demands..
|--------|-----------|----------------|-----------------|------------------------|
选项 2:如果parameters
更适合user requirements
那么您可以two tables
一个用于users
,另一个用于requirements
,并且可以在另一个表中user_id as foriegn id
。 然后可以use a join
检索记录。
希望这有帮助。
除非您提供让用户指定自己的字段的功能,否则我认为您没有理由将信息分解到单独的表中。 所有这些信息字段都适用于单个不同的用户。
由于没有其他用户通用的数据,因此您可以将其存储在一个表中。
例如,如果需求将从列表中选择,那么我建议将该可能的列表条目存储在单独的表中。
如果您只是不需要一直使用每个字段,则仅选择所需的字段
不要做
select * from users where user_id = 123
做
select minimal_salary, drivers_license from users where user_id = 123