Domanda

Sono interessato a conoscere gli strumenti che operano in questo modo:

Dato uno schema di database e di alcuni dati, suggeriscono se lo schema è probabile strutturato in una particolare forma normale, e poi dire come lo schema potrebbe essere preso in considerazione per la produzione di ulteriore normalizzazione.

In sostanza, uno strumento di analisi statica per la progettazione dello schema del database.

Come altri strumenti di analisi statica, un tale strumento di database deve non genera un risultato perfetto (dubito un tale strumento "perfetto" è computazionalmente fattibile), o applicabile a tutti i sistemi di database, o libero / open source, o qualsiasi altra cosa. Lo strumento non deve essere stand-alone; potrebbe essere fornito in bundle alcuni sofisticata funzione di IDE. Mi chiedo solo cosa c'è là fuori.

È stato utile?

Soluzione

Si può fare, e ci sono almeno 2 strumenti commecially disponibili che possono fare la normalizzazione per voi: GeneXus e DeKlarit. Essi utilizzano un processo chiamato NormalizationBySynthesis

Altri suggerimenti

Uno strumento come lei descrive, che ha cercato di analizzare i dati e metadati e di consigliare possibile Struttura non normalizzata, darebbe suggerimenti errati così frequentemente che sarebbe rendere Clippy, l'assistente di Microsoft sembrare l'aiuto di uno scrittore indispensabile.

entrare descrizione dell'immagine qui

Il processo di normalizzazione comporta requisiti software di mappatura ad un modello logico dei dati. Uno strumento di analisi non può conoscere i vostri requisiti di dati qualsiasi meglio di te. Quindi non si può dedurre da una progettazione di database non corretta che parti di esso sono sbagliati.

Capisco che si sono qualificati alla domanda e si hanno limitato le aspettative per la capacità dello strumento. Ma si vuole che sia utile per i compiti quotidiani e ordinari -. Ma non sarebbe affidabile anche per i casi più semplici

Confronto di strumenti di analisi statica del codice. Supponiamo che si scrive un'applicazione e consegnarla al vostro cliente, e il cliente dice "perché non è possibile inviare e-mail da questa applicazione?" Come sarebbe uno strumento di analisi statica del codice dirvi che avete omesso una funzione desiderata? Esso non può conoscere tali requisiti.

Allo stesso modo, come sarebbe uno strumento di analisi del database normalizzazione sapere se è opportuno per la tavola UserAccount di avere un singolo attributo MobilePhoneNumber, o se sarebbe più opportuno separare i numeri di telefono in un'altra tabella per cui un singolo utente potrebbe avere più telefoni elencati ?

Ci ho pensato anche questo problema. E 'theoritically possibile e ci sono alcuni articoli di ricerca su questo argomento. ha usato per essere strumento piuttosto fresco a www.dbtools.cs.cornell.edu. Questo è stato sviluppato dal famoso autore Raghu Ramakrishnan. Attualmente è a Yahoo Research. È possibile fare riferimento ai seguenti documenti per ulteriori informazioni

  1. Diederich, T. e Miton, J., (1988), "nuovi metodi e algoritmi veloci per la normalizzazione del database", le transazioni ACM su sistemi di database, 13 (3), 339-365.
  2. Bernstein, P. A. (1986), "la sintesi di terzi forma normale Relazioni da dipendenze funzionali", transazioni ACM su sistemi di database, Vol.1. No. 4, pp 277-298.
  3. JMathNorm: Una normalizzazione dei database strumento Utilizzando Mathematica, Lecture Notes in Computer Science; Vol. 4488, Atti del 7 ° Conferenza Internazionale sulla Scienza Computazionale, parte II, Ali Yazici, Ziya Karakaya

Il terzo anello è molto interessante. Ecco l'estratto del foglio:

  

Questa carta è sulla progettazione di un   strumento interattivo completo, di nome   JMathNorm, per il database relazionale   (RDB) normalizzazione utilizzando Mathematica.   Si tratta di un'estensione del prototipo   sviluppato dagli stessi autori [1] con   l'inclusione di Seconda forma normale   (2NF), e Boyce-Codd forma normale   (BCNF) in aggiunta alla già esistente   Modulo terza forma normale (3NF). Il   strumento sviluppato in questo studio è   completare e può essere utilizzato in tempo reale   progettazione di database, nonché un aiuto   insegnare concetti fondamentali del DB   normalizzazione per gli studenti con limitata   background matematico. JMathNorm   supporta anche l'uso interattivo di   moduli per sperimentare la   operazioni insiemistiche fondamentali quali   chiusura e chiusura completa insieme   con moduli per ottenere il minimo   copertura del set dipendenza funzionale   e collaudo attributo per un   chiave candidata. GUI di JMathNorm   interfaccia è scritto in Java e   utilizza impianto JLink di Mathematica   a guidare il kernel di Mathematica.

Sono molto interessato a una risposta a questa domanda anche. Se qualcuno ha incontrato uno strumento, fatecelo sapere!

L'open-source strumento SchemaSpy rileva alcune "anomalie", come "Tabelle senza indici" o "Le colonne che vengono contrassegnati come sia 'annullabile' e 'deve essere unico'". Una di queste anomalie è "Le tabelle con incremento nomi delle colonne, potenzialmente indicando denormalizzazione"

http://schemaspy.sourceforge.net/

Credo che sia difficile da attuare.

Come, un tavolo

Id | Name | Surname | SSN 

è in 1NF, e

Id | Name | Surname | Mobile

non è, ma si può dire che né dal disegno né dai dati, solo dal nome del campo.

Ho visto una volta un database per ecografia che in realtà aveva sia GENDER e LMP (ultimo periodo mestruale) in una tabella.

Non si può fare.

normalizzazione viene definito in termini di dipendenze funzionali che

  1. non può essere espressa in SQL
  2. non può essere dedotta dai dati

Si può guardare a un tavolo come

A | B
--+--
1 | 1
1 | 2

e dedurre che B è non dipende da A (perché ha due valori distinti per un singolo valore di A), ma non si può mai dedurre che una dipendenza non esistono, ad esempio Una può o non può dipendere da B.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top