[B]Ante todo les doy mil gracias por su tiempo para resolver esta duda, bueno, aquí planteo mi punto de vista, entiendo muy bien estos dos esquemas que plantean, pero solo tengo que no me cuadra bien . Por ejemplo: el esquema que plantea
paloto es perfecto y se adecua perfectamente a mi requerimiento, esta muy bien normalizado, pero al normalizar tanto no se pierde algo de performancia ? , me refiero a esta parte de su diseño:
Categorías
ID / NOMBRE / CATEGORIA_PADRE
1 / Libro / NULL
2 / Ordenador / NULL
3 / Coche / NULL
4 / Portátil / 2
Caracteristicas
ID / NOMBRE / CATEGORIA_ID
1 / Numero de paginas / 1
2 / Autor / 1
3 / Tapas duras / 1
4 / Memoria RAM / 2
5 / Marca / 2
6 / Potencia motor / 3
7 / Consumo / 3
8 / Duración batería / 4
lo entiendo perfectamente , pero lo que plantea
gnzsoloyo me llama la atencion , yaque podriamos reemplazar esa parte con esto(en realidad no se si es mas optimo tenerlo en una tabla o en dos, aver si me pueden aclarar esa parte), pero agrenado una columna adicional
FLAG, el cual me dira si es una categoria o una caracteristica o atributo:
FLAG => 1 -> CATEGORIA ; 2 -> CARACTERISTICA O ATRIBUTO
Código SQL:
Ver originalCategoria
ID |FLAG | NOMBRE | CATEGORIA_PADRE
1 | 1 |Libro | NULL
2 | 1 |Ordenador | NULL
3 | 1 |Coche | NULL
4 | 1 |Portatil | 2
5 | 0 |Numero de paginas | 1
6 | 0 |Autor | 1
7 | 0 |Tapas duras | 1
8 | 1 |Memoria RAM | 2
9 | 0 |Marca | 2
10 | 0 |Potencia motor | 3
11 | 0 |Consumo | 3
12 | 0 |Duracion bateria | 4
13 | 0 |1 hora | 12
14 | 0 |2 horas | 12
15 | 0 |4 horas | 12
16 | 0 |6 horas | 12
Se que ese FLAG
¡NO SERIA NECESARIO! si sensamos que las caracteristicas siempre la dan el ultimo hijo de una categoria. es decir, si ya no tiene hijos, entonces es una caracteristica. "almenos es lo que creo que penso
gnzsoloyo", pero pero si vemos el caso de la categoria "DVD'S Y MOVIES(Entendiendo que esta categoria tene mas subcategorias)", por ejemplo; NOTAREMOS QUE ESTA YA TIENE caracteristicas como "Formato, Rating ,etc" , ese es un caso, lo que trato de decir es que no es necesario ir al ultimo nodo para determinar si es una caracteristica o no, ya que en algunos casos no cumple.
ahora, porque se requiere esto ? , bueno, seria util por cuastion de criterio de busqueda , ya que no seria necesario ir a la ultima sub sub categoria para realizar el filtro correspondiete en la busqueda.
es como lo hace ebay, aqui un ejemplo:
[URL="http://dvd.shop.ebay.com/?_from=R40&_trksid=p3907.m38.l1313&_nkw=&_sacat=11 232"]http://dvd.shop.ebay.com/?_from=R40&_trksid=p3907.m38.l1313&_nkw=&_sacat=11 232[/URL]
si nos fijamos como trabaja el buscador de ebay, nos daremos cueta que tiene ese comportamiento .
Finalmente, para vincular los valores de las características con los productos, usaríamos lo que planteo
paloto en esta tabla.
Caracteristica_Producto
ID / CARACTERISTICA_ID / PRODUCTO_ID / VALOR
1 / 1 (Numero de páginas) / 1 (El Código da Vinci) / 1400 (páginas)
2 / 2 (Autor) / 1 (El código...) / Dan Brown
3 / 1 ( Núm. Pag.) / 2 (Los Pilares...) / 1300 (pág.)
4 / 8 (Duracion bateria) / 4 (Acer...) / 10 (horas)
donde CARACTERISTICA_ID es un id de la tabla CATEGORIA pero con el FLAG en 0,
diciendo con esto que nos referimos a una caracteristica y no a una categoria.
ese es mi punto de vista , nose si estoy hablando piedras, XD , pero como esta parte es bien delicada en la aplicacion que estoy desarrolando, me interesa mucho que sea lo mas hermosaq que pueda, XD.