3 votes

Normalisation d'une colonne de base de données

L'objectif ici est de pouvoir interroger une base de données en lui donnant un Itinéraire, basé sur cet Itinéraire la base de données renverra tous les Codes d'Arrêt qui passent par cet itinéraire.

Par exemple, il me faut pouvoir dire, "Sélectionnez tous les codes d'arrêt qui passent par l'itinéraire 34". Cela devrait alors renvoyer uniquement le CODE D'ARRÊT : SZDASDASDE. (en production, de nombreux autres codes seront renvoyés).

http://i.imgur.com/9ZBSxmq.png

Au-dessus, vous pouvez voir une image de la première table dans une base de données.

description de l'image

Vous pouvez également voir la deuxième table où chaque CODE D'ARRÊT a de nombreux ITINÉRAIRES en tant que parents. Autant que je sache, mettre plusieurs itinéraires dans un seul champ ne suit pas la conception standard d'une base de données, donc si quelqu'un peut m'aider à corriger cela, je lui serais vraiment reconnaissant.

Ces images ont été prises dans Excel de Microsoft juste pour planifier comment je vais réaliser cela, en production, on utilisera une base de données MySQL.

Merci

5voto

mattytommo Points 27587

Vous avez une relation many to many entre les codes d'arrêt et les voyages. Pour éradiquer cela, vous devez décomposer la relation.

Pour ce faire, vous avez besoin d'une table intermédiaire, appelons-la JourneyStopCode, qui ressemblera à ceci :

JourneyStopCode:
JourneyStopCodeID (clé primaire)
JourneyID
StopCodeID

Ensuite, votre table de codes d'arrêt n'aurait pas de champ JourneyID.

Pour récupérer les codes d'arrêt pour un voyage, vous feriez :

SELECT * FROM StopCode
INNER JOIN JourneyStopCode ON StopCode.StopCodeID = JourneyStopCode.StopCodeID
INNER JOIN Journey On Journey.JourneyID = JourneyStopCode.JourneyID
WHERE JourneyID = @yourJourneyID

Éditer: Pour visualiser:

---------------        ---------------------         ----------------
|  Journey    |        | JourneyStopCode   |         |  StopCode    |
---------------        ---------------------         ----------------
| JourneyID   |<---    | JourneyStopCodeID |     --->|  StopCodeID  |
| Description |   |----| JourneyID         |     |   |  Latitude    |
---------------        | StopCodeID        |------   |  Longitude   |
                       ---------------------         ----------------

Ensuite, vos données auraient cette apparence :

Voyage

----------------------------------------
| JourneyID | Description              | 
----------------------------------------
| 34        | Southampton - Portsmouth |
----------------------------------------

Code d'arrêt

----------------------------------------
| StopID | Latitude | Longitude        | 
----------------------------------------
| SSDAFS | 12345    | 67890            |
----------------------------------------

JourneyStopCode

------------------------------------------
| JourneyStopID | JourneyID | StopCodeID | 
------------------------------------------
| 1             | 34        | SSDAFS     |
------------------------------------------

3voto

gbtimmon Points 3277

Les trajets vers les codes d'arrêt constituent une relation de type plusieurs à plusieurs, vous aurez probablement besoin d'une table de jointure.

Tableau 1 :
SID   |   Code d'arrêt   |  Long    |   lat 
0     | ASDFSAFA      | 1        | 2
1     | sdDSGSDGS     | 4        | 0 
....

Tableau 2 : 
Trajet   | Description 
0         | Blah blah blah

Tableau 3 : 
Trajet  | SID 
0        |  1
2        |  1
1        |  4

SELECT A.Longitude, A.Latitude FROM TABLE1 WHERE A.SID IN (
    SELECT SID FROM TABLE3 WHERE JOURNEY = 0
);

0voto

realspirituals Points 3538

Essayez ceci :

    TABLEAU 1
    -------
    TRAJET (PK) DESCRIPTION

    TABLEAU 2
    -------
    SEQUENCENO (PK) CODE ARRET LATITUDE LONGITUDE

    TABLEAU 3
    -------
    TRAJET SEQUENCENNO

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X