2009-02-12 20 views
9

estoy interesado en aprender acerca de las herramientas que funcionan de esta manera:¿Comprobador de normalización de esquema de base de datos?

Dado un esquema de base de datos y algunos datos sugieren si el esquema es probable estructurado en cualquier forma normal, en particular, y luego dice cómo el esquema podría ser un factor a producir una mayor normalización.

Básicamente, una herramienta de análisis estático para el diseño de esquema de la base de datos.

Al igual que otras herramientas de análisis estático, una herramienta de base de datos no es necesario generar un resultado perfecto (dudo que una herramienta tan "perfecto" es computacionalmente factible), o aplicables a todos los sistemas de bases de datos, o de código libre/abierto, o cualquier otra cosa. La herramienta no necesita ser independiente; podría agruparse como una característica IDE sofisticada. Solo me pregunto qué hay ahí fuera.

Respuesta

6

Se puede hacer, y hay al menos 2 herramientas disponibles comercialmente que pueden hacer la normalización para usted: GeneXus y DeKlarit. Ellos usan un proceso llamado NormalizationBySynthesis

0

No se puede hacer.

La normalización se define en términos de dependencias funcionales cuales

  1. no se puede expresar en SQL
  2. no se puede deducir de los datos

Usted puede mirar en una mesa como

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

y deduzca que B es no depende de A (porque tiene dos valores distintos para un valor único de A), pero nunca puede deducir que existe una dependencia , p. A puede o no depender de B.

+0

Tenga en cuenta que no estoy en busca de cualquier herramienta perfectamente correcta, de hecho, me he clasificado mi pregunta para excluir esa posibilidad Quizás la herramienta podría considerar una codificación de tales dependencias funcionales también. –

+1

Pero si tiene una tabla con 1 millón de filas donde B es 2 cuando A es 1 para 99.9999% de las filas (tal vez hay un error allí, y todos los valores B deben ser 2), y B nunca es 2 para ninguna otra valor de A, puede que le guste una herramienta que lo señale para que pueda considerarlo. –

0

Creo que es difícil de implementar.

Al igual que, una mesa

Id | Name | Surname | SSN 

está en 1NF, y

Id | Name | Surname | Mobile 

no lo es, pero se puede decir que ni del diseño ni de datos, sólo a partir del nombre del campo.

He visto una vez una base de datos para la ecografía que en realidad tenía GENDER y LMP (último período menstrual) en una misma tabla.

+1

Ambos ejemplos están en 1NF. ¿Te refieres a 2NF? – finnw

+0

No es solo difícil, es probablemente computacionalmente imposible. Pero puede crear una imagen de un análisis que determine que cualquier entrada no NULA de LMP es altamente probable que esté relacionada con una entrada de GÉNERO 'Femenino' (algunos errores de entrada de datos podrían haber marcado el casillero 'Hombre' por accidente). Piense Heurística aquí ... –

+0

@finnw: uno puede tener más de un número de teléfono móvil. Es un ejemplo clásico de Wikipedia :) – Quassnoi

6

Una herramienta como usted describe, que trató de analizar los datos y metadatos y aconsejarle de posible estructura no normalizada, daría sugerencias equivocadas con tanta frecuencia que haría Clippy, el asistente Microsoft parecer una indispensable ayuda del escritor.

enter image description here

El proceso de normalización implica requisitos de software de mapeo para un modelo de datos lógico. Una herramienta de análisis no puede conocer sus requisitos de datos mejor que usted. Por lo tanto, no se puede inferir de un diseño de base de datos incorrecto qué partes están equivocadas.

Entiendo que ha calificado la pregunta y que tiene expectativas limitadas sobre la capacidad de la herramienta.Pero desearía que fuera útil para tareas cotidianas comunes, pero no sería confiable incluso para los casos más simples.

Comparar con herramientas de análisis de código estático. Supongamos que escribe una aplicación y la entrega a su cliente, y el cliente dice "¿por qué no puedo enviar un correo electrónico desde esta aplicación?" ¿Cómo podría una herramienta de análisis de código estático decirle que omitió una función deseada? No puede conocer esos requisitos.

