SQLRU.net
Разработка приложений баз данных

Начало » Дискуcсии » Проектирование БД » Группировка товаров в MS SQL (Как оптимальнее сделать группировку справочника товаров)
Группировка товаров в MS SQL [сообщение #2311] Sun, 21 May 2023 20:44 Переход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 91
Зарегистрирован: April 2023
Member
MS SQL. Есть справочник товаров - 2 млн позиций. Каждый товар имеет группировку: тип, подтип, подподтип (например, Одежда мужская->коллекция 2023->Рубашки). Сейчас это хранится все в трех полях справочника товаров. С товарами надо быстро работать по группировке - нужно выбрать быстро все товары по заданной группировке - например, оператор выбирает "тип" - нужно в грид загрузить все товары одного типа (допустим 100 тыс. записей), потом из них может выбрать подтип - в грид должны попасть уже 5 тыс. товаров. В завершении он может выбрать подподтип - в гриде должно остаться допустим 100 товаров. Именно в такой последовательности, так как он может выбрать только тип и работать в гриде встроенными фильтрационными средствами (там есть колонки, цена, скидка, размер, цвет и куча других). Затем по этим типам/подтипам надо формировать итоговые отчеты - сколько продано товаров такого-то "типа", из них - столько-то такого-то "подтипа" и т.п.
По классике - нужно группировку хранить в виде дерева со связями ID-ParentID, но это вызывает тормоза при выборке - нужно рекурсивно получать каждый раз всех потомков, а потом еще и выборку самих товаров на его основе делать - долго каждый раз. Есть более изящное решение? HierarhyID вроде современннее, но его не поддерживают компоненты Delphi. Нужно вручную грузить ветки.
Re: Группировка товаров в MS SQL [сообщение #2315 является ответом на сообщение #2311] Mon, 22 May 2023 10:00 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 368
Зарегистрирован: June 2022
Senior Member
Я бы делал в лоб: так и оставил 3 поля в каждой записи. Это сильно упрощает выборки.
Можно конечно сделать и древовидный справочник: два поля ID и ParentID, но это сложнее в плане работы с SQL.
Re: Группировка товаров в MS SQL [сообщение #2317 является ответом на сообщение #2311] Mon, 22 May 2023 12:39 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
есть в проектировании БД такой приём - денормализация.
когда отходим от К.Дейта и Э.Кодда ради повышения производительности на выборках.
ничего плохого в этом нет.
хоть 10 полей добавь - пофиг.
эстеты могут морщить носик, но и тьфу на них!
Re: Группировка товаров в MS SQL [сообщение #2323 является ответом на сообщение #2317] Mon, 22 May 2023 21:04 Переход к предыдущему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 91
Зарегистрирован: April 2023
Member
Спасибо, успокоили мою совесть, так и сделаю. Smile А то потом еще дерево развернуть в отчет (там хотят видеть общее по группе, подгруппе, подподгруппе)
Следующая тема: Модели БД
Переход к форуму:
  


Текущее время: Sun Dec 22 12:30:28 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00871 секунд