Domanda
Sto desining un database e rimasto bloccato con questo problema:
Il mio caso è quello di progettare un disco di ripristino per tenere traccia delle vetture e dei loro movimenti da un luogo all'altro.
Gli utenti utilizzano un modulo che contiene tre campi: il primo viene utilizzato per inserire la vettura #. Il secondo campo è utilizzato per inserire la posizione della vettura è venuto da (FROM_LOCATION) e il terzo campo è quello di inserire la posizione della vettura sta andando a (TO_LOCATION).
Per esempio, Auto # 1 si muove dalla posizione # A alla posizione # B. Un altro esempio, auto # 2 si muove dalla posizione # B alla posizione # A.
Come posso creare la tabella posizione e collegarlo al tavolo macchina in modo che copra Da e A?
Il rapporto dovrebbe essere molti a molti.
Spero che il problema è abbastanza chiaro.
Soluzione
Vorrei avere tre tabelle
- auto
- posizione
- CarLocation
Auto avrebbe le informazioni appropriate auto
- CARID
- Nome
- Colore
- Anno
- make
- Modello
posizione sarebbe solo l'un campo a meno che non si vuole aggiungere Lat / Long informazioni etc ...
- LocationID
- LocationName
- Latitude
- Longitude
CarLocation dovrebbe includere almeno quattro campi
- CarLocationId
- CARID
- FromLocationId
- ToLocationId
Io probabilmente includere un campo UpdateTimestamp alla tabella CarLocation.
Altri suggerimenti
Il rapporto tra auto e la posizione è: per ogni auto ci sono esattamente due posizioni (da e per), e per ogni luogo ci sono 0..n automobili
.
Si dovrebbe: make tavolo auto con campi: LocationFrom e LocationTo ciascuno è una chiave esterna a tavola Luogo che ha LocationID e LocationName (si può avere solo questi ultimi, che discutibile)
.
Perché non hai bisogno di terza tabella:. La connessione non è molti a molti - è due a molti
Quando si dispone di una vera e propria relazione molti a molti tavoli non può dire che registrano in un'indirizzi che registrano dall'altra, e quindi la necessità di una terza tabella (provarlo .. per esempio, se una si dovesse salvare tutti sedi di ogni macchina -. che sarebbe stata una relazione molti a molti, perché una macchina è legato alla 0..n località, e una posizione è correlata alla 0..n automobili ora come sarebbe in grado di dire che registrano auto è legato a quale posizione (si potrebbe avere n colonne per questo, ma questo è irragionevole, quindi è necessario un altro tavolo)) in ogni caso qui si ha solo due colonne in auto che sono legati alla posizione "direttamente".
aggiunta:
Quindi è necessario la storia così ... In questo caso è davvero necessario un tavolo extra.
Avrei aggiungere una colonna per la mia soluzione originale in modo che la macchina ora tabella ha colonne:
Id, FromLocation, TOLOCATION, LocationHistoryId
FromLocation e TOLOCATION rimane la stessa, LocationHistoryId è una chiave esterna della tabella LocationHistory che ha le seguenti colonne:
CARID, LocationID
Dove la chiave è una chiave composita che comprende entrambi i campi (e, ovviamente, punti LocationID alla tabella località)