2010-02-04 22 views
13

Dos de mis colegas y yo estamos construyendo un sistema para hacer todo tipo de hidrología y cosas relacionadas. Tiene muchos requisitos y tiene una buena cantidad de tablas.¿Cuándo tienes demasiadas mesas?

Nos ocupamos de todo tipo de muestreo que se realiza dentro de este ámbito (hidrología) y estamos tratando de encontrar una manera de hacerlo de una manera menos dolorosa.

A veces hay que sacar a todos de que el muestreo juntos y estoy empezando a pensar que estamos complicar nuestro diseño de base de datos.

Cómo o cuándo sabes que son sobre-diseño de una base de datos? Por supuesto, estamos considerando muchas Reglas de Formularios Normales y otras buenas prácticas, pero cuando está bien eliminar una de esas reglas, p. no normalizar algo?

¿Cuál es su opinión al respecto?

+3

"Normalizar hasta que duela, desnormalizar hasta que funcione". : http://www.codinghorror.com/blog/archives/001152.html – Fionnuala

+0

¿Está utilizando ORM o SQL directo para acceder a él? He encontrado que el uso de ORM, especialmente para persistir información que puede ser jerárquica y se representa en el tiempo de ejecución como una jerarquía de clases, se presta a una gran cantidad de tablas. Si tuviera que manipularlo manualmente, sería horrible. – Uri

Respuesta

12

Respuesta corta

No se puede, preocuparse por otra cosa.

Respuesta larga

Esto suena como una forma más de premature optimization. (YAFPO?)

Debe diseñar el esquema por medio third normal form (3NF). Una vez diseñado, debe llenar sus tablas con datos y comenzar a perfilar.

Si una consulta en particular se considera demasiado costoso entonces usted debe buscar en denormalization sobre una base de caso por caso.

Respuesta técnica (para los nitpickers que inevitablemente objetar: "no se puede")

Se llega a un límite en algún momento sobre la base de su elección de RDBMS y/o motor de almacenamiento. Los techos probables serán el consumo de memoria o los descriptores de archivos abiertos.

+0

Las consultas caros cuold ser atacados por diferentes medios: desnormalización, vistas, vistas materializadas, comprobar los índices, comprobando si los índices están en un espacio de tabla diferente, ... – Alfabravo

+0

@Alfabravo: Usted es correcta. No tenía la intención de transmitir que la desnormalización era la única opción disponible. En cambio, estaba limitando el alcance de mi respuesta para abordar el miedo a las "muchas mesas". – hobodave

+0

derecho, que son correctos, así, de todos modos :) Por cierto: para nuestro amigo temeroso, en este momento estoy trabajando en algunas EJB extrañas hechas por un grupo de monos que utilizan sobre ... me dejó hacer los cálculos .. .1600 tablas. Entonces, ¡compra un frasco lleno de vitaminas y mátalos! (no literalmente) – Alfabravo

2

tenemos un sistema con literalmente cientos de mesas - su no es gran cosa, es sólo que un montón de cosas diferentes se almacenan en la base de datos.

+0

Humn, pero ¿y la complejidad? Estamos trabajando con muchas tablas relacionadas, por ejemplo: tenemos una tabla de puntos de monitoreo, una tabla de instrumentos (1: m con punto de monitoreo) yn tablas que hacen referencia a los instrumentos. Ese tipo de cosas se repite en el proyecto. ¿Lo estamos haciendo mal? ¿Hay alguna forma mejor? Tenga en cuenta que estos no se repiten. –

+2

@George: Deberías preguntar este tipo de cosas en otra pregunta; no en un comentario. Muéstranos tu esquema y pide comentarios. – hobodave

+0

Pero, por favor, solo unas pocas tablas –

0

Tenemos un montón de tablas en nuestro sistema también. Lo que hicimos fue normalizar la base de datos en un buen momento, luego creamos algunas vistas que abarcan las necesidades de uso de tablas más comunes de nuestro sistema. Algo así podría ayudarte también.

2

"¿Cuándo tienes demasiadas mesas?"

En el nivel de diseño lógico, la respuesta correcta es "nunca".

A nivel de diseño físico (en la medida como "tener una mesa" en realidad se refiere a un concepto que se refiere al diseño físico), la respuesta correcta es "si y cuando las consultas que se necesita hacer, dadas las restricciones del DBMS que está utilizando, está causando que el rendimiento sea inaceptablemente bajo ".