你如何推荐我处理一个USER可以有很多技能的数据库设计?

时间:2010-02-26 15:55:33

标签: sql mysql database-design

这是我的数据库设计:

USER                  SKILLS
id                    idUser
email     1-------*   description
name                  selfAssesedLevel
lastname              yearsExperience
?skills?              reference

我怎么能处理这个?我有点迷失在我必须记下的东西上?技能? USER表的字段。

我的目的是让用户能够在他的个人资料中添加n项技能。

谢谢。

4 个答案:

答案 0 :(得分:7)

使用三个表,而你不需要三个表用于一对多的关系,事情会发生变化,让数据库支持它,即使应用程序不会......但是。

你确实有很多人,因为你的技能应该是他们自己的桌子,因为两个人将分享相同的技能,不同的是他们的SelfAssesedLevel,YearsExperience和Reference

Users
----
UserId
Email
Name
LastName


Skills
------
SkillId
Description


UserSkills
----------
UserId
SkillId
SelfAssesedLevel
YearsExperience
Reference

然后你的SQL来获取用户和他们的技能将是

SELECT * FROM Users 
    JOIN UserSkills ON Users.UserId = UserSkills.UserId
    JOIN Skills ON UserSkills.SkillId = Skills.SkillId

答案 1 :(得分:5)

您不需要USER表中的技能字段,因为您已经在用户和技能之间建立了链接:SKILLS.idUser字段。

因此,当您想为ID为666的用户添加技能时,您应该在SKILLS表中添加一个新条目,idUser = 666

额外: 我建议在SKILLS表中添加一个额外的字段:'id'或'skillid',它可以是此表的主键。

答案 2 :(得分:1)

?skills?表中根本不需要USER列。 <{1}}表中存在特定SKILLS的行就足够了。

例如,要选择用户ID 4的所有技能,您可以写:

idUser

答案 3 :(得分:1)

由于用户可以拥有许多技能,并且技能在许多用户中都很常见,因此您需要一个多对多的JOIN表UserSkills。用户和技能将与UserSkills具有外键关系。