Consigli su come strutturare database

lunedì 11 luglio 2011 - 09.19
Tag Elenco Tags  MySQL 5.5

dotnetnapo Profilo | Junior Member

Ciao raga,
mi date un consiglio su come strutturare un database? Vi spiego nei dettagli...
Devo gestire le destinazioni di un sistema di prenotazioni alberghiere, nei precedenti lavori avevo operato sempre su singole nazioni per cui non avevo avuto problemi nel gestire la cosa (es. per l'italia ho una singola tabella con circa 100 mila destinazioni), adesso però mi trovo ad operare su un progetto multinazioni e sinceramente sto impazzendo su come gestire la cosa..

Il primo dubbio è se operare su una singola tabella o su più tabelle, perchè dovrei arrivare ad avere diverse centinaia di migliaia di destinazioni...

Facciamo l'esempio dell'Italia, ma tenete presente che opero su più nazioni.

In italia abbiamo il seguente panorama:

AREE GEOGRAFICHE (nord-est, centro, ecc..)
REGIONI
AREE TURISTICHE (versilia, 5 terre ... ecc)
PROVINCE
COMUNI
FRAZIONI
QUARTIERI

Idem per altri paesi, solo che la suddivisione amministrativa è diversa, esempio in Francia abbiamo i dipartimenti al posto delle regioni e non ci sono le province.... e qui comincia il casino

Voi come fareste??? Un DB per ogni nazione o tanti DB a seconda del livello di profondità (es. AREA Liv1, REGIONE Liv2....)

Fatemi sapere, sono ben accetti i vostri preziosi consigli

Grazie

speedx Profilo | Junior Member

Ciao,



>>Ciao raga,
>>mi date un consiglio su come strutturare un database? Vi spiego nei dettagli...
>>Devo gestire le destinazioni di un sistema di prenotazioni alberghiere, nei precedenti lavori avevo operato sempre su singole nazioni per cui non avevo avuto problemi nel >>gestire la cosa (es. per l'italia ho una singola tabella con circa 100 mila destinazioni), adesso però mi trovo ad operare su un progetto multinazioni e sinceramente sto >>impazzendo su come gestire la cosa..

che database usi? spero non access....
Scartato access direi che è inutile utilizzare diversi database.

>>>Il primo dubbio è se operare su una singola tabella o su più tabelle, perchè dovrei arrivare ad avere diverse centinaia di migliaia di destinazioni...
Una o più tabelle, al dilà del database, dipende anche da quanto hai intenzione di normalizzare il dato...


>>>Facciamo l'esempio dell'Italia, ma tenete presente che opero su più nazioni.
>>>In italia abbiamo il seguente panorama:
>>>AREE GEOGRAFICHE (nord-est, centro, ecc..)
>>>REGIONI
>>>AREE TURISTICHE (versilia, 5 terre ... ecc)
>>>PROVINCE
>>>COMUNI
>>>FRAZIONI
>>>QUARTIERI

>>Idem per altri paesi, solo che la suddivisione amministrativa è diversa, esempio in Francia abbiamo i dipartimenti al posto delle regioni e non ci sono le province.... e qui >>comincia il casino

che problema è una colonna aggiuntiva valorizzata solo per la francia e non per l'italia

>>Voi come fareste??? Un DB per ogni nazione o tanti DB a seconda del livello di profondità (es. AREA Liv1, REGIONE Liv2....)
>>Fatemi sapere, sono ben accetti i vostri preziosi consigli
>>Grazie

Per me non ha senso fare un db per nazione, ne tanto meno tanti db per profontidatà o tante tabelle per profondità, soprattuto poi dovresti far ragionare l'applicazione per agganaciare un db piuttosto che l'altro.... non ha molto senso....

Mi pare e la mi non vuole essere una critica, che tu non abbia grandi basi di teorie dei database, ma che li usi come se fossero "file semplici"... c'è molto di più.

//// Marcello C.

dotnetnapo Profilo | Junior Member

Risposta senza senso... Visto che ritieni di essere così esperto invece di fare critiche potresti provare a dare qualche consiglio non credi?

In ogni caso uso MYSQL

speedx Profilo | Junior Member

Ri-ciao,
non è vero che non ti ho risposto, ho risposto punto a punto...
Io ritengo inutile l'utilizzo di più database, my sql riesce agevolmente a gestire qualche milionata di record.

Se devi gestire strutture geografiche diverse ti può bastare anche soltanto aggiugere colonne ad una tabelle e non renderle obbligatorie ad esempio nel caso dei dipartimenti in francia.

Oppure utilizzare viste per esporre il dato conforme a seconda del paese,
Oppore uscire dalla logica della geografia e passare a quella dei livelli generici di una dimensione e poi utilizzare una tabella di configurazione per "rinominare" il livello 4 in regioni nel caso italia ed in dipertimenti nel caso francia.







//// Marcello C.

dotnetnapo Profilo | Junior Member

Purtroppo in un forum ci si spiega poco, queste sono cose che ho già fatto, non sono un novellino, anche se questo non mi autorizza a ritenermi un genio....
Fino ad ora come ho detto ho sempre lavorato su una singola nazione, con viste e procedure, esempio per l'italia avevo una sola tabella destinazioni che tramite una chiave unica mi agganciava regioni, province, comuni eccc. adesso che devo lavorare su più nazioni, potrei aggiungere una seconda chiave che mi identifica la nazione e procede allo stesso modo filtrando di volta in volta la nazione.... il mio dubbio è sto lavorando nel modo giusto?
Oppure faccio tanti db per ogni nazione e aggancio automaticamente il db della nazione selezionata?

DomA Profilo | Expert

Ciao,
credo che un unico db possa bastare.
Partendo dalla tabella "Paese" potresti creare altre tabelle per Regioni, Province, Comuni e così via, per poi creare le Relazioni tra le tabelle.
Esempio.

Tabella Paese
ID (chiave primaria)
Nazione

Tabella Regione
ID (chiave primaria)
Regione
IDPaese (chiave esterna)

Tabella Province:
ID (chiave primaria)
Provincia
IDProvincia (chiave esterna)

e così via.

L'unico problema è la tabella AREE TURISTICHE. Io non sono un eserto ma credo che un'area possa comprendere più province giusto?
Ma un'area è all'interno di una sola regione?

Domenico

dotnetnapo Profilo | Junior Member

Infatti il problema è proprio sulle aree turistiche che possono comprendere più comuni di diverse province, vedi per esempio versilia comuni di massa carrara e di lucca....
Non credo che mi orienterò su un discorso geografico, in quanto in italia vi sono le province, ma in francia per esempio non ci sono

DomA Profilo | Expert

Allora ti basterà inserire nelle tabelle Comuni e Provincie un'altra chiave esterna IDArea in modo da creare una relazione di uno a molti tra la tabella Aree e le tabelle Comuni e Provincie.

Tabella Province:
ID (chiave primaria)
Provincia
IDRegione (chiave esterna)
IDArea (chiave esterna)

Tabella Comuni:
ID (chiave primaria)
Comune
IDProvincia (chiave esterna)
IDArea (chiave esterna)

In questo modo ad un'Area possono corrispondere più comuni / provincie.
Ciao,

Domenico

speedx Profilo | Junior Member

Quoto quanto detto da Dom.
Aggiungo che per performance potresti invece denormalizzare creando un unica tabella...replichi un po' il dato ma dovresti guadagnare qualcosina in performace
//// Marcello C.

DomA Profilo | Expert

Ciao,
come va col db?
Se credi di aver ricevuto la risposta, allora puoi chiudere il thread.
A presto
Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5