una tuning tabla rendimiento que optimizar mejorar esquema ejemplo datos create consultas consultar cambiar sql-server database-design postgresql anti-patterns

sql-server - tuning - que es un esquema de base de datos en oracle



Malos esquemas de bases de datos del mundo real (6)

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

Te invito a reflexionar sobre lo siguiente:

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

¿Cómo decides 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 decides 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?

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

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 a 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 el servidor SQL, Posgresql y Oracle.

Por el momento, la literatura será diferida, ya que se supone que esta tarea nos brinda ejemplos del mundo real que pueden usarse 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 crear ejemplos artificiales.

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


Guau, tienes un proyecto ambicioso 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í hay algunas ideas que te vienen a la mente:

Trabajo para una empresa que administra bases de datos para varias grandes empresas minoristas. 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 empresa 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 tuviera que analizar la base de datos que creamos, encontrará muchas tablas de "trabajo", que se utilizan para fines de selección específicos, y que pueden no estar diseñadas correctamente, de acuerdo con 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.

También se debe 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 que comenzara 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, estoy sin ideas por el momento. Buena suerte con tu proyecto.


Verifique Dell-dvd-store , puede usarlo gratis.

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

Bill Karwin ha escrito un gran libro sobre malos diseños: antipatterns SQL


vBulletin tiene un esquema de base de datos realmente malo.


Si puede obtenerlo, 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.


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

Aquí hay unos ejemplos:

1) Geonames.org

Puede encontrar los datos y el esquema aquí: http://download.geonames.org/export/dump/ (baje hasta la parte inferior de la página para el esquema, ¡está en texto plano en el sitio!)

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

2) OpenGeoDB

Este es muy popular en los países de habla alemana (Alemania, Austria, Suiza) porque es una base de datos que contiene casi cada ciudad / pueblo / pueblo en la región de habla alemana con código postal, 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 manejaron la jerarquía de entidades como País -> Estado -> Condado -> Ciudad -> Pueblo, etc.

PD: Quizás también puedas juzgar mi diseño de base de datos;) Esquema DB de un control de acceso basado en roles