2012-06-10 2 views
7

Ho bisogno di aiuto per progettare le tabelle del mio paese, città, stato. Fornirò dati di esempio dal mio tavolo in modo che tu possa aiutarmi meglio sul mio problema.qual è il modo migliore per progettare una città, stato, tabella di paese?

Questo è il mio tavolo Paese:

Country 
______ 
code name 
US  United States 
SG  Singapore 
GB  United Kingdom 

Questo è il mio tavolo da città:

City 
_____ 
id country city  state 
1 US  Birmingham Alabama 
2 US  Auburn  Alabama 
. 
. 
29 GB  Cambridge NULL 
30 GB  Devon  NULL 

mio problema è che l'unico paese che ha il campo Stato è negli Stati Uniti. Tutte le altre città hanno un valore nullo.

La mia soluzione temporanea per questo è solo creare un tavolo speciale per gli Stati Uniti, quindi tutti gli altri paesi hanno un'altra tabella di città che non ha il campo stato.

Penso che questo complicherà la faccenda, perché ho due tavoli per le città.

Come posso migliorare questo design?

+0

Soluzione scarna e sporca è scaricare Virtuemart e utilizzare le tabelle paese/stato da quelle: ha più di 200 contee e tutti gli stati correlati, quindi aggiungi le tue città – GDP

risposta

2

Perché non un set di tabelle collegate a 3 vie standard?

table country (
    id int primary key, 
    name varchar(255) 
); 

table state (
    id int primary key, 
    name varchar(255), 
    country_id int foreign key country (id) 
); 

table city (
    id int primary key, 
    name varchar(255) 
    state_id int foreign key state (id) 
); 

Questo ti reggere maggior parte dei casi, ad eccezione di alcune fra le più degenerati come Lloydminster, Saskatchewan, che si trova a cavallo di due confini provinciali.

+0

ciao, il tavolo della città ha ancora lo stato_id. cosa succede se la città non ha lo stato? cosa accadrà? ho davvero problemi a pensare in tavoli a tre vie. mi fa male alla testa –

+0

Cosa devo fare se lo stato id_della tabella della città non ha valore? –

+0

Una città che esiste senza uno stato? per esempio. Singapore? –

5

Perché non diventare relazionale?

Country (CountryID, CountryCode, CountryName) 
Region (RegionID, RegionCode, RegionName, CountryID) 
City (CityID, CityCode, CityName, RegionID) 

Il nome 'Regione' è un grande più generico di Stato, il che significa che sarebbe probabilmente più senso in tutto il mondo.

+0

ic, ok per favore cambialo nella regione. grazie per i suggerimenti –

0

Ci sono molti paesi oltre agli Stati Uniti che hanno divisioni politiche tra livello nazionale e municipale. L'Australia ha Stati, il Canada ha province, il Giappone ha prefetture e così via.

La domanda è: come si traccia questa informazione e si mantiene coerente? Potresti avere un "dummy record" a livello medio per i paesi che non ne hanno uno. Un altro modo per gestire ciò è denormalizzare le chiavi esterne a tutti i livelli fino all'entità che contiene l'indirizzo. Se il paese e la città sono obbligatori, le loro chiavi esterne non saranno annullabili, mentre il tuo stato FK potrebbe essere annullabile.

Se si passa al percorso di denormalizzazione, è necessario disporre della logica dell'applicazione per garantire che le proprie chiavi esterne siano coerenti tra loro.

Se si esegue il percorso del record di stato fittizio, è necessario disporre della logica dell'applicazione per garantire che i livelli fittizi siano nascosti agli utenti nell'interfaccia utente.

+0

sì, il mio piano è quello di normalizzare questo. il mio primo obiettivo è ottenere tutti gli stati per gli Stati Uniti. quindi aggiungerò gli stati in Australia in futuro. Ho bisogno di un design da tavolo flessibile che possa gestire i cambiamenti in futuro –