2010-09-11 19 views
13

Il nostro progetto di tesi di master sta creando un analizzatore di schemi di database. Come base per questo, stiamo lavorando per quantificare la progettazione del database errato.Schemi di database non validi nel mondo reale

Il nostro supervisore ci ha incaricato di analizzare uno schema del mondo reale, di nostra scelta, in modo da poter identificare alcuni/diversi problemi di progettazione. Questi problemi devono essere utilizzati come punto di partenza nell'analizzatore di schemi.

Trovare un buon schema è un po 'difficile perché non vogliamo uno schema che sia ben progettato in tutti gli aspetti, ma uno schema che è più "da raro a medio".

Abbiamo già programmato i seguenti schemi per l'analisi: wikimedia, moodle e drupal. Non sono sicuro in quale categoria si adattano. Non è necessario che lo schema sia open source.

Il motore di database utilizzato non è importante, anche se vorremmo concentrarci su server SQL, Posgresql e Oracle.

Per ora la letteratura sarà differita, poiché questo compito dovrebbe fornire esempi reali che possono essere utilizzati nella tesi. "Design X è percepito da noi come un cattivo design, che il nostro analizzatore identifica e suggerisce miglioramenti", invece di escogitare esempi forzati.

Aggiornerò questo post quando avremo una specie di strumento pronto.

+1

Per motivi di interesse, che altro si può fare che cercare moduli normali? Ci sono molte ottimizzazioni, che dipendono dall'uso, quindi suppongo che senza alcune domande non si possa veramente capire se qualcosa è ottimale o no, giusto? –

+0

Quello che troverei più interessante è la domanda se troverai effettivamente molti schemi "da intermedio a cattivo" con progetti open source ragionevolmente ben noti e sviluppati attivamente, o se gli schemi errati migliorerebbero rapidamente nel mondo open-source. – stakx

+0

non saranno migliorati rapidamente perché dovresti riscrivere tonnellate di codice, il che significa che è complicata la migrazione di un'istanza esistente. E una volta che la malattia si è diffusa, stai scrivendo hack sempre;) – sled

risposta

6

Sto lavorando a un progetto che include un sistema di informazioni geografiche. E secondo me questi disegni sono spesso "medi" o "rari".

ecco alcuni esempi:

1) Geonames.org

Potete trovare i dati e lo schema qui: http://download.geonames.org/export/dump/ (scorrere fino al fondo della pagina per lo schema, è in formato testo sul sito!)

Sarebbe interessante come questo design DB funzioni con una quantità enorme di dati!

2) OpenGeoDB

Questo è molto popolare in paesi di lingua tedesca (Germania, Austria, Svizzera) perché è un database che contiene quasi tutte le città/paese/villaggio nella regione di lingua tedesca con il CAP, nome, gerarchia e coordinate.

Questo viene fornito con uno schema .sql ei campi della tabella sono in inglese, quindi questo non dovrebbe essere un problema.

http://fa-technik.adfc.de/code/opengeodb/

La cosa interessante in entrambi gli esempi è come sono riusciti la gerarchia delle entità come Paese -> Stato -> Contea -> Centro -> Village ecc

PS: Forse si poteva giudicare la mia DB design too;) DB Schema of a Role Based Access Control

+0

Come una risposta tardiva: sia l'abbonamento Microsoft ASP.NET che il provider di ruolo (il suo schema, ma anche il codice e l'interfaccia) :) –

5

vBulletin ha uno schema di database davvero scadente.

+0

Può essere che io sia un'anatra zoppa, ma non riesco a trovare lo schema vBulletin. Sai se è possibile ottenere senza comprare una licenza? – Benjamin

+0

Non riesci a scaricare una versione di prova? Non so come ottenere lo schema, ho dovuto estrarre i dati da un sistema esistente per un cliente. Potrebbe anche essere una buona idea inviare una mail a Jelsoft. A volte funziona :) – tamasd

+1

Abbiamo trovato alcuni grafici online che abbiamo usato invece. :) Btw. immagina come sarebbe stata formulata l'email: "Gentile vBulletin, abbiamo sentito che hai un design DB davvero pessimo, share plz." – Benjamin

7

Controllare lo Dell-dvd-store, è possibile utilizzarlo gratuitamente.

Dell Negozio DVD è un open source simulazione di un sito di e-commerce online con le implementazioni di Microsoft SQL Server, Oracle e MySQL insieme con programmi del driver e applicazioni web

Bill Karwin ha scritto un grande libro sui cattivi disegni: SQL antipatterns

+0

thx per il suggerimento del libro! :) – sled

3