Del mismo modo, ¿cómo sería una herramienta de análisis de la normalización de bases de datos saber si es apropiado para la mesa UserAccount que tiene un solo atributo MobilePhoneNumber, o si sería más apropiado para separar los números de teléfono en otra mesa para un solo usuario puede tener varios teléfonos enumerado?

+1

Encontré esta referencia a un artículo: http://www.actapress.com/PaperInfo.aspx ? PaperID = 28880 & reason = 500 Sugiere que al menos alguien más piensa que es posible crear algo útil en este espacio :) Es un trabajo de investigación, por lo que no sé qué tan práctica es la solución. –

+0

wrt números de teléfono, una herramienta podría detectar tablas con varias columnas de números de teléfono, ya sea al detectar la cadena "phonenumber" se repite en nombres de columna, o al detectar que los datos son del mismo formato, longitud, etc. –

+0

Cualquiera de estas herramientas o las técnicas tendrían una alta tasa de "falsos positivos". Sería más preciso, confiable y rentable que un ser humano haga el trabajo de diseño. –

3

También he pensado en este problema. Es teóricamente posible y hay algunos trabajos de investigación sobre este tema. solía haber una herramienta muy buena en www.dbtools.cs.cornell.edu. Esto fue desarrollado por el famoso autor Raghu Ramakrishnan. Actualmente se encuentra en Yahoo Research. Puede consultar los siguientes documentos para obtener más información

  1. Diederich, T. y Miton, J., (1988), "Nuevos métodos y algoritmos rápidos para la normalización de la base de datos", ACM Transactions on Database Systems, 13 (3), 339-365.
  2. Bernstein, P. A. (1986), "Sintetizar relaciones de tercera forma normal a partir de dependencias funcionales", Transacciones de ACM en sistemas de bases de datos, Vol.1. No. 4, pp 277-298.
  3. JMathNorm: Una herramienta de normalización de base de datos que utiliza Mathematica, Notas de conferencia en informática; Vol. 4488, Actas de la 7ma conferencia internacional en ciencia computacional, parte II, Ali Yazici, Ziya Karakaya

El tercer enlace es muy interesante. Aquí está el resumen de la ponencia:

En este documento se trata de diseñar una herramienta interactiva completa, llamado JMathNorm, para la normalización de datos relacional (RDB) utilizando Mathematica. Es una extensión del prototipo desarrollado por los mismos autores [1] con la inclusión de Segunda forma normal (2NF), y Boyce Codd-Forma Normal (BCNF) además de la forma normal Tercera existente (3NF) módulo. La herramienta desarrollado en este estudio es completa y se puede utilizar en tiempo real diseño de base de datos, así como una ayuda en la enseñanza de conceptos fundamentales de DB normalización a los estudiantes con conocimientos limitados formación matemática. JMathNorm también es compatible con el uso interactivo de módulos para experimentar los operaciones de conjuntos fundamentales como cierre, y el cierre completo junto con módulos para obtener la mínima portada de la dependencia funcional establecido y prueba de un atributo para una clave candidato. La interfaz GUI de JMathNorm está escrita en Java y utiliza la instalación JLink de Mathematica para controlar el núcleo de Mathematica.

También estoy muy interesado en responder a esta pregunta. Si alguien ha encontrado una herramienta, ¡por favor háganos saber!

+0

Gran información - ¡Gracias! –

+2

Hace aproximadamente 20 años implementé el proceso descrito en el documento de Bernstein como un proyecto de pregrado. La entrada al programa es el conjunto de Dependencias Funcionales (FD) para su base de datos. La salida fue un esquema normalizado. El problema con este enfoque es que las personas que entienden los FD no tienen problemas para desarrollar un esquema normalizado, y aquellos que no entienden los FD no pueden juntar las entradas para el programa de todos modos. Lamentablemente, la única copia que me queda está en un disquete de 5,25 pulgadas, y no hay forma de leerlo. – NealB

+0

@NealB ¿Has probado eBay? – Mawg

2

La herramienta de código abierto SchemaSpy detecta algún "anomalías", como "Tablas sin índices" o "columnas que están marcados como ambos 'anulable' y 'debe ser único'". Una de estas anomalías es "Tablas con incrementando nombres de columna, indicando potencialmente desnormalización"

http://schemaspy.sourceforge.net/

+0

+1 @balazscs - eso es ciertamente útil – Mawg

Cuestiones relacionadas