Нормализация базы данных для интернет-магазина обуви

ОБНОВЛЕНИЕ

Вот моя текущая диаграмма базы данных для онлайн-обуви, которая будет продаваться

  • обувь, которая будет иметь разные категории (каблуки, танкетки, сандалии, скидка на каблуки и т. д.)
  • каждая обувь будет иметь разный цвет, разный размер. для каждого цвета и размера,
  • у него будет другой запас и, возможно, другой тип заказа (готовый запас / предварительный заказ)
  • для каждого размера и цвета, возможно, у него будет разная цена
  • и каждая обувь разного размера и цвета, они (возможно) будут иметь разное изображение, а не общие

введите здесь описание изображения

я делаю это правильно? что я должен сделать, чтобы улучшить эту базу данных? я действительно очень ценю любые отзывы / вклад / критику

ЗАВЕРШИТЬ ОБНОВЛЕНИЕ

я новичок в дизайне баз данных и путаюсь с дизайном базы данных для интернет-магазина (база данных MySQL)

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

Я придумал эти таблицы:

универсальная_обувь

id
name
category_id
details
image

цвета

id
color

размеры

id
size
size_details

конкретные_обувь

id
generic_shoes_id //references to generic_shoes
name             // if the owner wants to make another name, if not then use generic_shoes' name
order_type       //ready stock or pre order

затем я придумываю сводные значения colors_shoes и size_shoes с отношением «многие ко многим»: colors_specific_shoes

id
color_id
specific_shoes_id

размеры_конкретной_обуви

id
size_id
specific_shoes_id

тогда я думаю, что цвет и размер diff будут иметь запас diff и, возможно, другую цену, поэтому я придумал:

обувь_продукт_детали

id                //will be used in the orders table
colors_shoes_id   //reference to pivot colors_shoes
sizes_shoes_id    //reference to pivot sizes_shoes
specific_shoes_id //reference to specific_shoes
stock             //each color and size will have diff stock
price             //each color and size maybe will have diff price
weight            //each size will have different weight

я думал, что эти таблицы будут работать нормально, но потом я подумал, должен ли я использовать эту таблицу вместо этого?

удалить :

  1. размеры_специфические_обувь
  2. colors_specific_shoes

и просто используйте идентификатор цвета и идентификатор размера в таблице Specific_shoes_details: (в приведенной ниже таблице я просто ссылаюсь непосредственно на таблицу цветов и размеров)

таблица подробных сведений о конкретном продукте

id                      //will be used in the orders table
color_id                //reference to colors table
size_id                 //reference to sizes table
specific_shoes_id       //reference to specific_shoes
stock                   //each color and size will have diff stock
price                   //each color and size maybe will have diff price
weight                  //each size will have different weight

я думаю, проблема в том, что с последней таблицей -> каскад внешнего ключа, если цвет/размер удалены, тогда он также удалит строку Specific_shoes_details.

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

Спасибо

я был бы очень признателен за любую помощь/отзыв


person mohur    schedule 11.08.2013    source источник


Ответы (2)


Я думаю, вы хорошо поработали над дизайном базы данных.

Я бы пошел с твоим последним. Маловероятно, что вы когда-нибудь захотите удалить цвет или размер. Вы больше не собираетесь заниматься бизнесом в 18 размере?

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

Я бы также добавил описание и/или изображения к определенной обуви.

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

person John Tseng    schedule 13.08.2013
comment
о, хорошо, удаление означало бы сделать цвет неактивным, поэтому добавьте столбец в определенную обувь? т.е. = когда конкретная обувь не имеет цвета в сводных таблицах, тогда цвет неактивен? хм отличная идея! - person mohur; 13.08.2013
comment
я пока не могу дать награду, нужно подождать 22 часа, я дам ее после того, как придет время - person mohur; 13.08.2013
comment
@mohur Я думал добавить активный столбец в таблицу цветов, чтобы вы могли отключить весь цвет за раз. Или вы можете добавить активный столбец к конкретным сведениям о продукте. Я бы также назвал это инвентарем или чем-то подобным. Таким образом, вы можете отключить ту или иную комбинацию цветов. - person John Tseng; 13.08.2013

Из описания проблемы мне кажется, что есть какая-то сложность, которую я не в состоянии понять. Мне пришло в голову, что вы должны быть в состоянии исключить определенные таблицы.

Вот схема, которую я предлагаю на ваше рассмотрение.

  1. цвета (color_id, color_name, активный, ...)
  2. размеры (size_id, size_name, size_description, активный, ...)
  3. категории (category_id, category_name, active, ...)
  4. изображения (image_id, image_path, активно, ...)
  5. order_mode (mode_id, mode_name, mode_description, ...)
  6. обувь (shoe_id, color_id, size_id, category_id, image_id, mode_id, запас, цена, вес, ...)

У вас может быть другой уровень детализации, если ваши размеры также требуют кодирования страны. В таком случае рассмотрите

  1. размеры (size_id, size_name, country_id, size_description, active, ...)
  2. страна (country_id, country_name, активная, ...)

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

Я считаю, что преимущество этой схемы заключается в том, что она проще и, насколько я могу судить, обеспечивает тот же уровень нормализации, что и предложенный вами.

person amrith    schedule 13.08.2013