¿Existe alguna herramienta para verificar si mi base de datos está normalizada a la tercera forma normal?


20

Aprendí sobre la normalización recientemente y entiendo lo importante que es al implementar un nuevo esquema.

¿Cómo puedo verificar si mi base de datos es compatible con 2NF o 3NF?

La revisión manual es una opción segura, pero estoy buscando una herramienta automatizada aquí.

No estoy buscando una herramienta de apuntar y hacer clic, más algo que destaque las posibles optimizaciones para hacer que una tabla sea compatible con 3NF. Supongo que podría usar estadísticas basadas en buenos datos de muestra y / o análisis semántico de nombres de columnas.


1
Espero que tal herramienta no exista. 2NF / 3NF no necesita hacerse cumplir. El diseño de un esquema / modelo a menudo tiene que tener en cuenta aspectos prácticos y consideraciones de rendimiento, que generalmente arroja xNF por la ventana
Philᵀᴹ

2
¿Significa que la normalización no se usa en realidad? Planeé usarlo como punto de partida y consideraré desnormalizar cuando disminuya el rendimiento.
ack__

3
El diseño de esquemas es más un arte que una ciencia. Claro que hay reglas básicas a seguir, pero una vez que lo haces lo suficiente, comienzas a tener una buena idea de lo que funciona y lo que no. Artesanía
datagod

No estoy de acuerdo con Phil. La normalización es a veces el camino a seguir. Otras veces el esquema estelar es mejor. Depende de lo que está haciendo. Necesitaría muchísimas tablas antes de que la automatización valga la pena.
Walter Mitty

Respuestas:


24

La normalización se usa absolutamente en el mundo real ... y espero que sepan que 3NF es solo el tercero de ... ¿qué es ahora, 8? Pero 3NF debería ser un objetivo fácil.

Sin embargo ... Me aventuraría a decir que no podría haber una herramienta así.

La normalización, técnicamente, es un atributo de cada tabla. Dentro de una base de datos dada, diferentes tablas pueden tener diferentes niveles de normalización.

Cada tabla representa hechos ... hechos sobre instancias de cierto tipo de cosas (persona, cuenta, orden, envío, artículo, ubicación), incluidas, a veces, claves extranjeras que lo llevan a otros tipos de hechos sobre esa cosa.

La normalización tiene que ver con la precisión y eficiencia con que se representan los hechos en las tablas, así como con la capacidad del diseño de la tabla para evitar patrones de datos ambiguos y redundantes.

Por lo tanto, se requiere una comprensión de los hechos reales ... que está fuera del alcance de las herramientas automatizadas.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

En un mundo donde todos los instructores enseñaron todas las asignaturas y cada alumno pudo tomar cualquier combinación pero no más de un curso sobre cada asignatura de cada instructor, se podría decir que esta tabla está en 3NF. En el mundo real, hacer el reclamo de 3NF para esta tabla es absurdo.

Para entender que no está en 3NF se requiere una comprensión de la naturaleza de los hechos que representa. En nuestra realidad, esta tabla no será 3NF ya que (entre otras razones) la asignatura y el instructor están asociados de manera que no tienen nada que ver con el alumno. Si tenemos los cursos donde los instructores enseñan materias almacenadas en otra parte de nuestra base de datos, ¿por qué deberíamos copiar ambos valores aquí en lugar de una clave externa de la otra tabla que indica que el estudiante se inscribió en el curso? Si el instructor es reemplazado, tenemos que cambiar múltiples registros en múltiples lugares.

Cuanto más normalizada es una base de datos, más intrínsecamente consistente es con el mundo real y consigo misma, y ​​más difícil es que los hechos de la base de datos sean inadvertidamente falsos. El diseño de bases de datos es un arte, pero definitivamente también es una ciencia.

Aunque no estoy de acuerdo con todo lo que escribe, recomendaría el libro de Chris Date, Diseño de bases de datos y teoría relacional: formas normales y todo ese jazz, que entra en detalles insoportables sobre la teoría subyacente del modelo relacional.


2
Gracias por esta respuesta detallada. Sin embargo, siguiendo su ejemplo, debería ser posible que una herramienta que analiza datos de muestra detecte que los valores del "instructor" se repiten mucho y que también aparezca en otra tabla, lo que sugiere que podría ser candidato para una clave externa o cualquier otro cambio que haría que esta tabla fuera compatible con 3nf, o me falta algo?
ack__

2
Es cierto, pero la palabra clave sigue siendo "sugerir". Una herramienta podría sugerir cambios estructurales al buscar redundancia aparente, pero aún mantendría que la redundancia genuina y una apariencia coincidente de correlación serían difíciles de diferenciar para dicha herramienta. Se requiere conocimiento de la naturaleza del mundo real de los datos.
Michael - sqlbot el

