Débutante SQL : modélisation système train - SQL/NoSQL - Programmation
Marsh Posté le 18-05-2005 à 12:17:08
C'est encore moi.
J'ai fait un schéma conceptuel, mais je n'arrive pas à mettre l'image (qui est sur mon disque dur) dans le message, quelqu'un a-t-il la solution?
Merci d'avance
Marsh Posté le 18-05-2005 à 13:26:56
Si tu nous donne la liste des tables en indiquant ce que tu mets dans chacune, ca peut suffire à ouvrir le débat
Marsh Posté le 18-05-2005 à 14:07:52
Il te faut une table pour les villes
Aussi une table avec les types de trains, leur vitesse et les services à bord
Une autre table pour les correspondances entre deux villes avec typeS de trainS susceptibleS d'utiliser la ligne et la distance à parcourir (distance + vitesse => durée du trajet)
Il faut que les correspondances soient minimales donc uniquement des trajets directs sans étape. Il suffira ensuite d'un petit moteur de recherche récursive pour construire des trajets plus long comportant des étapes.
Voilà comment je vois ça ... pour commencer.
Marsh Posté le 18-05-2005 à 14:43:37
Pour etre plus precis, il ne faut pas s'arreter à la notion de train. Il faut aussi dire ce qui compose le train. Donc locomotive, wagon.
Marsh Posté le 18-05-2005 à 15:30:34
cinocks a écrit : Pour etre plus precis, il ne faut pas s'arreter à la notion de train. Il faut aussi dire ce qui compose le train. Donc locomotive, wagon. |
Pourquoi s'arrêter là? Tu peux être encore plus précis et avoir les sièges (ou lits dans le cas de wagon-lits). Comme ça tu peux pousser jusqu'à prévoir des réservations de sièges pour un trajet donné.
Marsh Posté le 18-05-2005 à 16:08:04
Si on prend en compte la notion de voyageur, effectivement il faut les places. Donc prendre aussi en compte la notion de classe avec capacité pour chacune des classes. Il faut alors la numeration des voitures
Marsh Posté le 18-05-2005 à 20:25:13
Je vous mets juste ce que j'avais commencé:
http://img266.echo.cx/my.php?image=schema5jd.png
Mais je vais tenir compte de vos marques car il y a pas mal de points auxquels je n'avais pas pensé...
En tout cas, merci encore!
Marsh Posté le 18-05-2005 à 20:38:54
En fait, il faut en effet prendre la notion de voyageur car l'objectif est de le mettre à disposition du public. Donc de permettre au client de connaitre le trajet pour aller d'une ville à une autre, le temps de transport moyen, les horaires des trains, les étapes, les services à bord.
Concernant les correspondances, c'est justement là où j'ai du mal car j'ai peur de faire de la redondance, j'arrive pas à avoir la bonne logique...
Le débat est lancé...
Marsh Posté le 18-05-2005 à 20:51:47
Je vois à quoi correspond la table "Ligne"
Pour moi, je verrais plutôt une table "Arrêt" avec 2 champs :
- num_trajet
- num_station
La table "Trajet" définirait les caractéristiques générales du parcours complet du train (départ, terminus, km, prix). Et la liste des stations de ce trajet serait dans la table Arrêt qui liste toutes les stations qui sont desservies par ce trajet (au moins 2, le départ et le terminus).
Dans Train, il n'y aurait plus "Départ" et "Terminus", mais seulement "Num_trajet" et l'heure de départ
Je vois pas non plus pourquoi il y a "num_train" dans "Trajet"
Marsh Posté le 18-05-2005 à 21:03:40
L'idée de faire une table Arret, je suis d'accord, le depart et le terminus en feraient appel, c'est ca? Et je zappe la table Station?
Mais si le trajet entre les 2 villes nécessite un changement de ligne, comment faire?
Marsh Posté le 18-05-2005 à 21:11:52
Le départ et le terminus seraient 2 entrées (qui devraient toujours être là) de la table "Arret" (pour chaque "Trajet" ). Il y aurait d'autres entrées dans "Arret" pour les arrêts intermédiaires s'il y en a.
Dans la table "Arret, on a donc plusieurs enregistrements ayant un même "num_trajet", correspondant aux différents arrêts du trajet en question (d'ailleurs, il faudra surement les numéroter, pour savoir dans quel ordre ils sont dessservis)
Mais "Trajet", ca correspond aux trajet des trains (du départ au terminus). On peut pas stocker en base tous les voyages possibles des voyageurs. Quand le voyageur voyage (ca arrive ), il empruntera 1 ou plusieurs "Trajet". Ce sera au programme de faire une recherche parmi les trajets existants
Marsh Posté le 18-05-2005 à 21:20:35
Concernant la numérotation, est ce que ça irait de mettre un attribut 'position' dans la table
Arret (pour l'ordre des arrets du trajet) et dans la table Billet (pour l'ordre des trajets)?
Marsh Posté le 18-05-2005 à 21:22:24
Mise en place du reseau ferroviere avec les gares, les troncons les reliants une à une.
Ensuite, on definit les trajets possibles, cumulant 1 ou plusieurs troncons.
Vient les parcours avec les horaires empruntant les trajets mis en place
gare (identifiant, nom)
troncon (identifiant, gare depart, gare arrivee)
trajet (identifiant)
trajet_troncon (troncon, position, trajet)
parcours (trajet, horaire)
Le noyau est mis en place. Il faut y mettre des trains, les associer aux parcours.
Je fais en sorte que l'on puisse mettre plusieurs trains sur le meme parcours, comme
pour les TGV. Ils sont identifiés differement. Je restreinds la notion de train par
des locomotives et des voitures voyageurs. On peut rajouter les voitures bar, marchandises, ...
Un wagon n'etant pas forcement associé à un unique train, je prefere rajouter la notion. De plus
ca permet de definir sa position dans le train.
Par contre, pour faire simple, on va partir du principe qu'un siege ne bouge pas durant sa carriere.
train (identifiant, nom)
parcours_train (parcours, train)
locomotive (identifiant, nom, modele, vitesse croisiere, vitesse max)
train_locomotive (train, locomotive)
wagon (identifiant, nom, capacite)
train_wagon (train, wagon, position)
siege (identifiant, classe)
wagon_siege (wagon, siege)
A ce point, on a les parcours avec les trains y etant associés. On a donc une capacité
d'accueil precise pour un trajet et une horaire precise. Les voyageurs peuvent reserver
leur(s) place(s). Le point de depart est le voyage qui associe un ou plusieurs parcours.
Pour un voyage, on a au moins un voyageur. Et pour chaque parcours, il faut autant de resa
que de voyageur.
voyageur (identifiant)
voyage (identifiant, voyageur)
voyage_parcours ( voyage, parcours)
resa (voyage, parcours, siege)
Apres, il n'y a aucune contrainte de placée comme verifier que l'on ne perd pas un voyageur en
court de route, ...
Il est possible qu'il manque des notions, j'ai fait ca rapidement.
Marsh Posté le 18-05-2005 à 21:25:03
Bon c'est pas complet, mais avec l'ajout d'infos comme la longueur d'un troncon, on obtient la distance totale. Avec la vitesse autorisée, et la vitesse possible maxi pour un train, on peu definir la durée du trajet...
Marsh Posté le 18-05-2005 à 21:27:34
unagi a écrit : Concernant la numérotation, est ce que ça irait de mettre un attribut 'position' dans la table |
Dans la table "Arret", oui
On aurait donc
- num_trajet
- num_station
- position
Pour indiquer que le "position"-ième arrêt du trajet "num_trajet" se fait dans "num_station"
Pour les billets, j'imagine qu'il y aura aussi ca
Par contre, il manque la notion d'horaire (pas pratique quand on voudra chercher des correspondances ). Peut être rajouter un champ "heure" dans la table "Arret" ?
(et puis un champ "fréquence" (quotidien, jour défié, samedi uniquement ...) dans "trajet" qui indique les jours où ce trajet existe )
Marsh Posté le 18-05-2005 à 21:39:38
D'ailleurs ca me fait penser que mon schema n'est pas precis car, on ne dit pas si pour un parcours à quelle gares il s'arretera. Et pour le moment, on ne sait pas à quelle gare le voyageur s'arrete. On sait qu'il prendra telle parcours, mais pas le point de depart, ni le point d'arrivée. Ca conditionne le prix du billet.
Puis rien ne l'empeche de combiner plusieurs parcours pour faire son voyage. en gros, mon modele n'est pas adapté. Si ca peut servir de piste.
Marsh Posté le 18-05-2005 à 21:48:40
Pour la "fréquence", je le mettrais plutôt dans la table Train non? histoire de savoir si ce train circule les dimanches et fetes par exemple, parce qu'un trajet entre deux points est fait ts les jours, non?
Marsh Posté le 18-05-2005 à 21:54:08
unagi a écrit : Concernant les correspondances, c'est justement là où j'ai du mal car j'ai peur de faire de la redondance, j'arrive pas à avoir la bonne logique... |
Comme je l'ai déjà mentionné, il faut uniquement intégrer en bdd les correspondances minimales : ie deux stations sans arret intermédiaire.
robbyone a écrit : ...Une autre table pour les correspondances entre deux villes avec typeS de trainS susceptibleS d'utiliser la ligne et la distance à parcourir (distance + vitesse => durée du trajet) |
Lors de la recherche d'un trajet, il suffira de réaliser le trajet étape par étape avec pour condition : pas de changement de train.
Les cas particuliers seront alors pris en considération en bdd : trajet avec un ou plusieurs changements de train.
Marsh Posté le 18-05-2005 à 22:12:07
robbyone a écrit : Une autre table pour les correspondances entre deux villes avec typeS de trainS susceptibleS d'utiliser la ligne et la distance à parcourir |
Mais concrètement je ne sais pas comment faire...
Marsh Posté le 18-05-2005 à 22:29:31
Voilà où j'en suis...
http://img87.echo.cx/my.php?image=schema28bb.png
Marsh Posté le 18-05-2005 à 22:43:35
unagi a écrit : Pour la "fréquence", je le mettrais plutôt dans la table Train non? histoire de savoir si ce train circule les dimanches et fetes par exemple, parce qu'un trajet entre deux points est fait ts les jours, non? |
Dans ce cas, pour continuer à gérer les horaires, il faut définir, pour chaque "arrêt", le temps qui le sépare du précédent (sur le même "trajet" bien sur). Ou le temps depuis le départ, ca revient au même
(accessoirement, ce même champ permet de définir l'ordre des arrêts, on a plus besoin de "position" ).
On aurait donc :
- un trajet
- des arrêts sur un trajet, avec leur "horaire" par rapport au départ (de même, on peut aussi ajouter le kilométrage si besoin)
- un train avec une fréquence, un horaire de départ et un trajet
Avec ca, on à l'horaire de chaque train avec son heure d'arrivée dans chacune des stations de son parcours
Marsh Posté le 18-05-2005 à 22:47:11
unagi a écrit : Voilà où j'en suis... |
Pourquoi y a "Départ", "Etape1" ..., "Arrivée" dans "Arret"
Marsh Posté le 18-05-2005 à 22:57:42
mrbebert a écrit : Pourquoi y a "Départ", "Etape1" ..., "Arrivée" dans "Arret" |
Je n'ai pas du bien comprendre le principe alors...
Marsh Posté le 18-05-2005 à 23:00:01
mrbebert a écrit : Dans ce cas, pour continuer à gérer les horaires, il faut définir, pour chaque "arrêt", le temps qui le sépare du précédent (sur le même "trajet" bien sur). Ou le temps depuis le départ, ca revient au même |
Je pensais faire plus simple en prenant la vitesse du train, et les km parcourus
Marsh Posté le 18-05-2005 à 23:10:50
unagi a écrit : Je n'ai pas du bien comprendre le principe alors... |
Un petit exemple (sur quelques colonnes), ca sera plus clair que des explications embrouillées :
Table Trajet : |
On a 2 trajets. Le 1er est constitué de 4 arrêts (les lignes de "Arret" ou Num_trajet=1) (en fait, 1 départ, 2 arrêts intermédiaires à 50 et 120 km, et le terminus situé à 200 km du départ).
Le 2ème trajet est constitué de 3 arrêts (les lignes ou num_arret=5,6 et 7)
La table "Arret" liste tous les arrêts (y compris départ et terminus) de chaque trajet
Marsh Posté le 18-05-2005 à 23:14:03
mrbebert a écrit : Un petit exemple (sur quelques colonnes), ca sera plus clair que des explications embrouillées |
Effectivement c'est beaucoup plus clair merci beaucoup !!!
Marsh Posté le 19-05-2005 à 09:08:29
Ca ne répond pas à son problème de redondance !
Imaginons un trajet C qui est en fait un troncon du trajet A : il y a duplication des informations sur les arrets.
En bdd, il faut avoir les notions de plus bas niveau. C'est au niveau application que doit se forger la notion de trajet.
Pour la recherche des gares intermédiaires desservies, il y a plusieurs niveaux :
1) le plus simple : trajet direct : rechercher le ou les trains qui desservent la gare de départ et la gare d'arrivée.
2) avec un changement de train : trouver la gare dont le train pris au départ rencontre le train allant à destination
3) deux changements : ça se complique mais le principe est le même, si ce n'est qui faut faire le test sur chaque gare par lequel le train de départ peut passer, etc...
Par ailleurs la notion d'ordre de passage dans les gares se fera via les heures de départ dans chaque gare pour le train sélectionné.
Marsh Posté le 19-05-2005 à 09:15:03
'unagi', je regardais ton modèle de données et je me suis demandé si tu travaillais pour la sncf
C'est un projet perso ou un TP d'étude ou c'est professionnel ?
Marsh Posté le 19-05-2005 à 10:19:49
C'est un projet pour mon école... Rien de professionnel (heureusement vu mon niveau!)
Marsh Posté le 19-05-2005 à 10:22:25
unagi a écrit : C'est un projet pour mon école... Rien de professionnel (heureusement vu mon niveau!) |
Quand t'auras fini on pourra aller boire un verre ?
Marsh Posté le 19-05-2005 à 11:42:14
robbyone a écrit : Ca ne répond pas à son problème de redondance ! |
Que C soit inclus dans A n'apporte rien. Ca reste 2 trajets differents, meme s'ils exploitent les memes troncons. S'il etait inclus dans A au sens large (horaires, ...) C n'existerait pas, il serait A.
Sinon la notion d'ordre de passage ne depend pas des horaires. Sur un trajet, on a 2 gares de terminaison et les gares intermediaires. L'ordre de passage ne variera pas en fonction de l'horaire. Il est physique. Autant le renseigner comme tel.
Marsh Posté le 19-05-2005 à 12:14:14
Pas d'accord.
Que C soit inclus dans A, ça s'appelle de la redondance ...
et ça n'apporte (en effet) rien de le répéter sinon de la confusion. Il vaut mieux dire que A est un trajet qui, à un moment donné, sera le même que le trajet C.
En découpant par tronçons, un trajet A = t1 + t2 + t3 + t4 + t5
et un trajet C = t2 + t3
Ensuite, un passager qui veut acheter un billet pour le trajet C : cela m'étonnerait qui ait les idées "au sens large" au point de payer le prix d'un trajet A (plus cher car plus long) :
donc C existe bien mais rien n'empèche ce voyageur de se retrouver à coté d'une personne qui elle fait le trajet A !!!
Enfin, concernant l'ordre des gares sur le trajet, évidemment que si, il dépend des horaires.
Chaque gare a pour un train déterminé une horaire de départ et ces horaires sont dépendantes, qu'on le veuille ou non, de la distance à parcourir. Ainsi un train avant de A vers B ne peut arriver à B avant du'il ne soit parti de A ...
Effectivement cet ordre est aussi physique, mais puisqu'il est déjà suggéré par les horaires, il est inutile de le renseigner : c'est aussi de la redondance.
Marsh Posté le 19-05-2005 à 12:33:42
la redondance n'est un ennemi juré ;-)
Et je maintiens mon idée sur les trajets A et C. Mais on ne doit pas avoir la meme notion. Je differencie le parcours du trajet. Pour moi le trajet est un point A vers un point B, passant par X Y Z. Et le parcours est un train qui fera le un certain trajet partant à telle heure.
C et A ne sont pas la meme chose dans ma notion de trajet. puisqu'il peut exister des parcours empruntant le trajet C, sans pour autant qu'il soit inclus dans un parcours existant empruntant A. Il a beau passer par les gares de A, ce n'est pas un parcours de A.
si je prend un exemple:
Nantes - Paris en trajet A, passera par Ancenis, Angers, Sablé , le Mans.
Nantes - Angers en trajet C, passera par Ancenis.
C est inclus dans le trajet A. Par contre il ne pas à Paris. Et les trains qui le parcourent ne sont pas ceux de A. Et s'il s'agit des trains de A, alors ce n'est pas un parcours de C, mais de A.
Pour l'ordre, evidement que les horaires influent sur l'ordre. Mais a mon sens c'est l'ordre qui influe sur l'horaire. Et non pas l'inverse
Marsh Posté le 19-05-2005 à 13:33:33
Fonctions récursives, factorisation, ... si ! la redondance est un ennemi à combattre chaque jour (sinon quel ennui)
Il ne faut pas confondre cependant avec la sauvegarde des données.
Concernant ton exemple, je cite "Et les trains qui le parcourent ne sont pas ceux de A"
Et si ! justement les trains du trajet A sont aussi ceux du trajet C, c'est seulement le passager qui descend, le train lui continue sa route.
Je vois mal la Sncf aménager deux trains sachant que les deux passeront par le terminus de l'un. Leur raisonnement sera plutôt de remplir au plus celui qui va le plus loin, quitte à rajouter une seconde rame de TGV (Mais là, il ne s'agit pas de 2 trajets différents mais de deux rames/trains partant en même temps : ce qui est un type différent de train)
Quant à savoir qui, de l'horaire ou de l'ordre, influe sur l'autre, on s'en fout
car l'essentiel c'est que l'horaire est une notion qui est nécessaire et qu'il est alors possible d'en déduire l'ordre
(l'inverse n'étant pas une notion des plus précise - ne bousillons pas les efforts de la Sncf pour réduire leurs retards récurrents)
Marsh Posté le 19-05-2005 à 14:18:22
Tu as vu mon exemple. Il existe beaucoup de trains parcourant un certain trajet qui se trouve inclus dans un trajet plus grand. il suffit de prendre l'exemple des TER.
Marsh Posté le 19-05-2005 à 14:18:51
robbyone a écrit : Pas d'accord. |
Pas forcément. On peut tout à fait considérer que l'arrêt en gare de Triffouillis d'un direct n'est pas le même que pour un omnibus. Par exemple, si on veut ajouter le temps d'arrêt (ou de trajet entre 2 point), ce ne sera peut être pas la même.
Tout dépend du niveau de détail voulu.
Et dans ton example, imagine qu'un autre train apparaisse et marque un arrêt intermédiaire sur le troncon t2. Tu va redécouper les trajets A et C
Marsh Posté le 19-05-2005 à 14:49:51
Tu n'as pas tout lu toi : j'ai bien précisé dès le départ que chaque tronçon doit être considéré comme étant un trajet direct sans étape intermédiaire entre deux gares !!!
Quelquechose de relativement précis : heure de départ, distance + vitesse du train.
Cette notion de tronçon n'a rien de physique : un direct de A à C est un tronçon mais un omnibus A,B,C comporte les deux tronçons directs : AB et BC
Le niveau de détails doit être maximum et indivisible étant donné que l'application doit répondre aussi bien au voyageur qui va de A à Z que celui qui veut uniquement aller de P à O !!!
Donc si un jour, la Sncf décide de créer une gare sur mon tronçon t2, il me faudra donc créer deux tronçons t2_1 et t2_2 et garder t2 si le train direct est conservé !
Je reviens sur le premier point de ta remarque : ton soucis concernant le temps d'attente en gare s'annule par le fait que cette notion n'a pas à figurer ici : tout ce dont on a besoin c'est d'une heure de départ, d'une distance et d'une vitesse - ceci pour chaque train susceptible de s'arréter en gare : donc le direct et l'omnibus auront des heures de départ différentes : donc ils seront bien différenciés (combien de fois j'ai ralé parce que mon train avait du retard et que ma correspondance n'avait pu attendre : je devais attendre le départ suivant)
Cherche encore !
Marsh Posté le 10-05-2005 à 23:45:17
Salut ,
Je suis en train de travailler sur la modélisation SQL (sur MySQL ) du système ferroviaire français pour la clientèle avec les trajets pour aller dune ville à une autre, le temps de transport moyen, les horaires des trains, les étapes, les services à bord, etc.
Cela étant une application type pour les débutants SQL (que je suis) , je voulais savoir si peut-être vous aviez des petites infos à me donner, ou même quelques sources...?
Je vous remercie beaucoup d'avance!!!!!!