database - relacional - obtener esquema de base de datos oracle
¿Comprobador de normalización de esquema de base de datos? (6)
Estoy interesado en aprender sobre herramientas que operan así:
Dado un esquema de base de datos y algunos datos, sugiera si el esquema probablemente está estructurado en una forma normal particular, y luego explique cómo se puede factorizar el esquema para 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, dicha herramienta de base de datos no necesita generar resultados perfectos (dudo que una herramienta "perfecta" sea computacionalmente factible), o aplicable a todos los sistemas de bases de datos, a fuentes libres / abiertas, 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.
Creo que es difícil de implementar.
Como, una mesa
Id | Name | Surname | SSN
está en 1NF, y
Id | Name | Surname | Mobile
no lo es, pero no puede decirlo ni desde el diseño ni desde los datos, solo desde el nombre del campo.
He visto una vez una base de datos para la ecografía que en realidad tenía tanto GENDER
como LMP
(último período menstrual) en una sola tabla.
No se puede hacer.
La normalización se define en términos de dependencias funcionales que
- No se puede expresar en SQL
- No se puede inferir de los datos
Puedes mirar una tabla como
A | B
--+--
1 | 1
1 | 2
y deducir que B no depende de A (porque tiene dos valores distintos para un solo valor de A), pero nunca se puede deducir que existe una dependencia, por ejemplo, A puede depender o no de B.
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
- 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.
- Bernstein, PA (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.
- 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 sobre ciencias computacionales, parte II, Ali Yazici, Ziya Karakaya
El tercer enlace es muy interesante. Aquí está el resumen del documento:
Este documento trata sobre el diseño de una herramienta interactiva completa, llamada JMathNorm, para la normalización de bases de datos relacionales (RDB) utilizando Mathematica. Es una extensión del prototipo desarrollado por los mismos autores [1] con la inclusión de la segunda forma normal (2NF) y la forma normal de Boyce-Codd (BCNF) además del módulo de tercera forma normal existente (3NF). La herramienta desarrollada en este estudio es completa y puede utilizarse para el diseño de bases de datos en tiempo real y como una ayuda para enseñar los conceptos fundamentales de la normalización de DB a estudiantes con antecedentes matemáticos limitados. JMathNorm también admite el uso interactivo de módulos para experimentar las operaciones de conjuntos fundamentales como el cierre y el cierre completo junto con módulos para obtener la cobertura mínima del conjunto de dependencia funcional y probar un atributo para una clave candidata. La interfaz GUI de JMathNorm está escrita en Java y utiliza la función JLink de Mathematica para controlar el núcleo de Mathematica.
También estoy muy interesado en una respuesta a esta pregunta. Si alguien ha encontrado una herramienta, ¡por favor háganos saber!
Se puede hacer, y hay al menos 2 herramientas disponibles en el mercado que pueden hacer la normalización para usted: GeneXus y DeKlarit. Usan un proceso llamado NormalizationBySynthesis
La herramienta de código abierto SchemaSpy detecta algunas "Anomalías", como "Tablas sin índices" o "Columnas que están marcadas como ''anulables'' y ''deben ser únicos''". Una de estas anomalías es "Tablas con nombres de columnas en aumento, lo que podría indicar desnormalización"
Una herramienta como la que describes, que intentó analizar tus datos y metadatos y aconsejarte sobre una posible estructura no normalizada, daría sugerencias incorrectas con tanta frecuencia que haría que Clippy, el asistente de Microsoft, pareciera una ayuda indispensable para el escritor.
El proceso de normalización implica asignar los requisitos del software a un modelo de datos lógicos. 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.
Compare con las 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 sabría una herramienta de análisis de normalización de bases de datos si es apropiado que la tabla UserAccount
tenga un solo atributo MobilePhoneNumber
, o si sería más apropiado separar los números de teléfono en otra tabla para que un solo usuario pueda enumerar varios?