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

Я новичок в проектировании баз данных. Что является лучшим вариантом для разработки базы данных атрибутов продукта для 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
}

Ответы [ 4 ]

24 голосов
/ 31 мая 2010

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

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

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

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

3 голосов
/ 18 октября 2011

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

Product_Tbl [
    ID
    Name
    more columns
]

Attribute_Tbl [
   ID
   Att_Name
]

Product_Attribute_Tbl [
    Product_ID
    Attribute_ID
    Value
]

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

1 голос
/ 31 мая 2010

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

products {id: integer, product_name: string, color: string, attribute_name1: string, attribute_name2: string ...}. Attribute_name {} должно иметь значащее слово, точно так же, как «color» (который тоже является атрибутом).

0 голосов
/ 21 января 2017

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

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

    Product (table 1)
{
    Product ID
    Product Name
}

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

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

Надеюсь, это поможет

...