2009-12-02 15 views
6

Sto lavorando su un sito di social networking con un albero genealogico conforme a GEDCOM. Dobbiamo decidere se utilizzare una struttura di database orizzontale o verticale per i profili utente. Quindi, vorrei sapere se qualcuno può rispondere quando utilizzare una struttura di database orizzontale e quando utilizzare la struttura del database verticale.Database orizzontale e database verticale

Ho trovato alcune risposte per i siti di shopping in cui i campi non sono stati decisi: deve essere utilizzata una struttura di database verticale. Ma sono confuso su cosa usare per un sito genealogico. Dovrei usare verticale o orizzontale?

risposta

8

Suppongo che si utilizzi un database relazionale come Mysql, Ms sql, Sqlite, Postgresql o Oracle per l'archiviazione?

Gedcom è uno standard per lo scambio di informazioni in modo da sapere quante colonne avrete. Forse lo standard verrà esteso con nuove proprietà in futuro, ma probabilmente non ci saranno molte nuove proprietà. Puoi facilmente estendere una tabella con alcune nuove colonne.

Vorrei utilizzare una tabella "orizzontale" e non un sistema di valori di attributo di entità (tabella verticale). I sistemi di tavoli verticali tendono ad essere lenti. Non possono essere indicizzati correttamente e confondere il Query Optimizer.

Diventa una storia diversa quando i tuoi utenti possono definire nuove proprietà nei loro profili come eye colo (u) r o colo (u) r stessi. Quanto vuoi che siano quei profili flessibili?

+0

sto usando SQL Server 2008. e l'utente non potrà aggiungere nuove proprietà. – Radhi

0

Sono d'accordo con tuinstoel, il tavolo verticale/sistema EAV non è solo lento ma anche un po 'di tempo molto complesso. A volte è necessario scrivere alcuni dei propri metodi API che si occupano di quelle tabelle e gli sviluppatori si occupano solo di questi metodi per evitare la complessità.

Quindi, se non è necessario aggiungere altri campi, continuare con la tabella orizzontale. Tuttavia potrebbe essere necessario disporre di una tabella diversa se anche se si intende supportare funzionalità multilingue. Ma consiglio di rimanere sempre con i tavoli orizzontali.

Sto anche sviluppando un sito che coinvolge il profilo utente e sto usando tabelle orizzontali e se in futuro ci sarà bisogno di supporto per lingue diverse, modificherò solo per i campi in cui la lingua avrà importanza.

3

I database verticali sono ideali per la distribuzione di documenti e la lettura/segnalazione. Normalmente li ri-generi durante la notte. Le loro prestazioni in scrittura sono generalmente molto scarse, tuttavia gli SELECTs sono 10-100 volte più veloci.

Uno scenario tipico per l'utilizzo di un database verticale è il report olap quando si crea uno snapshot (giornaliero) di dati e quindi si eseguono query su di esso. La maggior parte dei vantaggi deriva dalle query che richiedono solo un numero relativamente piccolo di campi, ad es. quando selezioni solo una manciata di campi da una tabella larga e larga. Tale query di query su milioni di record (ad esempio il calcolo di SUM/COUNT/AVG) richiederà solo un secondo o due.

Il tuo caso non sembra essere un buon candidato per un database verticale.