Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    35

    [Progettazione] Più chiavi esterne o una unica tabella?

    Ciao a tutti,
    l'esempio è molto specifico dunque cercherò di rappresentarlo con un "modello parallelo" più chiaro e comprensibile:

    Queste sono le tabelle che ho attualmente in un db:
    quartiere (id_quartiere, nome, ecc. ecc.)

    via (id,_via, nome, ecc ecc.)
    palazzo (id_palazzo, nome, ecc. ecc.)
    appartamento (id_appartamento, numero, ecc. ecc)

    Da analisi logica del sistema posso affermare che: quartiere contiene (relazione 1 a N) le vie; una via contiene (1 a N) i palazzi; un palazzo contiene (1 a N) gli appartamenti.


    Devo fare diverse interrogazioni su queste tabelle e sulla loro relazione (ad esempio il nome del quartiere di un dato palazzo; oppure la via dove si trova un tale appartamento; ecc. ecc.).

    Secondo voi è meglio (per favore giustificatemi la risposta):

    SOLUZIONE A: legare in modo "scalare" le tabelle ovvero tramite chiavi esterne le singole tabelle: appartamento - palazzo; palazzo - via; via - quartiere

    oppure

    SOLUZIONE B: creare un'unica tabella con 4 campi contenenti gli indici delle altre...


    Nella prima ipotesi credo che sia più "snello" a livello di gestione delle query e potrei distribuire il carico di lavoro su più tabelle inoltre aggiungendo anche altre chiavi esterne -seppur ridondanti - potrei velocizzare e semplifichino il lavoro di ricerca

    Nella seconda soluzione però avrei tutto in una sola tabella con costi di manutenzione futuri più leggeri e possibilità di riorganizzare i dati molto più duttile nel caso di un ampliamento del sistema.

    Concludo aggiungendo che anche se il tutto è espresso solo logicamente dovrebbe poi fisicamente girare su un MYSQL.

    Grazie fin da ora a tutti per l'aiuto: mi sto logorando con questo quesito e magari è più facile di quel che penso (io sono comunque orientato alla prima soluzione)

    Ciao
    Luca

  2. #2
    Quote Originariamente inviata da lpn Visualizza il messaggio
    Ciao a tutti,
    l'esempio è molto specifico dunque cercherò di rappresentarlo con un "modello parallelo" più chiaro e comprensibile:

    Queste sono le tabelle che ho attualmente in un db:
    quartiere (id_quartiere, nome, ecc. ecc.)

    via (id,_via, nome, ecc ecc.)
    palazzo (id_palazzo, nome, ecc. ecc.)
    appartamento (id_appartamento, numero, ecc. ecc)

    Da analisi logica del sistema posso affermare che: quartiere contiene (relazione 1 a N) le vie; una via contiene (1 a N) i palazzi; un palazzo contiene (1 a N) gli appartamenti.


    Devo fare diverse interrogazioni su queste tabelle e sulla loro relazione (ad esempio il nome del quartiere di un dato palazzo; oppure la via dove si trova un tale appartamento; ecc. ecc.).

    Secondo voi è meglio (per favore giustificatemi la risposta):

    SOLUZIONE A: legare in modo "scalare" le tabelle ovvero tramite chiavi esterne le singole tabelle: appartamento - palazzo; palazzo - via; via - quartiere

    oppure

    SOLUZIONE B: creare un'unica tabella con 4 campi contenenti gli indici delle altre...


    Nella prima ipotesi credo che sia più "snello" a livello di gestione delle query e potrei distribuire il carico di lavoro su più tabelle inoltre aggiungendo anche altre chiavi esterne -seppur ridondanti - potrei velocizzare e semplifichino il lavoro di ricerca

    Nella seconda soluzione però avrei tutto in una sola tabella con costi di manutenzione futuri più leggeri e possibilità di riorganizzare i dati molto più duttile nel caso di un ampliamento del sistema.

    Concludo aggiungendo che anche se il tutto è espresso solo logicamente dovrebbe poi fisicamente girare su un MYSQL.

    Grazie fin da ora a tutti per l'aiuto: mi sto logorando con questo quesito e magari è più facile di quel che penso (io sono comunque orientato alla prima soluzione)

    Ciao
    Luca

    opterei per la prima soluzione per un concetto di normalizzazione , molto importante in un progetto che si rispetti.

    Una prima spiegazione: http://www.mrwebmaster.it/sql/normal...base_7420.html
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    35
    Normalizzazione sicuro... anche le eventuali chiavi ridondanti verrebbero inserite solo dopo uno studio dei volumi e del carico di lavoro delle operazioni di esecuzione.

    Altre giustificazioni della scelta?

  4. #4
    Quote Originariamente inviata da lpn Visualizza il messaggio
    Normalizzazione sicuro... anche le eventuali chiavi ridondanti verrebbero inserite solo dopo uno studio dei volumi e del carico di lavoro delle operazioni di esecuzione.

    Altre giustificazioni della scelta?

    chiavi ridondanti?

    quali?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Certamente devi usare la soluzione A

    _____________________________________________

    Facciamo l'esempio di Regioni e Citta Caso A
    ---- Regioni
    NomeReg ------ IDReg
    Lazio ----------- 1
    Lombardia ------ 2

    ---- Citta
    NomeCitta ---- IDCitta ----- IDReg
    Milano ---------- 1 -----------1
    Brescia --------- 2 ---------- 1
    Roma ----------- 3 ---------- 2
    Latina -----------4 ---------- 2


    La citta di Milano puo essere associata solamente a 1 regione
    ( potrai sbagliare ma è solo un errore di digitazione )

    ______________________________________________

    Lo stesso esempio nel caso B
    ---- Regioni
    NomeReg ------ IDReg
    Lazio ----------- 1
    Lombardia ------ 2

    ---- Citta
    NomeCitta ---- IDCitta
    Milano ---------- 1
    Brescia --------- 2
    Roma ----------- 3
    Latina -----------4

    ----- La Tabella di unione
    IDReg ------- IDCitta
    --- 1 ---------- 3
    --- 1 ---------- 4
    --- 2 ---------- 1
    --- 2 ---------- 2
    --- 1 ---------- 1 <------- Errore

    Hai associato la citta di Milano alla Lombardia e al Lazio cosa che chiaramente non è reale,
    ( questo non è solo un errore di digitazione ma bensi un errore di progettazione
    perche il DB ti dice che Milano sta contemporaneamente in Lombardia e in Lazio)


    ____________________________________________
    Il caso B è tipico della relazione Molti a Molti

    Fai una ricerca su Google sulla "Normalizzazione dei DB"

    ____________________________________________
    Ultima modifica di nman; 09-10-2013 a 21:05

  6. #6
    ok per la 1, tenendo presente che - nel caso specifico - una via potrebbe far parte di più quartieri

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.