Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/08/2011, 06:15
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Eficiencia de campos y tablas

En primer lugar, trata de no ponerte a inventar la rueda: Tu problema ya se le ha presentado a casi todos los que trabajan con catálogos de productos en la web, por lo que las soluciones se pueden encontrar documentadas. Solamente hay que buscar bien.

Por otro lado, ten en cuenta que para un motor de base de datos, 10.000 registros es menos que una nimiedad. Eso no es ni siquiera "algo mediano". Para hablar de tablas muy grandes tienes que empezar por pensar en decenas de millones de registros. Recién allí estás hablando de tablas grandes, y aún así eso tiene soluciones.

Finalmente, cuestiones de diseño: trata de no pensar como programador. El razonamiento del diseño de bases de datos es algo diferente.
Las tablas no se crean para "repartir" el mismo tipo de datos en forma liviana, sino todo lo contrario; se crean entre otras cosas para poder mantener la unidad de las entidades que se están representando. En todo caso se parecen más a las clases del modelo orientado a objetos.
- Si tienes un único catálogo, este representa la tabla superior; si tiene subcatálogos, estos se almacenan en una única tabla dependiente de la anterior por su clave.
- Si los subcatálogos tienen diferencias de atributos, es decir, no tienen atributos comunes, cada subcatálogo compone una tabla distinta, en una herencia.
- Entendamos una cosa: En este contexto el subcatálogo podría estar compuesto en realidad por los productos que se registran en él, o sea, bien podría ser una relación N:N entre productos y catálogo.
- SI el subcatálogo es una entidad con identidad propia, dependiente de la tabla mabre, el listado de productos es una relación entre esta tabla y la de productos.
- Lo que no resulta eficiente, ni se debe hacer (y todos los programadores hacen) es crear dos tablas para guardar datos con los mismos atributos. Eso es un error desde el puntos de vista del diseño, porque si es el uso o un sólo atributo el que determina la diferencia (como podría serlo una categoría, entonces eso se representa con un atributo en la misma tabla... y una relación N:1 con la tabla que administre ese valor.

Hay mucha tela para cortar, pero para darte una ayuda visual, este sería, por ejemplo, un catálogo correspondiente a un Website dedicado a productos:

Tipo Amazon.Com:



Tpo eBay:



Librería, en general:
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)