2012-08-01 51 views
4
  1. 我有一個表格供用戶使用。每個用戶都有他們教授的某些技能。因此,例如:如何設計此數據庫

    • 鮑勃可以教空手道
    • 路易絲可以教鋼琴和針織
    • 羅傑可以教柔道,帆船,擊劍

這是我如何做了它在數據庫中:

Table users 
pk: uid, name 

1 Bob, 
2 Louise, 
3 Roger 

Table skills 
pk: sk_id, skill 

1 karate, 
2 piano, 
3 knitting, 
4 judo, 
5 sailing, 
6 fencing 

Table user_skill (relationship between user and skills) 
pk:usk_id, fk:uid, sk_id 

1 1 1, 
2 2 2, 
3 2 3, 
4 3 4, 
5 3 5, 
6 3 6, 

我想t母雞顯示「羅傑擁有這些技能:柔道,basketweaving」

select name, skill 
from users, skills, user_skill 
where users.uid = user_skill.uid 
and users.uid = 3 

這是去了解正確的方式 - 無論是在設計表和查詢(MySQL的)的條款?

  1. 然後說我想與他們教區更新他們的個人資料:

    • Bob可以在倫敦教空手道
    • 路易絲可以教博爾頓鋼琴和針織曼徹斯特
    • 羅傑可以教倫敦和曼徹斯特的柔道,在利物浦帆船和擊劍布拉德福德

所以我添加下面的表格:

Table cities 
pk: city_id, city 

1 London, 
2 Manchester, 
3 Liverpool, 
4 Bolton, 
5 Bradford, 

但我很困惑,如何做的關係。我一直在寫它,並意識到它不工作,並再次開始,所以我顯然在某個地方出了問題。

+0

您應該停止使用隱式語法。這是一個SQL Antipatten和一個非常差的編碼技術。 – HLGEM 2012-08-01 17:16:08

+0

你的意思是在查詢中添加表名嗎?或者還有更多? – osman 2012-08-01 17:57:15

回答

2

我會說你的一般數據庫結構是好的,只要關係走了。要納入城市方面,您可以使用提議的城市表格,還可以在user_skill表格中添加一列以包含對城市表格的引用。

還要確保在選擇查詢中使用正確的連接語句,因爲這是最佳實踐,並有助於查詢儘可能高效地運行。

1

用戶可以在多個位置教授技能,例如: 「bob教倫敦和博爾頓的柔道」?還是僅僅是一個技能城市?

根據你想要表的方式,你可以在user_skills表中添加一個'city'字段,並且有多個「bob/judo/cityX」「bob/judo/cityY」類型的記錄。或者你會添加另一個表「user_city_skills」,它將是「user_skill_ID,cityID」。

+0

嗨!感謝回覆。如果我有多個bob /柔道/城市行,那麼這並不違反1NF,因爲我重複了一組信息 - 我已經閱讀了關於1NF如此不確定的不同定義。 – osman 2012-08-01 18:04:57

0

除了你的usr_skill表,你的結構看起來很好。要包含最後一部分,請在user_skill表格中添加一個fk city_id。如果玩家可以在多個城市教授相同技能,則需要額外的表格以避免多值列。

0

是的,繼續下去。您還應該在表user_skill中再添加一列,該列將保存city_id