1 | ||||||
Вычисляемое поле одной таблицы по количеству записей в другой: триггер?18.07.2013, 18:26. Показов 3985. Ответов 12
Метки нет (Все метки)
Добрый день!
Вопрос начинающего: необходимо, чтобы поле Tours.Capacity автоматически вычислялось по количеству записей в Tourists-Tours соответствующего TourID (см. вложение). Пока что решил задачу в лоб триггерами AFTER INSERT, AFTER DELETE:
Или я пытаюсь изобрести велосипед и достаточно будет обойтись JOIN для вывода количества?
0
|
18.07.2013, 18:26 | |
Ответы с готовыми решениями:
12
Посчитать количество записей в одной таблице и передать значение в поле другой таблицы Вычисляемое поле с данными из другой таблицы Вычисляемое поле на форме (данные из другой таблицы) Создать вычисляемое поле в таблице на основе полей другой таблицы |
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
|
|
18.07.2013, 20:08 | 2 |
Можно в [dbo].[Tourists-Tours] одним INSERTом вставить 2 записи?
0
|
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
|
|||||||||||
18.07.2013, 22:54 | 3 | ||||||||||
Индексированное представление позволит обойтись без тиггера(ов). Тем более, что он неправильный.
1.
1
|
19.07.2013, 10:09 [ТС] | 4 |
Нет, один INSERT - одна запись.
Но это искусственное ограничение в силу моих недостаточных знаний в этой области. Если можно будет обойтись без триггеров или реализовать обработку вставки нескольких записей, то конечно же его не будет. Добавлено через 11 минут Спасибо, работает как требовалось
0
|
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
|
|
19.07.2013, 10:18 | 5 |
Где это ограничение??
Кто помешает мне выполнить INSERT двух записей? Вы проверяете на входе в триггер, что записей не больше одной? Нет! Типичный пример говнокода, который работает только в очень специальных случаях и с грохотом падает при малейшем отклонении от них.
1
|
19.07.2013, 11:35 [ТС] | 6 |
Вам - никто. А пользователю, работающему с формой, которая добавляет записи, - я как разработчик этой формы. И если потребуется, то будут реализованы проверки/ограничения на стороне сервера.
И почему вы решили, что это будет окончательный вариант решения задачи? Пока что это только дискуссия. Добавлено через 8 минут iap, Возможно, это действительно неправильный подход - создавать код для "специальных случаев". Но я для того и здесь, чтобы понять, где я ошибаюсь.
0
|
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
|
|
19.07.2013, 11:41 | 7 |
Дык, я и показываю, где.
Может, не всё показываю, но я же не один на форуме? В общем, форма какая-то тут совершенно не при чём. Клиент-серверная технология - это в общем случае один сервер и сколько угодно клиентов, которые должны посылать серверу корректные запросы, а он их должен корректно обработать. Ваш клиент вставляет по одной строке, а другой вставляет сразу миллион! И это нормальная ситуация.
0
|
19.07.2013, 13:09 [ТС] | 8 | |||||
В любом случае, спасибо за указание на грабли
Добавлено через 1 час 7 минут Правильно ли будет делать вывод Capacity вот так:
0
|
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
|
||||||
19.07.2013, 15:23 | 9 | |||||
Вот так:
1
|
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
|
|
19.07.2013, 16:15 | 10 |
invm, а почему LEFT JOIN а не INNER JOIN ? Это же scan вместо seek ? А TourID во view присутствуют все, и однократно...
0
|
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
|
|
19.07.2013, 16:52 | 11 |
Почему вы так решили?
В том-то и дело, что не все, а только те для которых есть записи в [Tourists-Tours].
0
|
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
|
|||||||||||
19.07.2013, 18:28 | 12 | ||||||||||
в план заглянул Никогда не пользовался индексированными представлениями - интересно стало))
Кликните здесь для просмотра всего текста
Да, протормозил... Добавлено через 48 минут С другой стороны, ТС указал INNER JOIN TourList, значит и vTourCapacity нужно тоже по INNER JOIN подключать... Добавлено через 2 минуты а еще точнее,
0
|
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
|
|
20.07.2013, 16:01 | 13 |
Ну план разный может быть. При lef join будет merge и 2 scan'а. А вот при inner может быть, в зависимости от кардинальности, либо скан по vTourCapacity и seek по Tours + Nested Loops, либо merge и 2 scan'а.
Но ТС'у-то нужен left...
0
|
20.07.2013, 16:01 | |
20.07.2013, 16:01 | |
Помогаю со студенческими работами здесь
13
Вывод числа записей одной таблицы для соответствующих записей другой Использование двух записей одной таблицы в одной записи другой Обновить поля одной таблицы - полями другой используя триггер Переместить два столбца одной таблицы со строкой в поле другой таблицы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |