У меня есть таблица транзакций и транзакций, где таблица сделок имеет агрегированный столбец «TotalSales», который представляет собой просто количество транзакций на сделку.Обновление столбца агрегата в вопросе изоляции Вопрос
С помощью следующей команды существует ли вероятность того, что количество строк транзакции и общий объем продаж не будут синхронизированы (не включая удаление строк)? Используется ли для этого уровень изоляции по умолчанию? У нас есть много пользователей, совершающих покупки в то же время, поэтому я пытаюсь найти лучший способ справиться с этим.
BEGIN TRANSACTION
INSERT INTO [transaction] ...
UPDATE deal
SET TotalSales = (select count(*) from [transaction] where dealid = @dealId)
WHERE dealId = @dealId
COMMIT TRANSACTION
Одна из причин, побуждающих меня к объединенной колонке, - это исторические взгляды на сделки, показывающие общий объем продаж. Делает только последний день, поэтому запуск агрегата для всех сделок для определенного диапазона дат, например, кажется немного расточительным. – Marco
@Marco: Почему вы считаете, что агрегатные функции являются расточительными? –
Я думаю, что по соображениям производительности выполнение агрегата над транзакционной таблицей с тысячами записей (просмотр исторических данных) кажется, что может потребоваться небольшая де-нормализация. Может быть, im doin немного * предварительная оптимизация * здесь. Каковы ваши мысли о производительности для этого сценария. В основном, домашняя страница всегда должна показывать общий объем продаж для сделки и страницу истории, показывающую все предыдущие сделки и общие продажи. – Marco