存储此信息的最佳方法是什么?

时间:2012-05-09 13:11:29

标签: php mysql

我有一个像这样的用户表的数据库:

table users:
user_id (int)
user_name (varchar)
etc..

此用户可以填写以下几项要求:

  • 最低工资(int)
  • 有驾驶执照(布尔)
  • 我的其他要求(文字)

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的关系。 (它将花费一个连接或单独的查询) 您可以将它全部存储在1个表中。 (它将在代码中花费一些调整) 您可以使用需求表中的类型(int / bool / text)将其规范化为多对多关系。

修改

注意:我在用户表中已有25列,如果我添加3到6列需求,它会有什么不同吗?对于眼睛来说,它将在1个表中获得大量信息。

3 个答案:

答案 0 :(得分:2)

仅使用一个表来存储此数据,因为我无法看到是否存在任何复杂性:

选项1:(仅使用一个表格)

|--------|-----------|----------------|-----------------|------------------------|
 user_id   user_name   minimal_salary   drivers_license           demands
|--------|-----------|----------------|-----------------|------------------------|
     1     John Doe         2000             true         These are my demands..
|--------|-----------|----------------|-----------------|------------------------|

选项2 :如果parameters更适合user requirements,那么您可以two tablesusersrequirementsuser_id as foriegn id你可以在另一个表中拥有use a join。然后可以{{1}}检索记录。

希望这有帮助。

答案 1 :(得分:1)

由于没有其他用户常用的数据,您可以将其存储在一个表中。

如果从列表中选择实例的需求,那么我建议将这些可能的列表条目存储在单独的表中。

如果您不是一直不需要每个字段,那么只选择您需要的字段

不要做

select * from users where user_id = 123

DO

select minimal_salary, drivers_license from users where user_id = 123

答案 2 :(得分:1)

除非您提供让用户指定自己的字段的功能,否则我认为您没有理由将信息分成单独的表。所有这些信息字段都适用于单个不同的用户。