9

Nuevo en el diseño de bases de datos. ¿Cuál es la mejor opción para el diseño de la base de datos de atributos del producto para cms? (Sugiera también otras opciones).(Diseño de la base de datos - atributos de los productos): ¿Cuál es la mejor opción para el diseño de la base de datos de atributos del producto?

la opción 1: 1 mesa

products{ 
id 
product_name 
color 
price 
attribute_name1 
attribute_value1 
attribute_name2 
attribute_value2 
attribute_name3 
attribute_value3 
} 

opción 2: 3 mesas

products{ 
id 
product_name 
color 
price 
} 

attribute{ 
id 
name 
value 
} 

products_attribute{ 
products_id 
attribute_id 
} 

Gracias, Yosef

+0

¿Con qué frecuencia cambian los atributos? ¿Añades/eliminas con frecuencia nuevos? Si no, use la opción 1 con los nombres de las columnas como el nombre del atributo. Si sus atributos son dinámicos, utilice la opción 2. Por supuesto, para la opción 2 tendrá un golpe de rendimiento. –

+0

También, como dice Bill, mire sus respuestas anteriores y sea un buen ciudadano y acepte las que le funcionaron. (Solo con un clic del mouse) –

+0

Agregué la votación, gracias por decírmelo. Nuestra aplicación web es dinámica: significa que cada usuario define sus atributos. El problema con la opción 2 es que será muy lento y con la opción 1 podemos dar como máximo 10 atributos para el producto que no conocemos el nombre y su valor definir para el usuario. – Yosef

Respuesta

22

Estás cometiendo un error común de diseño de la base de datos, almacenando el nombre en una columna y el valor en otra columna. Este no es un diseño de base de datos relacional.

Cada atributo debe nombrarse por el nombre de la columna. Color, páginas, tamaño de la camisa, fecha de publicación, deben ser nombres de columna.

Si cada tipo de producto tiene un conjunto distinto de atributos, existen otras soluciones. Vea mis respuestas a:

también favor lea esta historia: Bad CaRMa: Introducing Vision antes de implementar una base de datos diseñada alrededor de pares de nombre y valor como lo están haciendo.

+0

gracias Bill, doy mis votos también a otras mis preguntas, gracias por decirme. – Yosef

+0

Hola Bill, leí tus enlaces Gracias, Tengo una pregunta: ¿Por qué prefieres utilizar ** la herencia de tabla de clase ** y no ** la herencia de tabla única **? Explique, Gracias, Yosef – Yosef

+0

@Yosef: Con la herencia de la tabla de clase, es más claro qué grupos de columnas van juntas. También puede agregar una nueva tabla de subtipos en cualquier momento, con su propio conjunto de columnas específicas de tipo, sin necesidad de modificar la tabla principal que contiene columnas comunes a todos los subtipos. Esto es importante, por ejemplo, para MySQL, donde 'ALTER TABLE' es una operación costosa. –

1

Eso depende de lo que quieres de tu base de datos Si todos sus productos son del mismo tipo y tienen los mismos atributos, solo necesita hacer algo como eso:

products {id: integer, product_name: string, color: string, attribute_name1: string, attribute_name2: string. ..}. Attribute_name {} debería ser una palabra significativa, como "color" (que también es un atributo).

+0

No, no son lo mismo porque agrego 2 campos: 1. nombre 2. valor – Yosef

3

creo que la mejor aplicación para los atributos del producto que puede obtener es

Product_Tbl [ 
    ID 
    Name 
    more columns 
] 

Attribute_Tbl [ 
    ID 
    Att_Name 
] 

Product_Attribute_Tbl [ 
    Product_ID 
    Attribute_ID 
    Value 
] 

si sus productos no tienen los mismos atributos que puede utilizar esta estructura

0

Esto es ahora un viejo tema, pero el pensamiento podría ser interesante pensar cómo ha evolucionado esto (especialmente con más velocidad de procesamiento, el rendimiento puede jugarse a veces).

¿Alguna vez ha considerado almacenar cada atributo como un elemento separado en la tabla ...digamos mesa "2", donde la clave de nuevo al producto sería un id:

Product (table 1) 
{ 
    Product ID 
    Product Name 
} 

    Tags (table 2) 
{ 
    Tag ID 
    Higher Level tag ID 
    Description 
    Value 
    Product ID 
} 

Y que esta tabla contendría también un campo denominado "nivel más alto" por lo que podría encontrar el identificador único dentro de esta tabla cuyo atributo se creó como un nivel superior para este producto específico. De esta manera tiene algo llamado "etiquetado omnilevel".

Espero que esto ayude

Cuestiones relacionadas