我的数据库表的当前结构如下所示;我有两个表、用户和技能,它们包含以下列:
用户
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.每当我查询要在Profile Page上显示的表中的数据时,信息显示如下:
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)如果我要添加一个“以前使用Skill的项目”列,为了提高效率,我是否会将其添加到第二个表中,如下所示:
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.发布于 2019-12-17 17:56:32
对于技能-用户关系,您可以有两种不同的解决方案:如果每个用户都有自己的技能和详细信息,那么您可以使用一个技能表来表示它们,每个用户每行只有一个技能(因此,如果用户有四个技能,则该表将有四行):
Skills (user_id, skill, detail)使用主键组合user_id,skill。
通过这种方式,要找到某个用户的所有技能,您可以连接这两个表并找到所有相关信息。
相反,如果多个用户可以拥有相同的技能,则应使用三个表:
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,技能表的技能外键。
https://stackoverflow.com/questions/59350372
复制相似问题