我的数据库表的当前结构如下;我有两个表“用户”和“技能”,并包含以下各列:
用户
user_id f_name l_name biography password email role
_____________________________________________________________________
1 John Program Short Bio Password johnprogram@ Programmer
2 Jeff Analyst Another Bio Password jeffanalyst@ Finance Analyst
3 Mister Manager My Bio Password mrmanager@ Project Manager
技能
user_id skill_1 skill_1_details skill_2 skill_2_details skill_3 skill_3_details
_________________________________________________________________________________
1 PHP John writes PHP Python John writes Python Perl John writes Perl
2 Excel I use Excel daily SAP SAP Reporting Reporting Reports created with Excel
3 Billing Oversee Bill. Team Workflow Assignment I assign team acc.
每当我查询表中的数据以显示在“配置文件”页面上时,信息就会显示如下:
Name: John Program
Role: Programmer
Short Bio
Skill: PHP
Details: John writes PHP
Skill: Python
Details: John writes Python
Skill: Perl
Details: John writes Perl
问题:
1)鉴于显示要求,应该对表结构进行哪些重新调整/更改以提高效率/灵活性?
2)如果要添加“以前使用技能的项目”列,为了提高效率,是否可以将其添加到第二张表中,如下所示:
user_id skill_1 skill_1_details projects_using_skill_1
_________________________________________________________________________________
1 PHP John writes PHP 8 Python John writes Python Perl John writes Perl
2 Excel I use Excel daily 12 SAP SAP Reporting Reporting Reports created with Excel
3 Billing Oversee Bill. Team 3 Workflow Assignment I assign team acc.
答案 0 :(得分:1)
对于技能-用户关系,您可以有两种不同的解决方案:如果每个用户都有自己的技能和详细信息,则可以使用技能表来表示它们,每行每位用户只有一项技能(因此,用户具有四个技能,该表将具有四行):
Skills (user_id, skill, detail)
使用主键,一对user_id,技能。
通过这种方式,要查找特定用户的所有技能,您可以将两个表结合在一起并找到所有相关信息。
如果相反,几个用户可以具有相同的技能,则应该使用三个表:
Users (user_id, f_name, ...)
Skills (skill_id, skill_name, skill_detail)
UsersSkills (user_id, skill_id)
或者,如果您希望每个用户都有自己的技能详细信息,但又想分享这些技能,则可以执行以下操作:
Users (user_id, f_name, ...)
Skills (skill_id, skill_name)
UsersSkills (user_id, skill_id, skill_detail)
对于第二个问题,如果用户已经使用某种技能完成了多个项目,并且假设您选择了上面的第一个解决方案,则可以定义一个新表:
ProjectUsers (user_id, skill, project_id)
具有主键的所有三个属性,以及具有user_id的Skills表的技能外键。