【发布时间】:2018-06-10 21:10:11
【问题描述】:
我正在寻找一个包含技能和教育细节的矩阵。我会有专栏:
skills_mat_id | user_id | skill | competency_level | priority_level |
和教育类似的东西,其中的能力级别和优先级在论坛中可以为空(或在数据库中为 NULL)。
问题是我应该为每个技能创建一个单独的行条目,即:
1, user1, java, 7, 1
2, user1, php, 6, 2
3, user1, css, 4, 2
4, user1, python, 8, NULL
或者我应该将所有内容都放在同一列中:
1|user1|java,php,css,python|7,6,4,8|1,2,2,NULL
我觉得第一个选项更容易实现(并且由于 NULL/空字段而不太容易在前端出错),但第二个选项似乎更“有效”并且会返回单行什么可能是一个很大的技能列表。任何一个选项都会对性能产生影响吗?这更像是一个前端问题吗?或者设计决策会对数据库性能产生重大影响。我将为此使用 MySQL,但我并不特别偏爱任何一种数据库平台。
我有点担心使用第二个选项更新或删除特定技能。我不太确定如何以一种可以减少意外删除或更新记录的错误部分的可能性的方式进行处理。
我们正在考虑可能拥有数十万用户,这些用户会大幅增加“技能”或“教育”表,因此想知道是否有针对此类数据集的最佳实践方法?
【问题讨论】:
-
标准化很难出错。如果你不知道那是什么,我听说过关于《凡人数据库设计》这本书的好消息。
标签: mysql sql sql-server postgresql