Solution fonctionnelle pour modèle relationnel
Serdarus
-
blux Messages postés 27145 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27145 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Je souhaite créer une petite application pour la gestion d'une auto-école, mais je suis pour l'instant confronter à un problème fonctionnel...
En effet j'ai une table 'cours' qui doit prendre en compte la disponibilité des moniteurs et des véhicules avant d'être enregistré. J'ai donc pensé à mettre une clé primaire composée dans cette table mais je ne sais pas trop si ça permet de gérer tous les cas de doublons.
Une autre solution serait peut-être de mettre un champ booléen dans les tables "moniteurs" et "véhicules" pour connaître leur disponibilité mais le problème c'est que je ne sais pas comment le remettre à true si jamais je le met à false ^^'.
Voilà mon mcd : http://i.imgur.com/jlYFcnw.png?1
Je souhaite créer une petite application pour la gestion d'une auto-école, mais je suis pour l'instant confronter à un problème fonctionnel...
En effet j'ai une table 'cours' qui doit prendre en compte la disponibilité des moniteurs et des véhicules avant d'être enregistré. J'ai donc pensé à mettre une clé primaire composée dans cette table mais je ne sais pas trop si ça permet de gérer tous les cas de doublons.
Une autre solution serait peut-être de mettre un champ booléen dans les tables "moniteurs" et "véhicules" pour connaître leur disponibilité mais le problème c'est que je ne sais pas comment le remettre à true si jamais je le met à false ^^'.
Voilà mon mcd : http://i.imgur.com/jlYFcnw.png?1
A voir également:
- Solution fonctionnelle pour modèle relationnel
- Modèle de webcam - Guide
- Modèle organigramme word - Guide
- Modèle de style word - Guide
- Driverpack solution - Télécharger - Divers Utilitaires
- Iphone dernier modèle - Guide
1 réponse
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).
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 ?
Table1----- 1-n -----TableInter ------ n-1 ------ Table2
La clé primaire de Tableinter est la juxtaposition des clés primaires de Table1 et Table2
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...
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?