(Дизайн базы данных-атрибуты продуктов): что является лучшим вариантом для дизайна базы данных атрибутов продукта?
Я новый в дизайне базы данных. Что является лучшим вариантом для дизайна базы данных атрибутов продукта для 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 ответов
вы делаете распространенную ошибку в дизайне базы данных, сохраняя имя в одном столбце и значение в другом столбце. Это не реляционная база данных.
каждый атрибут должен быть назван именем столбца. Цвет, страницы, размер рубашки, дата публикации, должны быть имена столбцов.
Если каждый тип продукта имеет отдельный набор атрибутов, существуют другие решения. См. мои ответы на:
- таблица продукта, много видов продукт, каждый продукт имеет много параметров для сведения.
- как вы моделируете пользовательские атрибуты сущностей?
- вопрос дизайна: фильтруемые атрибуты, SQL
- как спроектировать схему базы данных для поддержки тегов с категориями?
- как определить структуру в организации на основе тегов?
и пожалуйста читать эту историю: Плохая Карма: Представляем 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".
надеюсь, что это помогает