@ack__: estar en tercera forma normal o no es una propiedad de una relación, no de un par o un conjunto de relaciones. Por lo tanto, no puedo ver que establecer una relación de clave externa tenga algo que ver con la tercera forma normal.
milagro173

Creo que el problema más grande es que determinar dependencias funcionales de columnas múltiples es problemático especialmente. si los valores pueden ser iguales y, sin embargo, representan entidades diferentes (es decir, donde están involucradas claves compuestas). Considere una tabla: (address_text, city, state_province, mail_code, country). Ahora esto no está normalizado. (ciudad, estado_provincia) -> (país). Entonces, para normalizar completamente, tenemos que dividir esto en al menos tres tablas, tal vez cuatro (¡manejo de código de correo!), Pero las teclas compuestas hacen que sea problemático detectarlo sobre la marcha. También comp. las claves son clave para la idea de nf's, ¡así que no las ignores!
Chris Travers

¿Podría alguien explicar por qué "En un mundo en el que un estudiante solo podía tomar un curso en una materia y todos los instructores enseñaron todas las materias, se podría decir que esta tabla está en 3NF" Eso parece establecer que Estudiantes -> materia y nada más. Sentir que la clave para esta tabla sería (estudiantes, instructor) ¿no rompería 3NF? ¿Con qué nos ayuda cada maestro que enseña cada materia?
Drew Verlee

5

Parte del punto de usar métodos formales en el desarrollo de la teoría relacional era desarrollar procedimientos que pudieran automatizarse. Estoy bastante seguro de que CJ Date sale y dice eso en su Introducción a los sistemas de bases de datos .

Varias herramientas CASE lanzadas a fines de la década de 1980 o principios de la década de 1990 podrían derivar todos los esquemas posibles de 5NF ya sea analizando diagramas ER o mediante análisis estadístico de datos de muestra.

Visio Enterprise Architect (creo) es una herramienta relativamente reciente en ese sentido.


Agradable. De hecho, estaba buscando ambas formas de analizar un esquema (diagrama ER y análisis de datos de muestra). ¿Conoces algún otro software reciente que no sea Visio? No tengo (todavía) una licencia para ello.
ack__

1
Pero sus diagramas ER son esencialmente diagramas de modelo de objeto. Eso no es lo mismo que tomar una base de datos existente y determinar si está normalizada a partir de ella.
Chris Travers

2
El análisis de tablas con datos de muestra y sugerencias para la normalización fue una característica de Access, y en versiones anteriores, si mal no recuerdo.
ypercubeᵀᴹ

@ Chris: sí, me refería a los diagramas de ER solo para análisis semántico.
ack__

@ypercube: Gracias por el consejo, echaré un vistazo a Access.
ack__


2

Creo que si pudieras escribir una herramienta para hacerlo, aún necesitaría una revisión manual para que funcione. Las formas normales se definen en función de las dependencias funcionales y no pueden determinarse a partir de la mera inspección de los datos. En otras palabras, es una cuestión de lógica inductiva más que deductiva para determinar si existe una dependencia funcional.


De hecho, habrá una revisión manual que hacer, no espero que una herramienta lo haga de forma totalmente automática. Pero estoy bastante seguro de que la mayor parte del trabajo puede automatizarse mediante el análisis de los datos existentes en la base de datos (al menos, muestras de ella) y / o el nombre / tipo de los campos.
ack__

1
¿Cómo? La normalización se define en dependencias de unión y dependencias funcionales. Una dependencia funcional se define básicamente fácilmente como: por cada valor posible de una superclave, hay exactamente un valor en la dependencia funcional. No puede llegar allí automatizando la revisión de los datos porque solo porque tiene, para su conjunto actual, lo que parece ser una dependencia funcional, eso no significa que se ajuste a una nueva clave. Es muy parecido a la antigua correlación vs división de causalidad. No puede inducir una dependencia funcional al observar lo que está actualmente en la base de datos.
Chris Travers

2
al menos una herramienta puede sugerir que tal vez exista una relación. Si la calidad y el tamaño de la muestra de datos es lo suficientemente grande, la precisión de tal suposición será lo suficientemente alta para fines prácticos.
miracle173

Tal vez. Pero tomemos un ejemplo real que es bastante infernal en cuanto a diseño relacional: direcciones. ¿Cómo deben normalizarse las direcciones de correo? ¿Cuántas tablas se deben sugerir? Según tengo entendido de 3NF, necesita tablas para países, estados / provincias y ciudades. No sé si los desgloses de código postal / ciudad tienen sentido, pero probablemente sí. Pero, ¿cómo analiza los datos existentes y determina que (ciudad, estado) -> país? ¿Cómo se determina si / si los códigos postales no se relacionan globalmente con estas construcciones?
Chris Travers
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.