2012-05-09 52 views
0

我有一个用户表数据库就像这样:什么是存储此信息的最佳方式?

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)的多对多关系。

编辑

注:我已经在user表中列25,所以它将使任何区别,如果我加3至6诉求列?为了眼睛,它将在1张桌子上获得大量信息。

回答

1

由于没有其他用户通用的数据,因此可以将它存储在一个表中。

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

如果你只是不需要每场所有的时间,然后选择只需要

不做领域

select * from users where user_id = 123 

select minimal_salary, drivers_license from users where user_id = 123 
1

除非你提供让用户指定自己的字段的能力,我看不出为什么你应该把信息分解成单独的表格。所有这些信息字段适用于单个不同的用户。

+0

把它放在一个单独的表中的原因是,用户的需求是一个自我的实体。当前端调用user-> get()函数时,我只需要使用这些数据。所有其他时间我需要使用用户的信息,我不需要有这些需求。 – pascalvgemert

+0

需求是什么样的实体?在它上面看起来它被表示为一个简单的字符串。 –

+0

如果你划分的责任,你将有用户,他的信息,用户的要求,例如用户的更新等。 但也许我现在想的困难.. – pascalvgemert

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一个用于users和其他用于requirements,您可以在另一个表中有user_id as foriegn id。然后可以use a join来检索记录。

希望这会有所帮助。

相关问题