首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高/最大化当前数据库/表结构的效率?

如何提高/最大化当前数据库/表结构的效率?
EN

Stack Overflow用户
提问于 2019-12-16 11:55:53
回答 1查看 69关注 0票数 1

我的数据库表的当前结构如下所示;我有两个表、用户和技能,它们包含以下列:

用户

代码语言:javascript
复制
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

技能

代码语言:javascript
复制
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上显示的表中的数据时,信息显示如下:

代码语言:javascript
复制
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的项目”列,为了提高效率,我是否会将其添加到第二个表中,如下所示:

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

发布于 2019-12-17 17:56:32

对于技能-用户关系,您可以有两种不同的解决方案:如果每个用户都有自己的技能和详细信息,那么您可以使用一个技能表来表示它们,每个用户每行只有一个技能(因此,如果用户有四个技能,则该表将有四行):

代码语言:javascript
复制
Skills (user_id, skill, detail)

使用主键组合user_id,skill。

通过这种方式,要找到某个用户的所有技能,您可以连接这两个表并找到所有相关信息。

相反,如果多个用户可以拥有相同的技能,则应使用三个表:

代码语言:javascript
复制
Users (user_id, f_name, ...)
Skills (skill_id, skill_name, skill_detail)
UsersSkills (user_id, skill_id)

或者,如果您希望每个用户都有自己关于技能的详细信息,但又想要分享这些技能,您可以执行类似以下操作:

代码语言:javascript
复制
Users (user_id, f_name, ...)
Skills (skill_id, skill_name)
UsersSkills (user_id, skill_id,  skill_detail)

对于你的第二个问题,如果用户使用某种技能完成了几个项目,假设你已经选择了上面的第一个解决方案,你可以定义一个新表:

代码语言:javascript
复制
ProjectUsers (user_id, skill, project_id)

使用主键所有三个属性,并使用user_id,技能表的技能外键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59350372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档