2009-03-17 5 views
1

J'ai une base de données qui a deux tables "emplacements" et "classes". Je suis habitué à configurer une sorte de situation parent/enfant avec mes tables de base de données, mais celle-ci m'a lancé pour une boucle.Comment configurer la relation de base de données MySQL

Cette relation fonctionne exactement comme vous l'attendez. Les "emplacements" ont plusieurs "classes". Mais certaines des "classes" sont à plusieurs "endroits". Alors, comment puis-je configurer cela? Faut-il créer une troisième table pour gérer les relations?

J'utilise MySQL/PHP (dans le cas qui compte)

Répondre

1

Vous avez besoin d'une table de jointure:

tbl_location 
ID: int 
Name: Varchar(20) 

tbl_class 
ID: int 
Name: Varchar(20) 


tbl_classlocation 
ID: int 
locationID: int 
classID: int 

Quelque chose le long de ces lignes, essentiellement la table classlocation rejoint les deux autres (les deux LocationID et classID sont les clés étrangères de l'emplacement et des tables de classe)

3

Oui, vous avez besoin d'une troisième table. C'est ce qu'on appelle un many-to-many relationship. La table aurait (je recommande) avoir une clé primaire, une colonne d'identification d'emplacement, et une colonne d'identification de classe.

2
locations   location_classes   classes 

+----+-------+ +-------------+----------+ +----+-------+ 
| id | title | | location_id | class_id | | id | title | 
+----+-------+ +-------------+----------+ +----+-------+ 
| 1 | foo | |   1 |  1 | | 1 | clas1 | 
| 2 | bar | |   3 |  1 | | 2 | clas2 | 
| 3 | test | |   1 |  2 | +----+-------+ 
+----+-------+ |   2 |  2 | 
        |   3 |  2 | 
        +-------------+----------+ 
3

Oui, vous avez besoin d'une troisième table en raison de cette relation de plusieurs à plusieurs.

--------   ----------------- 
|Class |  | ClassLocation |  ------------ 
|--------|  |-----------------|  | Location | 
|Id  | <---- |ClassId   |  |------------| 
|Name |  |LocationId  | ----> |Id   | 
|...  |  -----------------  |Name  | 
--------         | ...  | 
              ------------ 

Il est même possible que vous ayez besoin de deux tables supplémentaires si la direction de la relation est importante. Si la signification de "class appartient à l'emplacement" n'est pas la même que la signification si "l'emplacement appartient à la classe" vous avez besoin de deux tables de jointure car une seule table de jointure ne dit rien sur la direction de la relation. Mais je suppose que ce n'est pas le cas pour votre situation.

+0

Pourriez-vous décrire cette situation et comment un champ dans la table ClassLocation n'est pas suffisant pour indiquer la direction de l'association? –

Questions connexes