(дизайн базы данных, mysql) Мой дизайн базы данных хорош для базовой корзины? (Я новичок в дизайне базы данных) - PullRequest
1 голос
/ 25 мая 2010

Я новичок в проектировании баз данных, хочу быть уверенным, что у меня все хорошо. Пожалуйста, обратите внимание на часть моей базы данных:

Мой дизайн базы данных для базовой корзины:

//table that holds shopping cart items that customer choose(not press checkout and order //them)

**shopping_cart**
{
id (int)
product_id (int) fk
product_quantity (int)
customer_user_id (int) fk 
}

//table that holds product order data in time of checkout.(i hold them because supplier //can change after time products attributes value add some attributes or delete and change //the price of product)

**order**
{
id (int)
product_id (int)  fk
customer_user_id (int)  fk
}


//table that connect order  to attribute table for products attributes value in the moment //of   checkout

**order_attributes**
{
id (int)
order_id (int)  fk
attribute_id (int)  fk
}

//main product table
**product**
{
id (int)
sku (int) 
product_name (varchar)
supplier_user_id (int)  fk
}

//connection table many to many 
**product_attributes**
{
id (int) 
product_id (int)  fk
attribute_id (int)  fk
}

//table that holds products attributes (price, weight, color + new attributes that user //will create)

**attribute**
{
id (int)
product_id (int)  fk
attribute_name (varchar)
attribute_value(varchar)
}

Спасибо тебе

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

Хм, есть две таблицы, которые вы можете удалить из своего дизайна: order_attributes, product_attributes. В противном случае ваш запрос на выборку будет очень медленным из-за объединения из стольких таблиц. Вы можете сохранить атрибуты в виде столбцов в таблице заказа и продукта.

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

За мои деньги это плохой дизайн, потому что он использует таблицы атрибутов, которые являются таблицами EAV и которые могут вызвать проблемы с производительностью. Потратьте время на то, чтобы действительно определить атрибуты, которые вы хотите иметь для продуктов, на самом деле они в большинстве своем одинаковы для большинства продуктов (цвет, размер, единицы (упаковка из 10, один элемент и т. Д.). EAV - последнее средство.

Храните информацию о ценах и т. Д. В таблице заказа. Вы не хотите, чтобы цена изменилась, если цена продукта изменится позже в будущем.

Моя структура будет выглядеть примерно так: порядок ордерид, дата, кастомерид Информация для заказа идентификатор заказа, идентификатор товара, номер товара, номер изделия, имя товара, количество, цена, единица измерения, цвет, размер, другие атрибуты Заказ заметок идентификатор заказа, примечание

Продукты идентификатор продукта, номер изделия, имя продукта, идентификатор компании, цена продукта, цвет, размер, единица измерения

Лучше иметь нулевые столбцы (если у вас нет сотен атрибутов, которых у вас обычно не будет), если некоторые продукты не имеют одинаковых атрибутов) Кроме того, если вам нужны полные спецификации для продукта, подумайте о том, чтобы поместить их в большое поле varchar и добавить к нему полнотекстовый индекс. Это должно работать лучше, чем таблица EAV.

...