Я создаю сайт электронной коммерции с нуля и должен создать специальную страницу конфигурации продукта.
Это только 1 тип продукта, но он настраивается на нескольких уровнях:
Мой вопрос в том, что бы это выглядело в типичной базе данных MySQL. У меня есть таблица для каждого типа опций или только одна таблица, и как-то дайте ей достаточно столбцов и сохраните все параметры? Мне нужно будет хранить заказы и иметь возможность хранить информацию для заказа в таблице.
Я также хочу иметь возможность выпускать готовые продукты, которые не настраиваются, как обычный магазин.
Любая помощь приветствуется!
Я предлагаю вам перейти с одной главной таблицей со всей информацией о продукте и множеством таблиц поиска, которая соединяется с главной таблицей.
Он должен выглядеть так:
Product_table:
ID primary key,
ColorInt int foreign key lkp_Color_table.ID,
Material_int foreign key lkp_Material_table.ID,
// snip the rest
И вот таблица поиска:
lkp_color_table:
ID primary key,
ColorStr varchar,
description varchar
lkp_Material_table:
ID primary key,
MaterialStr varchar,
description varchar
Product_table
может выглядеть так:
ID||ColorInt||Material
1 ||1 ||1
2 ||1 ||2
В то время как lkp_color_table
может выглядеть так:
ID||colorstr||description
1 ||red ||red color
2 ||blue ||blue color
Обратите внимание, что lkp_color_table
может содержать неиспользованный color
, то же самое касается других таблиц поиска. Поэтому, если у вас есть 30 возможных цветов, вам просто нужно заполнить lkp_color_table
30 элементами и т.д.
Нет необходимости создавать отдельный Product_id
для каждой комбинации цветовых материалов, вам просто нужно создать Product_id
, если вы его используете.
2 + N таблицы:
Когда вы добавите второй тип настраиваемого продукта в будущем, вы просто создадите AnotherSpecialKindOfProduct.
Надеюсь, что это достаточно ясно, чтобы следовать.
Главное преимущество заключается в том, что все ваши продукты имеют общие атрибуты (столбцы "Продукты" ), но могут также иметь расширенные атрибуты.
Вы можете легко выбрать все необходимое, используя LEFT JOINing Products для SpecialKindOfProduct и т.д.
Я бы сказал, что вам нужно:
OrderTable (OrderID, CustomerID, дата, цена, отправка,...)
OrderProductTable (OrderID, ProductID, количество)
ProductTable (ProductID, StandardBit, ColorID, Option2ID,..., OptionNID); StandardBit - знать, является ли продукт стандартным или настраиваемым.
CustomerTable (CustomerID,...)
Отгрузка()
OptionTable для каждой настраиваемой опции (OptionID, Описание).