2011-07-14 3 views
0

Je me demandais si quelqu'un pouvait m'aider à organiser mes tables MySQL d'une manière que vous considérez correcte (j'ai lu quelque part que les tables d'association sont ce que je recherche). J'ai de la difficulté à les mettre en place.Mettre en place des tables d'association

Voici un exemple:

Location   Type     Event     Date 
Location 1   bar, disco   event1     friday 
Location 1   bar, disco   event2     saturday 
Location 2   bar, restaurant  Event3     friday 

Comment iriez-vous à ce sujet si vous voulez avoir « Emplacement 1 » dans la base de données qu'une seule fois, et ce que les événements qui y sont associés stockés ailleurs? La même chose s'applique à la section type. Je ne parviens pas à décider comment je définir plusieurs variables à un seul endroit, comme un bar aussi être un restaurant, etc ...

Répondre

2

La relation entre Locations et Events est un exemple de 1 à plusieurs. Cela signifie que chaque emplacement individuel peut avoir de nombreux événements associés. Ces types de relations sont généralement implémentés en ajoutant une clé étrangère à la table 'many' (événements) qui fait référence à la clé primaire de la table 'one' (emplacements).

La relation entre 'Locations' et 'Types' est un exemple de relation plusieurs-à-plusieurs. Cela signifie qu'un emplacement peut avoir plusieurs types et qu'un type peut être associé à de nombreux emplacements. Ces types de relations sont généralement implémentés avec une table de liens, qui contient des clés étrangères pour les lignes associées. La table de liens a généralement une clé primaire composée des deux clés étrangères, ce qui signifie qu'un emplacement ne peut pas être lié deux fois au type 'barre'.

Ainsi, les structures de tableau ci-dessous pourraient vous convenir:

Location: ID (primary key), LocationName, ... 
Events: ID (primary key), LocationID (foreign key), Date, Name, ... 
LocationTypes: LocationID (fk), TypeID (fk) 
Types: ID (pk), Name, ... 

Pour obtenir les informations sur plusieurs des tables, vous devez utiliser les jointures. Pour le 1-à-plusieurs, la requête suivante fonctionnera:

SELECT 
    l.LocationName, e.Name, e.Date 
FROM Location l 
    JOIN Events e ON l.ID = e.LocationID 

Pour plusieurs à plusieurs, la requête suivante se rassembleront les informations. Ces exemples montrent simplement une jointure interne standard, il existe d'autres types de jointure qui peuvent mieux convenir à vos besoins.

+0

D'accord, et ainsi, il y a une requête sql qui créera ces associations quand je remplacerai les vars manquants? Je vais certainement chercher plus sur cela, mais c'est très utile. – pufAmuf

1

Supposant ce type est le type de l'emplacement

tblType 
id int 
name varchar 

tblLocation 
id int 
name varchar 

tblLocationType (m-n relation) 
fk_type int (ref. tblType.id) 
fk_location int (ref. tblLocation.id) 

tblEvent 
id int 
name varchar 
place int (ref. tblLocation.id) 
date DATETIME 

EDIT: votre exapmle lirait:

tblType 
id name 
1 bar 
2 disco 
4 restaurant 

tblLocation 
id name 
1 Location 1 
2 Location 2 

tblLocationType 
1 1 
2 1 
1 2 
3 2 

tblEvent 
1 event1 1 whenever 
2 event2 1 whenever 
3 event3 2 whenever 
+0

Hmmm et moi devrions exécuter ce qui précède comme une requête? Je suis encore confus sur la façon dont les relations fonctionnent exactement et où aller à partir de là. – pufAmuf

+0

Mon "réf." signifie références. Vous définissez des clés étrangères (si votre moteur le permet) qui "lient" les colonnes d'une table aux colonnes référencées d'une autre table. – Hyperboreus