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

Consulta sobre como crear más adecuadamente una base de datos

Estas en el tema de Consulta sobre como crear más adecuadamente una base de datos en el foro de Bases de Datos General en Foros del Web. Bueno lo que yo quiero preguntar es basicamente como montariais una base de datos por decir algo de productos. Osea con su categoría, subcategoría, familia ...
  #1 (permalink)  
Antiguo 12/09/2007, 02:18
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 2 meses
Puntos: 5
Información Consulta sobre como crear más adecuadamente una base de datos

Bueno lo que yo quiero preguntar es basicamente como montariais una base de datos por decir algo de productos.

Osea con su categoría, subcategoría, familia y como no productos.

Yo normalmente lo que hago es crear tabla de categoría, subcategoría, familias y productos donde categoría contendría id y nombre, subcategoría lo mismo y familia igual, y ahora aquí en productos es donde viene todo el meollo del asunto, yo normalmente creo dentro de productos, aparte de los campos que toquen, id_categoría, id_subcategoría y id_familia. Para así no tener q recorrerme todas las tablas si por ejemplo busco por categoria y muestro en ese momento productos.

Así que mi pregunta es... que método creeis que es mejor y porque?

A) Meter todos los ides dentro de la tabla productos, pq no ralentiza la base de datos y es más rápido de acceder.

B) Meter solo el id_familia y recorrer todas las tablas porqué sino duplicamos información

Bueno que podeis decir la vuestra, eh? ;) como si quereis poner una C o una D o asi hasta Z :P

La cosa es esa que me gustaría saber cual sería mejor método y porque, muchísimas gracias :)
  #2 (permalink)  
Antiguo 12/09/2007, 06:40
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Consulta sobre como crear más adecuadamente una base de datos

El diseño de una base de datos es algo muy estudiado. Para los más puristas requiere de un análisis de entidades y relaciones hasta obtener un modelo depurado y viable. Aunque en cierta medida pertenezco a ese grupo de puristas, me alejo de ellos en el punto que planteas.

En mi opinión, la rapidez debería primar sobre la "perfección del diseño" en cierta medida. Y en el caso concreto que planteas, yo creo que el artículo se merece los atributos de id_categoría, id_familia, id_subcategoría, etc.
Como bién planteas, esto nos lleva a repetir información en la base de datos, lo cuál es algo que deberíamos evitar, pero nos aporta mucha agilidad a la hora de recolectar los artículos de una subcategoría, por ejemplo.

Repetir información puede llevar a situaciones desagradables. Por ejemplo, supón que ya tienes la tabla llena de artículos y cada uno con su id_categoría, id_subcategoría, id_familia, etc, y decides cambiar los códigos de las subcategorías. Tendrás que cambiarlas en cada artículo además de la tabla de las subcategorías.

Yo creo que es un riesgo pequeño para el beneficio de rapidez que conseguimos.
Pero, ojo, una base con ese diseño no sería una base bién diseñada...

Saludos
__________________
Kelpie
  #3 (permalink)  
Antiguo 12/09/2007, 08:16
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 2 meses
Puntos: 5
Re: Consulta sobre como crear más adecuadamente una base de datos

Ya ya imagino q no sería bien diseñada por eso pq repetiriamos datos, por eso quería saber si lo q estaba haciendo era un desastre enorme o simplemente se puede hacer pero digamos q profesionalmente hablando sobre base de datos no llega a quedar "bonito" jeje

El tema de lo q dices de cambiar el id de categoria o subcategoria no sería problema pq todas estarían relacionadas entre si con una actualización en cascada para que no hubiera problemas de ese tipo jeje así que por esa parte no me preocupa ;)
  #4 (permalink)  
Antiguo 12/09/2007, 09:19
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Consulta sobre como crear más adecuadamente una base de datos

Buenas, no lo veo como un desastren enorme, es simplemente una desnormalización que es muy normal cuando prima el rendimiento, pero esté es para mi el punto clave, de verdad te prima el rendimiento hasta ese extremo???
Cuantos productos vas a tener???
La tabla tendrá una alta carga de consulta basandose en dicha desnormalización???
Si la respuesta es si, es buena elección.
Si la respuesta es no... para que te complicas!

Un saludo
  #5 (permalink)  
Antiguo 12/09/2007, 09:36
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Re: Consulta sobre como crear más adecuadamente una base de datos

Hola
Creo que tu modelo no es tan critico y no veo por que romper las reglas de la normalización
Analizando mejor te darás cuenta que puedes tener categorías, subcategorías y familias en una misma tabla, ya que todos contienen los mismos datos (id, nombre), de esa manera usas una tabla auto-referenciada, que te quedaría así, por poner un ejemplo:
Cita:
id | id_2 | Nombre
1 1 Micategoria
2 1 subcategoria
3 2 Familia
de esa manera creo que te seria mas facil

Saludos!
  #6 (permalink)  
Antiguo 13/09/2007, 01:20
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Consulta sobre como crear más adecuadamente una base de datos

Cita:
Iniciado por Genetix Ver Mensaje
Hola
Creo que tu modelo no es tan critico y no veo por que romper las reglas de la normalización
Analizando mejor te darás cuenta que puedes tener categorías, subcategorías y familias en una misma tabla, ya que todos contienen los mismos datos (id, nombre), de esa manera usas una tabla auto-referenciada, que te quedaría así, por poner un ejemplo:

