(Дизайн базы данных-атрибуты продуктов): что является лучшим вариантом для дизайна базы данных атрибутов продукта?

Я новый в дизайне базы данных. Что является лучшим вариантом для дизайна базы данных атрибутов продукта для cms?(Пожалуйста, предложите и другие варианты).

Вариант 1: 1 Таблица

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

вариант 2: 3 стола

products{
id
product_name
color
price
}

attribute{
id
name
value
}

products_attribute{
products_id
attribute_id
}

спасибо, Йозеф!--6-->

4 ответов


вы делаете распространенную ошибку в дизайне базы данных, сохраняя имя в одном столбце и значение в другом столбце. Это не реляционная база данных.

каждый атрибут должен быть назван именем столбца. Цвет, страницы, размер рубашки, дата публикации, должны быть имена столбцов.

Если каждый тип продукта имеет отдельный набор атрибутов, существуют другие решения. См. мои ответы на:

и пожалуйста читать эту историю: Плохая Карма: Представляем Vision прежде чем реализовать базу данных, разработанную вокруг пар имя-значение, как вы делаете.


Я думаю, что лучшая реализация для атрибута продукта вы можете сделать это

Product_Tbl [
    ID
    Name
    more columns
]

Attribute_Tbl [
   ID
   Att_Name
]

Product_Attribute_Tbl [
    Product_ID
    Attribute_ID
    Value
]

Если ваши продукты не имеют те же атрибуты, вы можете использовать эту структуру


зависит от того, что вы хотите от вашей базы данных. Если все ваши продукты одного типа и имеют одинаковые атрибуты, вам просто нужно сделать что-то вроде этого:

продукты{идентификатор: целое число, связанное с: цепочка, цвет: строку, attribute_name1: строку, attribute_name2: строка...}. Attribute_name{} должно иметь смысловое слово, как и "цвет" (который также является атрибутом).


это теперь старая тема, но подумал, что может быть интересно подумать о том, как это развивалось (особенно с большей скоростью обработки, производительность может быть поставлена в разы).

вы когда-нибудь рассматривали сохранение каждого атрибута как отдельного элемента в таблице ... скажем, Таблица "2", где ключом к продукту будет id:

    Product (table 1)
{
    Product ID
    Product Name
}

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

и что эта таблица будет содержать также поле под названием "более высокий уровень", чтобы вы могли найти уникальный идентификатор в этом таблица атрибутов был создан как более высокий уровень для данного конкретного продукта. Таким образом, у вас есть что-то под названием "omnilevel tagging".

надеюсь, что это помогает