Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Eficiencia de campos y tablas

Estas en el tema de Eficiencia de campos y tablas en el foro de Mysql en Foros del Web. Buenas a todos! Estoy liado con una web en la que tengo que utilizar una base de datos para almacenar unos artículos. El numero de ...
  #1 (permalink)  
Antiguo 12/08/2011, 05:05
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Busqueda Eficiencia de campos y tablas

Buenas a todos!

Estoy liado con una web en la que tengo que utilizar una base de datos para almacenar unos artículos. El numero de artículos es muy grande, podrá rondar los... 10000, aunque estas quedarían ordenadas en "catalogos" de 10 cada uno. Mi duda, es como organizar la base de datos y se me han ocurrido dos formas.

Dentro de la base de datos, creo varias tablas "libros": libros0, libros1, libros2... que contengan 5 catálogos. Esto me obligaría a añadir a "catálogos" un campo llamado cat, para indiciarme si el catálogo es el 0, el 1...

Quedaría:

libros0: cat0, cat1,cat2,cat3,cat4
libros1: cat5, cat6, cat7, cat8, cat9
...

La otra forma, es ahorrarme el campo creando una tabla para cada catálogo.

¿Cómo lo véis mejor?

Un saludo y gracias! :)
  #2 (permalink)  
Antiguo 12/08/2011, 06:15
Avatar de 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)

Etiquetas: campos, eficiencia, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:02.