"stiamo lavorando per quantificare la progettazione del database errato."

Mi sembra che tu stia sviluppando un modello, un processo o un apparato, che prende uno schema relazionale come input e lo classifica per la qualità.

vi invito a riflettere quanto segue:

Può uno schema fisico essere "cattivo", mentre lo schema logico è comunque "estremamente buona"? Hai intenzione di distinguere correttamente tra "schema logico" e "schema fisico"? Come sogni di riuscirci?

Come si decide che un determinato aspetto del design fisico è "cattivo"? Prendiamo ad esempio l'assenza di qualche indice. Se il relvar che quel "indice presumibilmente desiderabile" deve essere acceso, è esso stesso costretto a essere un singleton, allora quali effetti dannosi l'assenza di quell'indice causa per il sistema? Se non ci sono tali effetti dannosi, allora quali basi ci sono per qualificare l'assenza di un indice come "cattivo"?

Come si decide che un determinato aspetto del design logico è "cattivo"? Le scelte nella progettazione logica vengono eseguite in base a quali sono i requisiti effettivi. In che modo puoi esprimere un giudizio su un progetto logico, senza un modo formalizzato e leggibile da una macchina per specificare quali sono i requisiti effettivi?

3

Wow - hai un progetto ambizioso davanti a te. Determinare ciò che è un buon progetto di database può essere impossibile, tranne che per principi e linee guida ampiamente compresi.

Ecco alcune idee che mi vengono in mente:

Io lavoro per una società che fa di gestione di database per alcune grandi imprese di vendita al dettaglio. Disponiamo di database personalizzati progettati per ciascuna di queste società, in base a come intendono utilizzare i dati (per la posta diretta, le campagne di posta elettronica, ecc.) E il tipo di parametri di analisi e selezione che preferiscono utilizzare. Ad esempio, un'azienda che vende attrezzature musicali nei negozi e online vuole distinguere tra clienti walk-in e online, classifica i clienti in base al tipo di articoli acquistati (batteria, chitarre, microfoni, tastiere, strumenti di registrazione, amplificatori, ecc.) e tenere traccia di quanto hanno speso e di ciò che hanno acquistato, negli ultimi 6 mesi o nell'ultimo anno. Usano queste informazioni per decidere chi riceverà i cataloghi per posta. Questi mailing sono molto costosi; forse uno o due dollari per cliente, quindi la compagnia vuole spedire i cataloghi solo a quelli che sono più propensi ad acquistare qualcosa. Possono avere 15 milioni di clienti nel loro database, ma solo 3 milioni comprano la batteria, e solo 750.000 hanno acquistato qualcosa nell'ultimo anno.

Se dovessi analizzare il database che abbiamo creato, troverai molte tabelle "di lavoro", che sono utilizzate per specifici scopi di selezione, e che potrebbero non essere effettivamente progettate correttamente, secondo i principi di progettazione del database. Mentre le tabelle "principali" sono progettate in modo efficiente e hanno relazioni e indici corretti, queste tabelle "di lavoro" farebbero sembrare che l'intero database sia mal progettato, quando in realtà le tabelle di lavoro possono essere utilizzate solo poche volte o addirittura solo una volta, e non siamo ancora entrati per eliminarli o lasciarli cadere.Le tabelle di lavoro superano di gran lunga le tabelle principali in questo particolare database.

Si deve anche tenere conto del volume dei dati gestiti. Una base clienti di 10 milioni può avere una numerazione dei dati delle transazioni da 10 a 20 milioni di transazioni a settimana. O al giorno. A volte, per gestibilità, questi dati devono essere suddivisi in partizioni in tabelle per intervallo di date, quindi una visualizzazione verrà utilizzata per selezionare i dati dalla tabella secondaria appropriata. Questo è efficiente per questo volume enorme, ma può sembrare ripetitivo per un analizzatore automatico.

L'analizzatore dovrebbe essere configurabile dall'utente prima dell'inizio dell'analisi. Alcuni articoli devono essere saltati, mentre altri possono essere assolutamente critici.

Inoltre, come si analizzano le stored procedure e le funzioni definite dall'utente, ecc.? Ho visto un codice davvero brutto che funziona in modo abbastanza efficiente. E, alcuni dei codici più brutti e inefficienti sono stati scritti solo per un uso singolo.

OK, non ho idee per il momento. Buona fortuna con il vostro progetto.

+0

è una specie di software OLAP Cube? :) – sled

0

Se si riesce a comprenderlo, il sistema di gestione dei progetti Clarity ha un design di database orribile. Non so se hanno una versione di prova che è possibile scaricare.

Problemi correlati