0

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

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

该用户将能够填写几个要求,例如:

  • 最低工资(int)
  • 有驾照 (bool)
  • 我的其他要求(文字)

的返回值User->get(user_id);必须是这样的:

user_id: 1,
user_name: 'John Doe',
user_requirements: {
    minimal_salary: 2000,
    drivers_license: true,
    demands: 'These are my demands..'
}

将其存储在数据库中的最佳方法是什么?

我知道你可以使用一对一的关系。(这将花费一个连接或单独的查询)您可以将它全部存储在一个表中。(这将需要对解码代码进行一些调整)您可以将其规范化为与需求表中的类型(int/bool/text)的多对多关系。

编辑

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

4

3 回答 3

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 tables一个 forusers和另一个 for requirements,您可以user_id as foriegn id在另一张表中使用。然后可以use a join检索记录。

希望这可以帮助。

于 2012-05-09T13:21:06.540 回答
1

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

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

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

不要做

select * from users where user_id = 123

select minimal_salary, drivers_license from users where user_id = 123
于 2012-05-09T13:13:52.500 回答
1

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

于 2012-05-09T13:14:30.590 回答