2012-06-08 4 views
1

Disons que j'ai 3 tables.Conception de table MySQL de base et requête SQL

 
Projects 
---------- 
projectId PK 
 
SubProject 
---------- 
projectId PK 
subProjectId PK 

Fondamentalement, tous les projets sont répertoriés dans le tableau des projets. Un projet peut avoir des sous-projets. Ainsi, par exemple, si j'ai les lignes suivantes dans ma table:

 
Projects 
---------- 
1 
2 
3 
 
SubProjects 
---------- 
1,2 
1,3 

Il y a trois projets 1,2 et 3. Les projets 2 et 3 sont des sous-projets du projet 1.

J'ai deux questions. Premièrement, les clés étrangères doivent-elles être le projectId dans Projects référençant projectId et subProjectId dans SubProjects ou les clés étrangères doivent-elles être projectId dans les sous-projets référençant projectId dans Projects et subProjectId dans subProjects référençant projectId dans Projects.

Il est à noter qu'un projet peut être un sous-projet pour plus d'un projet.

Deuxièmement, comment puis-je obtenir les sous-projets d'un projet avec une requête. J'utilise:

 

Select * from projects p1 Join subProjects sp Join projects p2 
where p1.projectId = sp.subProjectId and sp.subProjectId = p2.projectId; 
 

Je reçois le résultat suivant:

 
1 , 2 
1 , 3 

Je veux revenir juste

 
2 
3 

Répondre

0

Il y a une application appelée SQLmaestro vous créez ces codes automatiquement, J'ai beaucoup de temps pour y travailler; génère du code mysql (tables, concaténations, articulations, requêtes personnalisées, etc).

Voici le lien: http://www.sqlmaestro.com/products/mysql/maestro/

1

Je crois que vous pouvez une recherche d'une relation d'auto-referenetial comme détaillé dans
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
dans ce cas, vous devriez juste une table de projets qui a une foreign_key en elle appelé parent_project_id et lorsqu'un projet est un sous-projet, ce sous-projet utilise ce parent_project_id pour indiquer son parent. Le parent n'a aucune référence à l'enfant en termes de clés étrangères.

+0

Merci pour la réponse. J'ai une question. Qu'en est-il du cas où un projet est un sous-projet de plus d'un projet? Par exemple, s'il y a trois projets 1,2,3. Say 3 est un sous-projet de 2 et 1. Comment cela pourrait-il être modélisé? – user489041

+0

Ayant construit un système centré sur une structure arborescente, je suggèrerais également de mettre en œuvre un [Modified Preorder Tree Traversal] (http://www.sitepoint.com/hierarchical-data-database-2/). Goûte bien et fonctionne bien. – bluevector

0

Pour la deuxième partie, vous devrez remplacer le * par le nom de colonne correspondant à 2,3. Je ne vois pas de noms de colonne, donc je ne suis pas sûr que ce soit sp, p1 ou p2.