簡體   English   中英

您如何建議我處理一個用戶可以擁有許多技能的數據庫設計?

[英]How do you recommend I handle a database design where a USER can have many SKILLS?

這是我的數據庫設計:

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

我該如何處理? 我對必須寫下的“技能”有所迷惑。 USER表的字段。

我的目的是讓用戶能夠在個人資料中添加n個技能。

謝謝。

使用三個表,盡管您不需要一對一關系中的三個表,但是事情發生了變化,即使應用程序還沒有,也讓數據庫支持它。

而且您確實有很多很多,因為您的技能應該是他們自己的表,因為兩個人將共享相同的技能,不同之處在於他們的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

您不需要USER表中的Skills字段,因為您已經在用戶和技能之間建立了鏈接:SKILLS.idUser字段。

因此,當您想為ID為666的用戶添加一項技能時,您應該在SKILLS表中添加一個具有idUser = 666的新條目

額外:我建議在“技能”表中添加一個額外字段:“ id”或“ skillsid”,它們可以是此表的主鍵。

您不需要?skills? USER表中的所有列。 SKILLS表中存在具有特定idUser就足夠了。

例如,要選擇用戶標識4的所有技能,應編寫:

select description, selfAssesedLevel, yearsExperience, reference from SKILLS where idUser = 4

由於一個用戶可以擁有許多技能,並且一個技能可以在許多用戶之間通用,因此您需要一個多對多JOIN表UserSkills。 用戶和技能將與UserSkills具有外鍵關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM