Solution fonctionnelle pour modèle relationnel
Fermé
Serdarus
-
28 avril 2013 à 17:47
blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 - 29 avril 2013 à 11:23
blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 - 29 avril 2013 à 11:23
A voir également:
- Solution fonctionnelle pour modèle relationnel
- Modèle organigramme word - Guide
- Pack solution - Télécharger - Divers Utilitaires
- Solution rébus image ✓ - Forum Loisirs / Divertissements
- Modèle trombinoscope vierge word - Forum Logiciels
- Mots entre amis messenger solution ✓ - Forum jeux en ligne
1 réponse
blux
Messages postés
26013
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
26 avril 2024
3 289
28 avril 2013 à 21:33
28 avril 2013 à 21:33
Salut,
l'erreur vient de ton MCD tel qu'il est décrit.
Si un élève peut suivre plusieurs cours, un moniteur dispenser plusieurs cours et que tu peux avoir tout ce monde-là (élèves et moniteurs) sur la route en même temps (ce qui semble être le cas normal), alors tu dois avoir deux tables intermédiaires dont les clés primaires sont les concaténations des clés primaires des tables en relation.
eleve(id_eleve,...)
suit(id_eleve,id_cours,...)
cours(id_cours,...)
moniteur(id_moniteur,...)
dispense(id_moniteur,id_cours,...)
...
Tu ne devrais pas avoir de doublon, mais tu dois balayer la table moniteurs et la table véhicules pour vérifier les disponibilités avant d'insérer une nouvelle ligne dans cours (et les tables adjacentes).
l'erreur vient de ton MCD tel qu'il est décrit.
Si un élève peut suivre plusieurs cours, un moniteur dispenser plusieurs cours et que tu peux avoir tout ce monde-là (élèves et moniteurs) sur la route en même temps (ce qui semble être le cas normal), alors tu dois avoir deux tables intermédiaires dont les clés primaires sont les concaténations des clés primaires des tables en relation.
eleve(id_eleve,...)
suit(id_eleve,id_cours,...)
cours(id_cours,...)
moniteur(id_moniteur,...)
dispense(id_moniteur,id_cours,...)
...
Tu ne devrais pas avoir de doublon, mais tu dois balayer la table moniteurs et la table véhicules pour vérifier les disponibilités avant d'insérer une nouvelle ligne dans cours (et les tables adjacentes).
Modifié par Serdarus le 28/04/2013 à 22:45
En effet je me doutais bien qu'il fallait créer une table intermédiaire. Mais dans ce cas là je dois changer mes cardinalités et là ça m'embrouiller un peu.
Il y'aurait du 1,n de chaque côté de la table suit par exemple, non ?
28 avril 2013 à 23:05
Table1----- 1-n -----TableInter ------ n-1 ------ Table2
La clé primaire de Tableinter est la juxtaposition des clés primaires de Table1 et Table2
Modifié par Serdarus le 29/04/2013 à 10:22
29 avril 2013 à 10:38
Une relation n-n ne veut pas dire obligation, mais possibilité...
Ceci dit, à la lumière de la réflexion, tu as raison, pas de relation n-n avec cours, juste des 1-n.
La clé primaire de cours devrait être une concaténation de id_elève, id_moniteur, date et heure et id_véhicule, pour être sur d'interdire les doublons...
Modifié par Serdarus le 29/04/2013 à 11:11
J'aurais bien une table avec une table composée d'une clé primaire avec 6 champs ? :O
J'envisage tout de même de sortir l'attribut heure de la table cours et créer une table crénau_horaire où je retrouverai l'heure.
edit:
Il faut que je pose un exemple concret sinon je vais jamais y arriver...
Si j'ai les données suivantes :
Eleve : Toto
Date : 29/04/2013
Heure : 09:00:00
Moniteur : Paul
Voiture : A
Dans ma base j'aurais la clé primaire : Toto 29/04/2013 09:00:00 Paul A
Si je m'amuse à faire un nouvel enregistrement avec les mêmes données mais en changeant par exemple juste la voiture. J'aurais la clé primaire : Toto 29/04/2013 09:00:00 Paul B et ma base acceptera cette nouvelle ligne car sa clé primaire est différente de la première.
Mais fonctionnellement c'est faux, un cours utilise une et une seule voiture...
edit2:
Je suis bête, c'est ds mon code que je dois gérer ce genre d'exception derrière...
par exemple :
$sql="SELECT * FROM cours";
$result=mysql_query($sql);
while($ligne=mysql_fetch_array($result)){
if($eleve=$ligne['id_eleve'] && $date=$ligne['date'] && $ligne['heure']){
echo "Cet élève a déjà un cours à cette date !";
elseif($date=$ligne['date'] && $heure=$ligne['heure'] && $moniteur=$ligne['id_moniteur'])
echo "Ce moniteur a déjà un cours à cette date !";
etc....
Qu'en pensez vous?