La mejor manera de analizar y verificar todos los datos de la base de datos

Uno de nuestros clientes quiere hacer una verificación para cada registro de la base de datos en cada tabla. El problema es que nuestra base de datos tiene actualmente docenas de tablas (más de 50) y cada tabla ya tiene miles de registros.

La verificación básica que nuestro cliente quiere hacer es verificar para cada tabla qué columnas tienen valores nulos. Nuestro cliente asume que si los usuarios de la plataforma solo llenan las entradas básicas, podría significar que los usuarios no están aprovechando al máximo las entradas disponibles en la plataforma.

¿Cuál sería la mejor manera de cumplir con este requisito?

Ya pensé en hacer esto estadísticamente, por ejemplo:

  • Table1 tiene 30 registros con las siguientes columnas vacías (Columna1, Columna2, Columna3)
  • El 30 % de las tablas de la base de datos tienen registros con valores nulos

preguntado el 22 de mayo de 12 a las 21:05

¿Servidor SQL? ¿Mi Slq? ¿Oráculo? Sé cómo lo haría para SQL Server, pero es posible que eso no se aplique a otras bases de datos. Primero consultaría las tablas de esquema para encontrar columnas que PUEDAN contener valores nulos (usando una consulta como esta: mssqltips.com/sqlservertip/1781/…) y luego cree consultas sobre la marcha para esas columnas, devolviendo el recuento. -

Gracias por responder David, es una base de datos de SQL Server 2008 R2. Entonces, de alguna manera recuperaría datos agregados, ¿verdad? -

Sugerencia irónica: para cada columna que permita valores NULL, pruebe con ALTER TABLE para no permitir valores NULL. Si falla, hay valores nulos en esa columna de la tabla. Si tiene éxito, no hubo valores nulos en esa columna (y tampoco habrá valores nulos en el futuro). -

Si. Escribiría una aplicación que primero buscaría columnas que pueden contener ahora, y luego, para cada columna encontrada, crearía una consulta como Select Count(*) From [Table] WHERE [column] IS NULL, y registraría la tabla. columna donde el recuento es> 0. Sin embargo, esa puede no ser la forma más eficiente, así que estoy esperando que respondan personas más inteligentes. -

Sabes, @JonathanLeffler, así es como lo haría si supiera que no debería tener valores nulos y estaba realizando una limpieza. Primero lo haría en una versión de prueba de la base de datos, pero sería la OMI más simple. -

1 Respuestas

Sé que esto realmente no responde a la pregunta que planteó, pero creo que solo verificar "nulo" es el comienzo del requisito, pero es poco probable que sea el final.

En la mayoría de los proyectos que he realizado con muchos datos, terminamos construyendo un marco de validación, que tenía lógica comercial para cada tabla y cada campo en cada tabla.

Por ejemplo, descubrimos que muchos registros incluían direcciones de correo electrónico falsas, por lo que escribimos un script para validarlos (cosa realmente simple inicialmente, verificar que el dominio existe y no es uno de "test.com", "aaa.com ", "qwerty.com", etc.). También nos dimos cuenta de que estábamos obteniendo números de teléfono falsos, por lo que verificamos si los números de teléfono coincidían con uno obviamente inventado (123-456789).

Es un dolor de cabeza, pero si la empresa quiere comprender la calidad de los datos, es la única forma de hacerlo.

Terminamos escribiendo docenas de pequeños scripts SQL, cada uno de los cuales arrojaba una lista de registros "sospechosos", con las razones para sospechar de ellos. No era bonito, pero era fácil de extender, fácil de administrar y le dio a la empresa suficiente información para tomar decisiones.

contestado el 23 de mayo de 12 a las 12:05

De hecho lo adivinó :) Hoy tuvimos una reunión con el cliente y lo que terminó queriendo era un sistema de reglas para verificar las tablas para poder hacer varias reglas para cada tabla, como un firewall, si los registros en cada tabla no cumplen los requisitos especificados en las reglas, mostramos los registros "no válidos". Tu idea también fue buena. Esperaré a ver si consigo más ideas sobre este problema. Gracias :) - carlos ferreira

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.