Что можно улучшить в этой схеме SQL? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать базу данных для каталога обуви, но меня смущает хранение информации о размерах: я понятия не имею, как лучше всего хранить размеры для каждого предмета.Это моя первая схема, и я попытался решить эту проблему путем создания идентификатора для каждого элемента и item_id для каждого уникального элемента (с различным размером).enter image description here

Итак, вопрос: что я могу улучшить, чтобы сделать эту работу лучше и быстрее?(Таблица Products будет содержать более 2–3 мил) И это лучший способ хранения размеров?

Спасибо за тонну!

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Ну, я думаю, что есть несколько вещей, которые нужно улучшить.

  1. size_id, sport_id, vendor_id, shop_id в таблице Products не должно существовать.Если вы хотите сохранить текущий дизайн, вы должны иметь product_id в других соответствующих таблицах.На мой взгляд, ни одно из решений не удовлетворяет логике полностью, но лучше иметь несколько строк с product_id s в таблице Sizes, чем size_id s в таблице Products.Вы бы действительно хотели, чтобы строки продуктов в таблице Products не реплицировались из-за других свойств / внешних ключей.(Таким образом, тот же принцип относится к Categories в качестве примера.) В противном случае вы бы имели одинаковую строку Продукта, реплицированную с другим полом / группой / размером / магазином / продавцом / спортом, поэтому N строк в основном делятся данными.Вместо этого извлечение product_id в другие таблицы сделает ваши объединения более эффективными, и вы сможете более эффективно фильтровать такие вещи, как «Обувь с размером 37». Или, что еще лучше, создайте еще одну таблицу с именем Product - убедитесь, что у вас есть все столбцы, которые вы хотите иметь для каждого продукта.
  2. Клики / просмотры - если они рассчитаны, вы, вероятно, должны удалить ихтаблицы Products, они являются скорее областями аналитики, чем продуктами.Перейдите к собственной таблице (Analytics?) С product_id.
  3. Вы, вероятно, опечатали genger_id - в таблице - это должно быть gender_id.То же правило применяется, что и в пункте 1.
  4. Если группы / категории можно денормализовать (например, группа: обувь, категория: спортивная обувь), и вам не хватает одного из них, я предлагаю вам денормализоватьи объедините эти два.
  5. Как и в комментариях, вы должны обязательно проиндексировать поля внешнего ключа.
0 голосов
/ 18 декабря 2018

Производительность зависит от запросов и типа приложения (OLTP или OLAP).Также необходимо индексировать как минимум все столбцы внешнего ключа.

Кажется, что необходимы следующие таблицы: models (содержит общие спецификации продукта) и product_shops (M: M).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...