Download the PHP package israeldavidvm/database-auditor without Composer
On this page you can find all versions of the php package israeldavidvm/database-auditor. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download israeldavidvm/database-auditor
More information about israeldavidvm/database-auditor
Files in israeldavidvm/database-auditor
Package database-auditor
Short Description ¡Optimiza tu diseño de bases de datos con database-auditor! ¿Quieres asegurarte de que tu base de datos esté libre de redundancias, anomalías y problemas de diseño? Con database-auditor, obtén las herramientas necesarias para validar formas normales, analizar dependencias funcionales y garantizar un diseño robusto y eficiente. ¡Prueba nuestra interfaz de línea de comandos y lleva tu base de datos al siguiente nivel!
License LGPL-3.0-or-later
Informations about the package database-auditor
Table of Contents generated with DocToc
- database-auditor
- ¡Asegura la calidad de tus bases de datos con database-auditor!
- Licencia
- Caracteristicas ¿Qué ofrece?
- Deteccion de Amenazas : Valida formas normales, identifica problemas de concatenación no aditiva, etc.
- Interfaz de línea de comandos
- Justificacion
- Challenges conquered / Desafíos Conquistados
- Features to implement / Caracteristicas a implementar
- Uso
- Advertencia
- Requisitos
- Instalacion
- Como usuario
- Como biblioteca (Solo si quieres crear un programa que use la libreria)
- Archivo .env (esto es necesario cuando se quiere generar un esquema a partir de la base de datos el comportamiento por defecto)
- Archivo functionalDependencies.json
- Uso desde la interfaz de linea de comandos
- CLI interactiva database-auditor menu
- Capture menu principal
- Capture menu probar bases de datos de ejemplo
- Capture menu probar bases de datos personalizada
- Ejemplo resultados analisis
- CLI no interactiva database-auditor audit-database [
[ ]]
- Make a donation. Your contribution will make a difference.
- Find me on:
- Planeacion, Ingenieria de requerimientos, gestion del riesgo y evolucion
- Diseño de Software
- ¿Como funciona?
- Perspectiva Estructural
- Vista Logica de la Arquitectura del software
- Perspectiva de comportamiento
- SchemaFromDatabaseUsingName.generateJoinsClusters process / Proceso de SchemaFromDatabaseUsingName.generateJoinsClusters
- SchemaFromDatabaseUsingName.generate() process / Proceso de SchemaFromDatabaseUsingName.generate()
- Validacion y Verificacion
- Formal validation / Validacion Formal
- MultipleReferencedEntitiesCollision
- getFunctionalDependenciesForBCNFInTable
- BCNF Definition / Definicion BCNF
- Closing a set of Functional Dependencies / Clasura de un conjunto de dependencias funcionales
- Inference Rules for Functional Dependencies / Reglas de inferencia para las dependencias funcionales
- Regla reflesiva
- Reglas transitiva, de descomposicion y union
- Reglas de de aumento y pseudo-transitividad
- Documentacion
- Convenciones usadas durante la docuemntacion
- Generacion de estructuras necesarias para los algoritmos
- DatabaseAuditor
- DatabaseSchemaGenerator
- SchemaFromDBUsingName
- Convenciones de nombres usada para la identificacion de elementos
- Llaves Primarias
- Ejemplos
- Llaves Foraneas
- Ejemplos
- Validacion de los esquemas de base de datos
- ValidationAlgorithm
- VerificationNonAdditiveConcatenation
- VerificationBCNF
- Technologies used / Tecnologias usadas
database-auditor
Readme version in English
¡Asegura la calidad de tus bases de datos con database-auditor!
¿Quieres asegurarte de la calidad de tu base de datos?
database-auditor te ayudara asegurar la calidad de tu base de datos de forma automática, cumplir con las mejores practicas, asegurar la integridad estructural, evitar redundancias y anomalías, validar formas normales, verificar la propiedad de concatenación no aditiva, analiza dependencias funcionales, etc.
¡Prueba database-auditor y asegura la calidad de tus bases de datos!
Licencia
Este código tiene licencia bajo la licencia pública general de GNU versión 3.0 o posterior (LGPLV3+). Puede encontrar una copia completa de la licencia en https://www.gnu.org/licenses/lgpl-3.0-standalone.htmlalone.html0-standalone.html
Caracteristicas ¿Qué ofrece?
database-auditor es una herramienta integral diseñada para garantizar la calidad de tus bases de datos. Ofrece un conjunto de funcionalidades avanzadas que te permiten:
Deteccion de Amenazas : Valida formas normales, identifica problemas de concatenación no aditiva, etc.
-
Validación de formas normales: Asegura que tu diseño cumpla con las formas normales, minimizando la redundancia y evitando anomalías en las actualizaciones.
- Comprobación de la propiedad de concatenación no aditiva: Detecta posibles problemas de diseño que podrían afectar los resultados de las consultas.
Interfaz de línea de comandos
- Interfaz de línea de comandos que proporciona una forma sencilla y directa de utilizar la librería, ideal para integración en flujos de trabajo automatizados.
Con database-auditor, podrás garantizar un diseño de base de datos sólido, eficiente y libre de errores comunes.
Justificacion
Tener una base de datos mal diseñada puede ser una de las peores cosas a las que nos podemos enfrentar como desarrolladores, un mal diseño es capaz generarnos los peores dolores de cabeza, retrasos en el desarrollo del sistema o lo que es peor aun puede acabar con uno de los activos mas valiosos que puede tener una empresa la informacion.
De manera que es necesario contar con metodos para garantizar el mejor diseño posible, dado lo laborioso de los metodos y la necesidad de respaldar la calidad del diseño se decidio dar comienzo a este programa para automatizar dicho proceso.
Challenges conquered / Desafíos Conquistados
- Demostracion formal de algoritmos
Features to implement / Caracteristicas a implementar
- Deteccion de errores en el diseño de la base de datos que afecten el funcionamiento de los algoritmos
- Valida que los nombres de tablas y atributos ingresados como entrada sean validos
- Soporte a nombres a atributos, tablas, fk y pk no convencionales
- Mejorar las funciones de conversion entre plural a singular en SchemaFromDatabaseUsingName
Uso
Advertencia
El modulo para extraer la informacion de una base de datos requiere que la base de datos siga las convenciones de nombres siguientes
-
Si la relaciones n-arias, como por ejemplo una tabla personperson, se debe tomar el nombre de cada tabla en singular y separarlo por un y siguiendo un orden alfabetico
-
Si la relacion no es n-aria, se escribe el nombre de la tabla en plural
- Las llaves foraneas deben seguir el patron
Por ejemplo si se tiene la tabla Personas(id,nombre,edad) se deberia escribir la tabla proyectos de la siguiente forma Proyectos(persona_supervisor_id, nombre) es decir la fk deberia ser persona_supervisor_id
- Para hacer las transformaciones de singular y plural se entendera lo siguiente
Reglas Específicas de pluralToSingular($word) (De plural a singular):
Regla de terminación "-ies" a "-y":
Condición: Si la palabra que se analiza termina exactamente con la secuencia de letras "ies". Acción: Se toman todas las letras de la palabra excepto las últimas tres ("ies"), y se les añade la letra "y" al final. Ejemplo: La palabra "countries" cumple esta condición. Se toma "countr" y se le añade "y", resultando en "country". Regla de terminación "-s":
Condición: Si la palabra que se analiza termina con la letra "s". Acción: Se toman todas las letras de la palabra excepto la última ("s"). Ejemplo: La palabra "libros" cumple esta condición. Se toma "libro". Regla por defecto (singular):
Condición: Si la palabra que se analiza no cumple ni la Regla 1 (terminación "-ies") ni la Regla 2 (terminación "-s"). Acción: La función asume que la palabra ya está en su forma singular y la devuelve tal cual, sin realizar ninguna modificación. Ejemplo: La palabra "mesa" no termina en "ies" ni en "s", por lo tanto, se devuelve "mesa". Reglas Específicas de singularToPlural($word) (De singular a plural):
Regla de palabra ya en plural (terminación "-s"):
Condición: Si la palabra que se analiza termina con la letra "s". Acción: La función asume que la palabra ya está en plural y la devuelve sin modificaciones. Ejemplo: La palabra "virus" termina en "s", por lo tanto, se devuelve "virus". Regla de terminación "-y" a "-ies" (con restricción de vocal precedente):
Condición: La palabra que se analiza termina con la letra "y". Y, la letra inmediatamente anterior a la "y" no es ninguna de las vocales: "a", "e", "i", "o", "u". Es decir, la "y" está precedida por una consonante. Acción: Se busca la secuencia final "y" y se reemplaza por la secuencia "ies". Ejemplo: La palabra "country" termina en "y", y la letra anterior es "r" (una consonante). Por lo tanto, se reemplaza "y" con "ies", resultando en "countries". Ejemplo (donde NO se aplica): La palabra "rey" termina en "y", pero la letra anterior es "e" (una vocal). Por lo tanto, esta regla no se aplica. Regla por defecto (añadir "-s"):
Condición: Si la palabra que se analiza no cumple ni la Regla 1 (terminación "-s") ni la Regla 2 (terminación "-y" precedida de consonante). Acción: Se añade la letra "s" al final de la palabra. Ejemplo: La palabra "libro" no termina en "s" y no termina en "y" precedida de consonante. Por lo tanto, se le añade "s", resultando en "libros". Ejemplo: La palabra "mesa" no termina en "s" y no termina en "y" precedida de consonante. Por lo tanto, se le añade "s", resultando en "mesas". Ejemplo (donde NO se aplica la regla "-y" a "-ies"): La palabra "grey" no termina en "s" y termina en "ey" (vocal + y), por lo que se le añade "s", resultando en "greys" (siguiendo la regla por defecto).
- En los archivos.json todo atributo debe ser referenciado usando la notacion de attributos completamente cualificado la cual esta dada por
Por ejemplo si se tiene la tabla Personas(ci,nombre,edad)
los nombres completamente cualificados tendran la forma
persona_ci persona_nombre persona_edad
de forma que una dependencia funcional debe especificarse
Excepcion
Existe la posibilidad de probar una base de datos que no cumpla con las convenciones por medio de los archivos json siempre y cuando todo atributo sea unico. Sin embargo esta es una caracteristica que posiblemente sea deprecada en el futuro. Recomendamos usar la notacion anteriormnete comentada
Requisitos
Instalacion
Como usuario
composer install israeldavidvm/database-auditor
composer global require israeldavidvm/database-auditor
composer require israeldavidvm/database-auditor
Como biblioteca (Solo si quieres crear un programa que use la libreria)
composer require israeldavidvm/database-auditor
Archivo .env (esto es necesario cuando se quiere generar un esquema a partir de la base de datos el comportamiento por defecto)
Establece una configuracion en el archivo .env. como la siguiente
Archivo functionalDependencies.json
Un archivo donde se van a configurar las depedencias funcionales de tu base de datos, notese que el nombre viene de la variable de entorno DATA_AUDITOR_PATH_FUNCTIONAL_DEPENDENCIES_JSON_FILE escrita en tu archivo .env
Vease la notacion en la seccion de advertencias pero un ejemplo para una base de datos optenida desde el archivo .env seria el siguiente
Uso desde la interfaz de linea de comandos
Para poder usar el programa solo necesitaras un archivo .env con la configuracion de tu base de datos y un archivo .json donde se almacenen las depedencias funcionales
Hay 2 metodos para usar el programa por medio de una CLI interactica o por medio de pasarle los programas directamente a la CLI
CLI interactiva database-auditor menu
Si es incluido en un proyecto por medio de require con el global (composer global require israeldavidvm/database-auditor)
Si es incluido en un proyecto por medio de require sin el global (composer require israeldavidvm/database-auditor)
Si es instalado por medio de install o se parte de la raiz del proyecto (composer install israeldavidvm/database-auditor)
Capture menu principal
Capture menu probar bases de datos de ejemplo
Capture menu probar bases de datos personalizada
Ejemplo resultados analisis
CLI no interactiva database-auditor audit-database [ []]
Si es incluido en un proyecto por medio de require con el global (composer global require israeldavidvm/database-auditor)
Si es incluido en un proyecto por medio de require sin el global (composer require israeldavidvm/database-auditor)
Si es instalado por medio de install o se parte de la raiz del proyecto (composer install israeldavidvm/database-auditor)
Make a donation. Your contribution will make a difference.
Find me on:
Planeacion, Ingenieria de requerimientos, gestion del riesgo y evolucion
Estas secciones del proyecto se llevara por medio de un sitio en notion de forma que puedan ser facilmente accesibles por el personal no tecnico.
Solicita el link de acceso al personal autorizado
Diseño de Software
¿Como funciona?
Basicamente el programa funciona con los siguientes pasos
1) Se escoje un mecanismo para generar las estructuras necesarias para los algoritmos
2) Se aplican los algoritmos para verificar la base de datos
Perspectiva Estructural
Vista Logica de la Arquitectura del software
En el siguiente diagrama de clases se veran las abstracciones clave en el sistema, sus interaciones responsabilidades.
Perspectiva de comportamiento
SchemaFromDatabaseUsingName.generateJoinsClusters process / Proceso de SchemaFromDatabaseUsingName.generateJoinsClusters
SchemaFromDatabaseUsingName.generate() process / Proceso de SchemaFromDatabaseUsingName.generate()
Validacion y Verificacion
Para validar y verificar el programa se utilizaran tecnicas de verificacion matematica formal y pruebas unitarias.
Las pruebas se encuentran en la carpeta tests
y pueden inspeccionarse por medio del comando ./vendor/bin/phpunit o ./vendor/bin/phpunit --coverage-html tests/coverage si se quieren los informes de covertuta de codigo en formato html
Formal validation / Validacion Formal
MultipleReferencedEntitiesCollision
-
Si e pertenece a Entidades y existe un fk pertenece foreignKeysDeEntidad(e)
tal que entidadReferenciadaPorFK(fk)==e - Si n pertenece a EntidadesNary, existen fk1 y fk2 que pertenecen a foreignKeysDeEntidad(e) tal que entidadReferenciadaPorFK(fk1)==entidadReferenciadaPorFK(fk2)
getFunctionalDependenciesForBCNFInTable
El objetivo de esta sección es demostrar que el algoritmo puede utilizarse para generar el conjunto de dependencias funcionales necesario para validar la BCNF (Forma Normal de Boyce-Codd).
El nuevo algoritmo que presentaremos a continuación se basa en la idea de que, para aplicar la verificación de BCNF en cada descomposición, podemos utilizar el conjunto de dependencias funcionales en el que tanto el antecedente como el consecuente son subconjuntos del conjunto de atributos de la descomposición, en lugar de utilizar la proyección del conjunto de dependencias funcionales para esa descomposición, ya que esta última opción resulta ser un conjunto mas complejo con el que trabajar
Para ello es importante tener en cuenta que
Un esquema de relación R está en BCNF si siempre que una dependencia funcional no trivial X → A se cumple en R, entonces X es una superclave de R.
BCNF Definition / Definicion BCNF
y que el conjunto de dependencias funcionales para una descomposicion es la proyeccion del conjunto de dependencias de la relacion universal proyectado para una descomposicion.
Es decir
Donde F+ es la Clasura de un conjunto de dependencias funcionales
Closing a set of Functional Dependencies / Clasura de un conjunto de dependencias funcionales
Formalmente, el conjunto de todas las dependencias que incluyen F, junto con las dependencias que pueden inferirse de F, reciben el nombre de clausuras de F; está designada mediante F+.
Inference Rules for Functional Dependencies / Reglas de inferencia para las dependencias funcionales
Recordemos que las reglas de inferencia bien conocidas para las dependencias funcionales son
Habiendo dicho esto notese que para las reglas de inferencia sucede lo siguiente al ser aplicados sobre el algoritmo de bcnf
Regla reflesiva
Para el caso de la regla reflexiva las dependencias funcionales generadas x->y requieren que x sea subconjunto de y de modo que solo genera dependencias triviales las cuales no se toman en cuenta en bcnf
Reglas transitiva, de descomposicion y union
Para el caso de las reglas transitiva, de descomposicion y union el antecedente de las dependencias funcionales no cambia de manera que si el antecedente es super clave la descomposicion cumplira la regla de BCNF en caso de que no sea super clave la descomposicion no cumplira la regla de BCNF es decir las descomposiciones inferidas con estas reglas no afectaran el resultado
Reglas de de aumento y pseudo-transitividad
Para el caso de las reglas de de aumento y pseudo-transitividad sucede que el antecedente X se une con otro conjunto W o Z en cualquiera de los casos sucede que: Si x es super clave solo se podran inferir reglas en las que el antecedente siga siendo super clave Si x no es super clave se podran inferir reglas que sean super claves pero en caso de que x no sea super clave ya sabremos que por la definicion de BCNF esta forma no se cumple.
En conclusion: Para el caso de la validacion de la BCNF podemos usar el
Documentacion
El paquete database-auditor permite realizar una serie de validaciones y mejoras a la calidad del diseño de una base de datos como la comprobacion de formas normales, verificación de la propiedad de concatenación no aditiva, etc.
Convenciones usadas durante la docuemntacion
Convenciones de notacion para la gramatica:
Los <> se utilizan para rodear un simbolo no terminal
El ::= se utiliza para reglas de produccion
Los simbolos no terminales se expresan como una cadena o caracteres normales
El siguiente grupo de pares de simbolos, se deben utilizar junto a las expresiones de la siguiente forma: el primero en cada pareja se escribe como sufijo despues de la expresion y el segundo rodea la expresion.
El ? o [] indican que la expresion es opcional
El * o {} indica que la expresion se repite 0 o mas veces
El + indica que la expresion se repite 1 o mas veces
Si se quiere usar uno de los caracteres anteriores se debe de anteceder \ con
Generacion de estructuras necesarias para los algoritmos
Para que los algoritmos funcionen se debe de generar ciertas sobre la cual aplicar dichos algoritmos.
Estructuras que se generan a partir de los esquemas de la base de datos. EL cual puede especicarse de distintas formas.
Lamentablemente algunos SGBD, dan soporte a los estadares de sql de forma diferente por lo que no existe una algoritmo universal que funcione perfectamente para todos los SGBD.
De manera que el software se diseño tomando en cuenta la posibilidad de utilizar diferentes algoritmos. Mas concretamente se utilizara el patron strategy para permitir el intercambio de algoritmos
Las estructuras responsables para esto seran las siguientes:
DatabaseAuditor
Busca ser el contexto para las distintas estrategias usadas y un medio que encapsula funciones utilitarias comunes para todos los algoritmos
DatabaseSchemaGenerator
proporciona la interfaz estrategia que es común a todas las estrategias concretas para la generacion de los esquemas de la base de datos
SchemaFromDBUsingName
Es una de las estrategias concretas que genera los esquemas por medio de los nombres de las columnas de la base de datos
Si bien se pudo usar el conjunto de vistas de information_schema para determinar algunas de las estructuras de la base de datos
Se descubrio que en postgresql se suelen generar joins aditivos
Por ejemplo si se quisiera saber si una columna en la information_schema.key_column_usage es una PRIMARY KEY, FOREIGN KEY, etc, deberia usarse la consulta
Sin embargo si observamos detenidamente dichos resultados se ven afectados por un join aditivo
Para el caso particular de tener
que arroja resultados de esta forma
y un
que arroja resultados de esta forma
se tiene que el
genera los siguientes resultados que reflejan el join aditivo
Convenciones de nombres usada para la identificacion de elementos
Llaves Primarias
Todo atributo de nombre id
Ejemplos
id
Llaves Foraneas
Todo atributo que posee la siguiente forma
Coincide con la siguiente expresion regular
Ejemplos
- user_id
- taxonomy_child_id
- taxonomy_parent_id
Validacion de los esquemas de base de datos
El objetivo de esta libreria es proporcionar validaciones para los esquemas de la base de datos y para ello se utilizaran las siguientes estructuras:
ValidationAlgorithm
Proporciona la interfaz estrategia que es común a todas las estrategias concretas para la generacion de las validaciones de la base de datos
VerificationNonAdditiveConcatenation
Encapsula el Algoritmo 11.1 de Verificación de la propiedad de concatenación no aditiva propuesto por RAMEZ ELMASRI y SHAMKANT B. NAVATHE
VerificationBCNF
Encapsula el Algoritmo que valida que cada descomposicion posea la BCNF en base a la definicion presentada por RAMEZ ELMASRI y SHAMKANT B. NAVATHE
Para el algoritmo se utilizar el conjunto de dependencias funcionales no triviales en el que tanto el antecedente como el consecuente son subconjuntos del conjunto de atributos de la descomposición, en lugar de utilizar el conjunto de dependencias no triviales en la proyección del conjunto de dependencias funcionales para esa descomposición esto debido a que para fines del algoritmo para verificar la BCNF los conjuntos funcionan de forma equivalente.
La demostracion formal de dicha afirmacion se encuentra en el README.md del paquete database-auditor.
Technologies used / Tecnologias usadas
[]()