2017-08-07 8 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 Frameworkの

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 

この時間クエリは、従業員の部門+が「」=部門を示唆したトレーニングテーブルから選択されますを使用する間、私は一緒に2つの以上のテーブルを接続する必要があります。この時間は、これは問題になるでしょうか? 部門IDに1と11があるので、選択中に「カンマ」を使用する必要がありますか?

答えて

0

2番目の提案は最初の提案よりも優れていますが、一般にCSVデータをSQLテーブルに格納することは、多くの理由から最適ではありません。

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テーブルに正規化を残してきたものに、この代替:私は同じままemployeetabledepartmenttableテーブルで、次のようなデザインを提案しています。前述したように、CSVデータを保存するのは理想的ではありません。たとえば、単純なクエリを実行して、どのトレーニングにITを推奨部門として含めるかを尋ねる場合です。 CSVデータでは、答えを見つけるためにCSVを掘り下げなければなりませんが、私の提案する表では単純な結合を行うことができます。

SELECT * 
FROM training 
WHERE suggested_department = 1; 

標準化された表を使用すると、他の表に簡単に結合できます。索引を使用すると、毎日の問合せをより迅速に行うことができます。

+0

Timありがとうございます。私は詳細を書くのを忘れた。私はDepartment + Function +の名前のためのトレーニングを提案することができます。たとえば、PHPトレーニングの部門 "IT、Finance"を提案し、 "Carla"が提案する機能 "Manager、employee"ıdeaは、システムへの従業員またはマネージャレベルログインのIT担当者が "PHP"トレーニングを選択できるときです。またはロジスティック部門からのCarlaでも、このトレーニングは彼女の部に示唆されていません。あなたの場合は、トレーニングごとに複数の行を作成する必要があります。xはdep x suggです。名前xはfuncを提案しました、そうですか? – Teo

+0

私は分かりませんが、あなたの他のテーブルが「訓練」のように見える場合は、正規化する必要があります。 –

+0

この場合、私はフォームの作成とフォームの編集機能を変更する必要があります。たとえば、2部門スクリプトを選択した場合、2つの異なる行を作成する必要があります。編集したい場合は、それもずっと複雑になります。 – Teo

関連する問題