2010-09-11 16 views
13

Nuestro proyecto de tesis de maestría está creando un analizador de esquemas de base de datos. Como base para esto, estamos trabajando para cuantificar el diseño de bases de datos incorrectas.Malos esquemas de bases de datos del mundo real

Nuestro supervisor nos ha encargado que analicemos un esquema del mundo real, de nuestra elección, de modo que podamos identificar algunos/varios problemas de diseño. Estos problemas se deben usar como punto de partida en el analizador de esquema.

Encontrar un buen esquema es un poco difícil porque no queremos un esquema que esté bien diseñado en todos los aspectos, sino un esquema que sea más "raro que medio".

Ya hemos programado los siguientes esquemas para el análisis: wikimedia, moodle y drupal. No estoy seguro en qué categoría encaja cada uno. No es necesario que el esquema sea de código abierto.

El motor de base de datos utilizado no es importante, aunque nos gustaría centrarnos en SQL server, Posgresql y Oracle.

Por el momento la literatura será diferida, ya que se supone que esta tarea nos brinda ejemplos del mundo real que se pueden usar en la tesis. es decir, "Design X es percibido por nosotros como un mal diseño, que nuestro analizador identifica y sugiere mejoras", en lugar de generar ejemplos artificiales.

Actualizaré esta publicación cuando tengamos algún tipo de herramienta lista.

+1

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? –

+0

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

+0

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

Respuesta

6

Estoy trabajando en un proyecto que incluye un sistema de información geográfica. Y en mi opinión, estos diseños son a menudo "medianos" a "raros".

Éstos son algunos ejemplos:

1) Geonames.org

Puede encontrar los datos y el esquema aquí: http://download.geonames.org/export/dump/ (desplácese hacia abajo hasta la parte inferior de la página para el esquema, que es en texto plano en el sitio!)

¡Sería interesante cómo este diseño de DB funciona con una GRAN cantidad de datos!

2) OpenGeoDB

Éste es muy popular en los países de habla alemana (Alemania, Austria, Suiza) porque es una base de datos que contiene casi todas las ciudades/ciudad/pueblo en la región de habla alemana con los códigos postales, nombre, jerarquía y coordenadas.

Este viene con un esquema .sql y los campos de la tabla están en inglés, por lo que esto no debería ser un problema.

http://fa-technik.adfc.de/code/opengeodb/

Lo interesante en ambos ejemplos es cómo lograron la jerarquía de entidades como País -> Estado -> Condado -> Ciudad -> Village etc.

PS: Tal vez usted podría juzgar a mi Diseño de DB también;) DB Schema of a Role Based Access Control

+0

Como una especie de respuesta tardía: Tanto la membresía de Microsoft ASP.NET como el proveedor de roles (su esquema, pero también el código y la interfaz) :) –

5

vBulletin tiene un esquema de base de datos muy malo.

+0

Puede ser que yo sea un cojo, pero no puedo encontrar el esquema de vBulletin. ¿Sabes si es posible obtener sin comprar una licencia? – Benjamin

+0

¿No puedes descargar una versión de prueba? No sé cómo obtener el esquema, tuve que extraer datos de un sistema existente para un cliente. También podría ser una buena idea enviar un correo a Jelsoft. A veces funciona :) – tamasd

+1

Encontramos algunos gráficos en línea que utilizamos en su lugar. :) Por cierto. Imagine cómo se habría redactado el correo electrónico: "Estimado vBulletin, hemos oído que tiene un diseño de base de datos realmente malo, por favor comparta". – Benjamin

7

Compruebe el Dell-dvd-store, puede usarlo gratis.

El Dell DVD de la tienda es un código abierto simulación de un sitio de comercio electrónico en línea con implementaciones en Microsoft SQL Server, Oracle y MySQL, junto con programas controladores y aplicaciones web

Bill Karwin tiene escribió un gran libro sobre malos diseños: SQL antipatterns

+0

¡gracias por la pista del libro! :) – sled

3

"estamos trabajando para cuantificar el diseño de una base de datos incorrecta".

Me parece que está desarrollando un modelo, proceso o aparato que toma como referencia un esquema relacional y lo califica para la calidad.

os invito a reflexionar sobre lo siguiente:

Puede un esquema físico sea "malo", mientras que el esquema lógico es, sin embargo, "muy buena"? ¿Pretendes distinguir correctamente entre "esquema lógico" y "esquema físico"? ¿Cómo sueñas lograr eso?

¿Cómo se puede decidir que cierto aspecto del diseño físico es "malo"? Tomemos como ejemplo la ausencia de algún índice. Si la relación que debe tener ese "índice supuestamente deseable" está limitada a ser un singleton, entonces, ¿qué efectos perjudiciales provocaría la ausencia de ese índice para el sistema? Si no hay tales efectos perjudiciales, ¿qué bases existen para calificar la ausencia de dicho índice de "malo"?

¿Cómo se puede decidir que cierto aspecto del diseño lógico es "malo"? Las elecciones en el diseño lógico se realizan como consecuencia de cuáles son los requisitos reales. ¿Cómo se puede emitir juicio alguno sobre un diseño lógico, sin una forma formalizada y legible por máquina de especificar cuáles son los requisitos reales?

3

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.

+0

¿Es esto algún tipo de software OLAP Cube? :) – sled

0

Si puede verlo, el sistema de gestión de proyectos Clarity tiene un diseño de base de datos horrible. No sé si tienen una versión de prueba que puedes descargar.

Cuestiones relacionadas