Как посчитать, сколько раз конкретный товар добавляется? - PullRequest
0 голосов
/ 17 июля 2011

Я работаю над веб-приложением, разработанным в ASP.Net с использованием C #. Наряду с другой функцией, есть функция, которая позволяет пользователям добавлять различные элементы в свой личный список. Таблицы базы данных, относящиеся к вышеупомянутым функциям:

-------------------------
| Item                  |
-------------------------
| ItemId (Primary Key)  |
| . . . & other attribs |
-------------------------

---------------------------
|List                     |
---------------------------
|ListId (Primary Key)     |
|. . . and other attribs  |
---------------------------

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

---------------------------------
|ItemList                       |
---------------------------------
|ItemId (Foreign Key)           |
|ListId (Foreign Key)           |
|. . . and other Attributes     |
---------------------------------

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

  1. Я добавляю новый атрибут в таблицу элементов и увеличиваю это значение на единицу каждый раз, когда определенный элемент добавляется в определенный список.
  2. Второй вариант - когда мне нужно знать, сколько Если конкретный элемент добавляется в список, тогда я буду применять SELECT Count Query (с предложением where) для таблицы ItemList

Пожалуйста, предложите, какой подход лучше и почему? Я более склонен ко второму подходу, и в отношении эффективности, я думаю, у обоих одинаковые

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

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

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

Опция # 2 будет работать лучше, если у вашего приложения больше вставок / удалений по сравнению с чтениями. Причина этого в том, что SQL Server нужно рассчитывать количество только тогда, когда это необходимо.

Я бы предложил использовать вариант № 2, если вы не обнаружили проблем с производительностью, из-за которых вы захотите использовать другой подход.

2 голосов
/ 17 июля 2011

Второй подход лучше с точки зрения чистоты данных.Позвольте данным рассказать свою собственную естественную историю - если вы можете определить, сколько списков содержит элемент, выполнив быстрый Select count(ListId), ItemID as CountOfLists from ItemList Group By ItemID, тогда это гораздо более привлекательный вариант, чем поиск всех точек в коде, которые модифицируют ItemListи убедитесь, что они обновляют Item.Count

Вы бы рассмотрели первый вариант только , если вы хотите денормализовать / предварительно агрегировать данные по соображениям производительности.Вам нужно проделать дополнительную работу, чтобы убедиться, что столбец Count в вашей таблице Item всегда точен (или в конечном итоге точен)

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