de esa manera creo que te seria mas facil

Saludos!
Para eso lo dejas con una clave por tabla, no tienes que desnormalizar y te quitas de estos lios!

Genetix, creo que tu idea es una mala elección, pero es una opinion!

Un saludo
  #7 (permalink)  
Antiguo 13/09/2007, 09:33
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Consulta sobre como crear más adecuadamente una base de datos

Bueno, suponiendo que las categorias, subcategorias y familas estén encadenadas (cada categoria tiene subcategorias, y cada subcategoria tiene familas), un artículo debe pertenecer a una familia y punto. Sabiendo la familia puedes localizar la subcategoria y con ella, la categoria. Por lo que el artículo no debe tener como atributos la subcategoria ni la categoria, solo la familia, para estar normalizada.

Esto nos deja que, para seleccionar los artículos de una categoria debemos hacer una consulta encadenando FKs para sacar las subcategorias de esa categoria, y las familias de cada subcategoria.

Por el contrario, si desnormalizamos y a cada artículo le ponemos como atributo la categoria y la subcategoria, la consulta es inmediata...

Si la cantidad de artículos/categorías/subcategorías/familias es extensa, la ganancia de tiempo en esa consulta puede ser considerable... ...y las consecuencias de la desnormalización no son tan graves.

Yo me quedo con la desnormalización.
__________________
Kelpie
  #8 (permalink)  
Antiguo 13/09/2007, 10:04
 
Fecha de Ingreso: febrero-2002
Ubicación: Sabadell
Mensajes: 253
Antigüedad: 22 años, 2 meses
Puntos: 5
Re: Consulta sobre como crear más adecuadamente una base de datos

Me parecen bien vuestras respuestas :) y por lo q veo la gente apoya la desnormalización eso quiere decir que no lo hacia tan mal jeje

El caso que os he explicado es un caso hipotetico, pero que vamos que es un caso bastante típico y que suele aparecer bastante y hasta el momento en todos esos casos he usado la desnormalización pero es que el otro día mirandolo me dio como una sensación de q estaba muy mal... y quería saber vuestras opiniones pa proyectos futuros :)

Pero ahora mismo el mal karma está desapareciendo xP y va cada vez más a usarlo siempre ;)
  #9 (permalink)  
Antiguo 13/09/2007, 10:41
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Re: Consulta sobre como crear más adecuadamente una base de datos

Hola LoBo2024
Cita:
Me parecen bien vuestras respuestas :) y por lo q veo la gente apoya la desnormalización eso quiere decir que no lo hacia tan mal jeje
Difiero con eso, no conozco a algún administrador de Base de datos que apoye a la desnormalizacion (si cabe el término)

Cuando uno diseña una base de datos no solo tiene que modelar en base a la información que tiene, si no ademas tiene que pre veer como puede evolucionar la información y si eso no va tener un impacto en mi modelo.

Cuando mencionas que tienes categorías, sub categorías, familias, lo que se me viene a la mente es un árbol y como árbol eso puede evolucionar, (tener mas ramas y hojas), talvez mas adelante requieras clasificar a un producto por sub-familias (por poner un ejemplo), ¿que vas hacer?, ¿crear una tabla mas? y ¿si siguen aumentando las sub-clasificaciones?, ¿seguir aumentando tablas y aumentando campos? ¿eso es correcto?, para mi no.

Es por tal motivo que te recomendé usar una tabla auto-referencia , con lo cual se puede preever ese tipo de situaciones cuando las sub-clasificaciones aumente o disminuya, no tendrás que hacer ninguna modificación a tu modelo.

Dentro de ese modelo existen 2, Modelo Adyacente (el que te sugerí, y mas fácil de usar) y el modelo de árbol Traversal (un poquito mas complicado), Ambos modelos usan tablas auto-referenciadas

Hola seyko
Cita:
Para eso lo dejas con una clave por tabla, no tienes que desnormalizar y te quitas de estos lios!
¿? no entendí, me puedes explicar mejor tu frase porfa

Cita:
Genetix, creo que tu idea es una mala elección, pero es una opinion!
¿Por que crees que sea una mala elección?

Saludos a todos!
  #10 (permalink)  
Antiguo 18/09/2007, 10:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Consulta sobre como crear más adecuadamente una base de datos

Cita:
Iniciado por Genetix Ver Mensaje
Hola LoBo2024
Cuando mencionas que tienes categorías, sub categorías, familias, lo que se me viene a la mente es un árbol y como árbol eso puede evolucionar, (tener mas ramas y hojas), talvez mas adelante requieras clasificar a un producto por sub-familias (por poner un ejemplo), ¿que vas hacer?, ¿crear una tabla mas? y ¿si siguen aumentando las sub-clasificaciones?, ¿seguir aumentando tablas y aumentando campos? ¿eso es correcto?, para mi no.
Con esto te contesto, para mi crear una nueva tabla si es correcto, sobre todo si pensamos en una tabla que va a crecer mucho hacer un join consigo misma una vez por cada nivel del arbol se irá notando en el rendimiento.

Pero vuelvo a repetir, es una opinion o es cuestion de gustos

Ahora en el resto estoy de acuerdo contigo, la desnormalización se utiliza cuando no queda otra o por cuestiones de rendimiento!!

Un saludo
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 10:06.