Guau, tienes un ambicioso proyecto por delante. Determinar qué es un buen diseño de la base de datos puede ser imposible, excepto por principios y directrices ampliamente entendidos.
Aquí están algunas ideas que vienen a la mente:
Yo trabajo para una empresa que hace la gestión de base de datos para varias grandes empresas de venta al por menor. Tenemos bases de datos personalizadas diseñadas para cada una de estas compañías, de acuerdo con la forma en que pretenden que usemos los datos (para correo directo, campañas de correo electrónico, etc.) y qué tipo de análisis y parámetros de selección les gusta usar. Por ejemplo, una compañía que vende equipos musicales en tiendas y en línea querrá distinguir entre clientes que se hospedan y clientes en línea, categorizar a los clientes de acuerdo con el tipo de artículos que compran (batería, guitarra, micrófonos, teclados, equipos de grabación, amplificadores, etc.) y realizar un seguimiento de cuánto gastaron y qué compraron en los últimos 6 meses o el año pasado. Usan esta información para decidir quién recibirá catálogos por correo. Estos correos son muy caros; tal vez uno o dos dólares por cliente, por lo que la empresa desea enviar los catálogos solo a aquellos que probablemente comprarán algo. Pueden tener 15 millones de clientes en su base de datos, pero solo 3 millones compran bidones, y solo 750,000 han comprado algo el año pasado.
Si analizara la base de datos que creamos, encontrará muchas tablas de "trabajo", que se utilizan con fines de selección específicos, y que pueden no estar diseñadas correctamente, según los principios de diseño de la base de datos. Mientras que las tablas "principales" están diseñadas de manera eficiente y tienen relaciones e índices adecuados, estas tablas de "trabajo" mostrarían que toda la base de datos está mal diseñada, cuando en realidad, las tablas de trabajo solo pueden usarse algunas veces, o incluso solo una vez, y aún no hemos entrado para limpiarlos o soltarlos.Las tablas de trabajo superan con creces a las tablas principales en esta base de datos en particular.
Uno también tiene que tener en cuenta el volumen de los datos que se administran. Una base de clientes de 10 millones puede tener una cantidad de datos de transacción de 10 a 20 millones de transacciones por semana. O por día. A veces, para la capacidad de administración, estos datos deben dividirse en tablas por rango de fechas, y luego se usaría una vista para seleccionar datos de la subtabla adecuada. Esto es eficiente para este gran volumen, pero puede parecer repetitivo para un analizador automático.
Su analizador debería ser configurable por el usuario antes de comenzar el análisis. Algunos artículos deben omitirse, mientras que otros pueden ser absolutamente críticos.
Además, ¿cómo se analizan los procedimientos almacenados y las funciones definidas por el usuario, etc.? He visto un código realmente feo que funciona de manera bastante eficiente. Y, algunos de los códigos más feos e ineficientes se escribieron solo para uso único.
OK, me he quedado sin ideas por el momento. Buena suerte con tu proyecto.
Fuera de interés, ¿qué más puede hacer que verificar los formularios normales? Hay muchas optimizaciones, que dependen del uso, así que supongo que sin algunas consultas no se puede decir si algo es óptimo o no, ¿no? –
Lo que encontraría casi más interesante es la cuestión de si realmente encontrará muchos esquemas "intermedios a malos" con proyectos de código abierto (razonablemente conocidos y desarrollados activamente), o si los esquemas defectuosos mejorarían rápidamente en el mundo de código abierto. – stakx
no mejorarán rápidamente porque tendrías que reescribir toneladas de código, lo que significa que es complicado migrar una instancia existente. Y una vez que la enfermedad se propaga, estás escribiendo hacks todo el tiempo;) – sled