2017-08-07 3 views
0

J'ai une table d'employé et de formation, je veux que les employés se connectent et voient seulement la formation a suggéré ses départements. est cette bonne approche, séparer les départements suggérés avec la virgule? et la requête sera sélectionnée à partir de la table de formation où département des employés comme département suggéré?mysql Base de données logique conseiller sur 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 

Deuxième question: est-ce que je devrais utiliser des nombres au lieu des noms de département et créer une table de département? Cette fois, je vais devoir vous connecter plus de 2 tables ensemble sera-ce problème alors que je vais utiliser le 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 

Cette requête de temps sera select de la table de formation où service des employés + « » = service proposé? car il y aura 1 et 11 dans le département id donc devrais-je utiliser + 'virgule' lors de la sélection?

Répondre

0

Votre deuxième suggestion est meilleure que la première, mais en général stocker des données CSV dans une table SQL est sous-optimale pour plusieurs raisons. Je propose la conception suivante, le reste étant les mêmes tables employeetable et departmenttable:

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

Cette alternative à ce que vous avez quitté la table trainingnormalisée. Comme mentionné, le stockage des données CSV n'est pas idéal, avec un exemple: si vous vouliez simplement faire une simple requête demandant quelle formation a l'informatique comme département suggéré. Avec les données CSV, vous devez parcourir le CSV pour trouver la réponse, alors qu'avec ma table suggérée, vous pouvez faire une simple jointure, par ex.

SELECT * 
FROM training 
WHERE suggested_department = 1; 

En utilisant une table normalisée, il est facile de se joindre à d'autres tables, et permet également l'utilisation possible des indices qui peuvent faire des requêtes beaucoup plus rapide de tous les jours.

+0

Tim Merci pour la réponse. J'ai oublié d'écrire les détails. Je peux vous suggérer une formation pour Département + Fonction + nom. Par exemple, la formation PHP a suggéré le département "IT, Finance", la personne suggérée "Carla" a suggéré la fonction "Manager, employé" ıdea est quand la personne IT au niveau de l'employé ou gestionnaire se connecte au système peut choisir la formation "PHP". Ou Carla du département Logistique même cette formation non suggérée à son département elle verra la formation parce qu'on lui a suggéré son nom. Dans votre cas, je dois créer plusieurs lignes pour chaque formation x suggestion suggérée. nom x fonction proposée, ai-je raison? – Teo

+0

Je ne suis pas sûr, mais si vos autres tables ressemblent à 'l'entraînement 'alors vous devriez les normaliser aussi. –

+0

dans ce cas, je dois modifier ma forme de création et modifier les fonctions de formulaire. Par exemple, si vous sélectionnez 2, le script du département doit créer 2 lignes différentes. Et si vous voulez éditer, ce sera beaucoup plus compliqué aussi. – Teo