2010-09-10 3 views
0

Je desining une base de données et est resté coincé avec cette question:ERD pour deux endroits

Mon cas est de concevoir un ERD pour garder la trace des voitures et leurs déplacements d'un endroit à. Les utilisateurs utilisent un formulaire qui contient trois champs: Le premier est utilisé pour entrer le numéro de voiture #

Le deuxième champ est utilisé pour entrer l'emplacement de la voiture (From_Location) et le troisième champ est d'entrer l'emplacement de la voiture (To_Location). Par exemple, la voiture n ° 1 passe de l'emplacement n ° A à l'emplacement n ° B. Par exemple, la voiture n ° 1 passe de l'emplacement n ° A à l'emplacement n ° B. Un autre exemple, la voiture n ° 2 passe de l'emplacement n ° B à l'emplacement n ° A.

Comment puis-je créer la table de localisation et la connecter à la table de voiture afin qu'elle couvre From et To?

La relation doit être de plusieurs à plusieurs.

J'espère que le problème est assez clair.

Répondre

0

j'aurais trois tables

  • Car
  • Lieu
  • CarLocation

voiture aurait les informations de voiture appropriée

  • carid
  • Nom
  • Couleur
  • Année
  • Faire
  • Modèle

Emplacement serait juste le seul champ à moins que vous vouliez ajouter Lat/informations long etc ...

  • LocationID
  • LocationName
  • Latitude
  • Longitu de

CarLocation comprendrait au moins quatre champs

  • CarLocationId
  • carid
  • FromLocationId
  • ToLocationId

J'inclurais probablement un champ UpdateTimestamp dans la table CarLocation.

+0

Merci pour votre réponse rapide! soulève deux questions: que se passe-t-il si l'utilisateur met au même endroit dans le champ from et le champ TO? Cela rendra ma table "CarLocation" pour avoir l'enregistrement invalide suivant: CarLocation (1,1,3,3). la même chose que l'emplacement 3 qui est faux.Nous ne pouvons pas avoir une voiture venant d'un endroit et goig à l'emplacement lui-même.? – guest1

+0

@guest, vous devez inclure la logique dans le début pour s'assurer que cela ne se produit pas –

0

La relation entre la voiture et l'emplacement est: pour chaque voiture, il y a exactement deux emplacements (de et vers), et pour chaque emplacement, il y a 0..n voitures.
Vous devriez: faire la table Car avec les champs: LocationFrom et LocationTo chacun est une clé étrangère à la table Location qui a LocationId et LocationName (vous ne pouvez avoir que ce dernier, c'est discutable). Pourquoi n'avez-vous pas besoin de la troisième table? La connexion n'est pas beaucoup à beaucoup - c'est deux à plusieurs.
Lorsque vous avez une vraie relation plusieurs à plusieurs, les tables ne peuvent pas dire quel enregistrement dans une adresse qui enregistre sur l'autre, et donc la nécessité d'une troisième table (essayez-la .. par exemple si vous deviez enregistrer tous les emplacements de chaque voiture - ce qui aurait été une relation de plusieurs à plusieurs, parce que maintenant une voiture est liée à 0..n emplacements, et un emplacement est lié à 0..n voitures. Maintenant, comment seriez-vous en mesure de dire qui dossier de voiture est lié à quel emplacement (vous pourriez avoir n colonnes pour cela, mais c'est déraisonnable, donc vous avez besoin d'une autre table)) de toute façon ici, vous avez seulement deux colonnes dans la voiture qui sont liées à l'emplacement "directement".

Ajouté:
Vous avez donc besoin de l'histoire et ... Dans ce cas, vous avez vraiment besoin d'une table supplémentaire.
Je devrais ajouter une colonne à ma solution initiale pour cette voiture la table maintenant a colonnes:
Id, FromLocation, ToLocation, LocationHistoryId
FromLocation et ToLocation reste le même, LocationHistoryId est une clé étrangère de la table LocationHistory qui a les éléments suivants colonnes:
carid, LocationID
Lorsque la clé est une clé composite qui comprend les deux champs (et les points de toute évidence LocationID à table) Lieu

+0

Ainsi, dans ce cas, les deux champs (LocationFrom et LocationTo) se réfèrent à une clé qui est locationID? mais comment vais-je m'assurer que les données pour From et To ne sont pas les mêmes? par exemple, les voitures d'enregistrement (voiture n ° 1, 1,1) ne peuvent pas arriver parce qu'une voiture ne peut pas venir d'un endroit et aller au même endroit en même temps. tu as ce que je veux dire? – guest1

+0

et aussi, ai-je besoin d'avoir une troisième table commune? parce que cette relation semble être beaucoup à beaucoup. – guest1

+0

Oui, j'ai compris ce que tu veux dire. Cette AFAIK n'est pas visible à travers une ERD, mais vous devriez l'écrire comme un commentaire. –

Questions connexes