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.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package database-auditor

Table of Contents generated with DocToc

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.

Interfaz de línea de comandos

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

Features to implement / Caracteristicas a implementar

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

  1. 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

  2. Si la relacion no es n-aria, se escribe el nombre de la tabla en plural

  3. 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

  1. 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).

  1. 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.

ko-fi Paypal Binance

Find me on:

GITHUB LinkedIn Twitter Facebook Instagram TikTok YouTube

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

  1. Si e pertenece a Entidades y existe un fk pertenece foreignKeysDeEntidad(e)
    tal que entidadReferenciadaPorFK(fk)==e

  2. 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

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

[PHP]()


All versions of database-auditor with dependencies

PHP Build Version
Package Version
Requires php Version >=5.4
vlucas/phpdotenv Version >=5.3.0
symfony/console Version >=5.1
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package israeldavidvm/database-auditor contains the following files

Loading the files please wait ...