我正在开发一个应用程序,每个用户都必须为自己填写广泛的个人资料。
用户个人资料的第一部分包含大约25个左右的一般信息字段
用户个人资料的下一部分是一个部分,他们根据设定的标准列表评估自己。即,"评价您烹饪的好坏"然后他们勾选一到五个收音机盒,还有一个复选框,可以检查他们是否有兴趣'在他们为自己评定的活动/主题中。
其中大约有40个是他们自己评价的。
所以我的问题是,如果每个字段和项目的users表中都有列,我应该如何存储这些信息?这将近70个字段
或者我应该为user_profile和user_self_evaluation设置一个表,并在那里设置每个列的列并与用户建立一对一的关系?
答案 0 :(得分:2)
使用单独的表格。这样,当您仅更新自我评估时,您不需要更新user_profile表。这里的想法是将另一个表中经常更新的字段分开,而在另一个位置上很少更新。如果表变大,并且用户名/密码在单独的表中,则userid / username查找的性能不会受到大量更新查询的影响,如果更改了更新查询,也不会将整个站点关闭自我评估表。
但是如果你打算添加新的评估,我建议采用不同的设计: 带有25个配置文件字段的user_profile表 self_evaluations表,包含id和name,以及有关该问题的任何元信息;每次评估有1条记录 user_profile_evaluation with userid,evaluationid,score,extra - 每个用户评估都有一条记录。
这样,您的架构将更加灵活,您无需更改表格即可添加其他评估。
答案 1 :(得分:0)
我认为后者更好,有70列的表格看起来很糟糕,如果你试图管理它会变得更糟。
如果每个问题都是多项选择,您还可以在每个答案的一个字段中添加数字。
假设您有4个问题有四个问题:
你可以将它们保存为一个名为answerers的列中的1433(第一个问题是答案1,第二个答案4,第三个答案3,最后但不是最不重要的问题4是答案3)
在这里给你一些选择。
但如果我必须在一对一的关系和一张桌子之间做出选择,我会选择一对一的关系,因为以后更容易管理。
答案 2 :(得分:0)
或者我应该为user_profile和user_self_evaluation设置一个表, 并且每个列中都有列,并且具有一对一的关系 与用户?
是的,如果您知道将来不会扩展该表,那么就应该这样做。另一种选择太糟糕了。
如果您认为将来会扩展评估,那么您可以这样做:
user_self_evaluation
表
user_id | evaluation_type | evaluation_value
1 | cooking | 5
1 | singing | 3
2 | cooking | 2
2 | singing | 5
使组合列(user_id,evaluation_type,evaluation_value)成为唯一列或主要列。