[英]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.