2010-08-27 17 views
5

Se dovessi rappresentare, ad esempio, località (ad es. Paesi, stati/province/regioni, città, ecc.) In un database, come farei in modo tale che sia più facile interrogare, ridimensionare al massimo , eccetera.? Ho intenzione di usarlo per un'applicazione che permetterà agli utenti di selezionare più posizioni e associarle al loro profilo.Come progettare DB con relazioni padre-figlio?

La soluzione che viene in mente è questa:

=========================== 
| Id | ParentId | Name | 
=========================== 
| 1 | 0  | USA  | 
--------------------------- 
| 2 | 1  | Alabama | 
--------------------------- 

mi chiedo se ci sono eventuali problemi con una soluzione del genere. Grazie.

risposta

3

Se si conoscono i diversi tipi di articoli (paesi di stato città), è necessario creare tabelle separate. Metterli tutti in una tabella renderà più difficile la query.

Se si utilizzano tipi di tabella diversi, è possibile applicare l'integrità referenziale, in modo da non ottenere orfani.

Pensa ai bambini!

+0

È possibile applicare l'integrità referenziale in un self join. Dovresti semplicemente stabilire una regola per le righe senza i riferimenti dei genitori, o loro stessi o un record "di root" designato. –

+2

Non penso di conoscere tutti i diversi tipi di articoli. Paesi diversi dividono le sezioni geografiche in modo diverso. Ho bisogno di un design che supporti n livelli di gerarchia. – StackOverflowNewbie

+0

@StackOverflowNewbie - Vedo, quindi il tuo design è buono e ha senso. Ma il downvoter dovrebbe preoccuparsi di spiegare? Non ho potuto indovinare il suo commento prima di pubblicare la mia risposta ... –

0

Questo sembra abbastanza adatto alla scalabilità, tuttavia potrei includere una colonna aggiuntiva per identificare la riga/voce effettiva (tipo di entità se lo si desidera).

Ciò consentirà di eseguire query in base alla selezione (Paese, città, ecc.). Potresti scoprire che l'irradiazione può causare qualche sofferenza, visto che l'intera struttura si troverà in una singola tabella e non sai la profondità per iniziare.

Alla fine, il progetto dipenderà dal numero noto di sottosezioni che potreste avere, e se tale normalizzazione potrebbe in effetti rendere la vita più difficile, piuttosto che non.

+0

e se non sapessi in anticipo quali "tipi" ho? – StackOverflowNewbie

0

Io uso qualcosa di simile e ho avuto molto successo con esso. Un recente Question of mine potrebbe tornare utile.

In alcuni casi (come questo) non desidero essere legato a una struttura di tabella. L'autoreferenzialità può essere una grande cosa. Non capisco perché sia ​​così accettabile avere strutture ad albero che usano lo stesso tipo di oggetto nel codice, ma è evitato dai programmatori quando si tratta di database.

0

A seconda del pubblico, si consiglia inoltre di separare i valori del nome in base al tipo in modo che possano essere localizzati senza duplicare la struttura gerarchica.

+0

puoi elaborare per favore? Anche le coppie nome/valore nel design DB presentano i propri problemi. – StackOverflowNewbie

Problemi correlati