2017-08-07 59 views
0

我有員工表和培訓表,我想讓員工登錄並且只看到培訓建議他/她的部門。 是這個好方法,用逗號分隔建議的部門? 並且查詢將從培訓表中選擇,其中員工部門像建議的部門那樣?mysql在zend上的數據庫邏輯建議

epmloyeetable  
id Name  Department 
1 John  Finance 
2 Michael Logistics 

training table  
id name  suggested_department 
1 php  IT, Finance 
2 vba  IT, Logistics 
3 java  Logistics, Finance 

第二個問題是我應該用數字而不是部門名稱和創建部門表?這一次,我將有超過2個表連接到一起將這個是問題,而我將使用Zend框架

epmloyeetable  
id Name  Department 
1 John  Finance 
2 Michael Logistics 

training table  
id name  suggested_department 
1 php  1, 2 
2 vba  1, 3 
3 java  3, 2 

departmenttable  
id Name 
1 IT 
2 Finance 
3 Logistic 

這一次的查詢將是當員工的部門+「」 =建議部門培訓表選擇? 因爲部門ID中會有1和11,所以我應該在選擇時使用+'逗號'嗎?

回答

0

您的第二個建議比第一個建議要好,但通常將CSV數據存儲到SQL表中因多種原因而不是最佳選擇。我提出以下的設計,與employeetabledepartmenttable表保持不變:

training table  
id name  suggested_department 
1 php  1 
1 php  2 
2 vba  1 
2 vba  3 
3 java  3 
3 java  2 

這種替代你已經離開training標準化。如前所述,存儲CSV數據並不理想,其中一個例子就是如果您只想做一個簡單的查詢,詢問哪些培訓將IT部門作爲建議的部門。使用CSV數據,您需要通過CSV挖掘才能找到答案,而使用我建議的表格,您可以進行簡單的連接,例如,

SELECT * 
FROM training 
WHERE suggested_department = 1; 

使用標準化表格可以很容易地加入到其它表,並且還允許可能使用索引,可以使日常查詢快得多。

+0

Tim謝謝你的迴應。我忘了寫細節。我可以爲部門+功能+名稱提供培訓。例如PHP培訓建議部門「IT,財務」,建議人員「Carla」建議功能「經理,員工」ıdea是當員工或經理級別的IT人員登錄系統時可以選擇「PHP」培訓。或者物流部門的卡拉,即使這個培訓沒有建議她的部門,她會看到培訓,因爲她的名字建議。在你的情況下,我必須爲每次訓練創建多行x建議dep x sugg。名字x建議func,我說得對嗎? – Teo

+0

我不確定,但如果你的其他表看起來像「訓練」,那麼你也應該正常化它們。 –

+0

在這種情況下,我必須更改我的創建窗體和編輯窗體功能。例如,如果選擇2部門腳本,則必須創建2個不同的行。如果你想編輯它也會更復雜。 – Teo