У меня есть представление TSQL. Помимо нескольких столбцов это довольно просто, потому что он просто делает несколько объединений, а затем склеивает все вместе, чтобы представить красивый вид, каким он должен быть. Тем не менее, несколько столбцов, которые не так просты, очень сильно расширяют код представления, теперь возникают новые требования, что делает недействительными бизнес-логику сложных столбцов.A (T) Sql-представление, содержащее слишком много бизнес-логики
Не вдаваясь слишком много в подробности, есть таблица в моей базе данных:
tblEmployment
Это состоит из рядов «заработкам». Каждый раз, когда любая из столбцов в строке, для данного изменения занятости (скажем, employmentTitle
изменения), то тока строки вставляется в другую таблицу tblEmploymentHistory
и строк в tblEmployment
изменяется таким образом, он содержит новейшую employmentTitle
.
По существу, что делает вид, заключается в том, что он пытается присоединиться к tblEmployment
на tblEmploymentHistory
с уникальным EmploymentIdentifier
, что имеет смысл.
Более сложный столбец в представлении попытается вычислить число (elapsedTime
для каждой строки), выполнив различные вычисления из строк, которые он объединил (т. Е. От tblEmployment and tblEmploymentHistory
). Чтобы получить прошедшее время, он выполняет вычисления на основе продиктованной бизнес-логики, например. только конкретные столбцы datetime в таблице предыстории должны подсчитываться в течение всего прошедшего времени, и это должно быть сделано только в том случае, если другие столбцы в этой строке установлены на определенные значения и т. д.
Теперь, когда появились новые требования, бизнес-логика сложнее, чем раньше. Мне сложно расширить представление, включив его, поскольку оно становится очень грязным, и я чувствую, что это можно сделать гораздо более структурированным на прикладном уровне, где также находится остальная бизнес-логика!
Правильно ли это отменить просмотр и вместо этого переместить его на прикладной уровень моего приложения? Очевидно, что преимущество в том, что это быстро, и выполнение вычислений в коде для примерно 100 000 строк займет некоторое время. Тем не менее, его можно оптимизировать, отфильтровывая строки, чтобы сделать число около 10.000.
Что такое «стандартный» и самый чистый способ решения этой проблемы?
Почему вид, а не хранимая процедура? – Paolo
@ Паоло не знаю. Будет ли хранимый процесс быть здесь? Я сам не создал представление, моя задача - просто продлить его, но это очень сложно сделать. Если я использую хранимую процедуру, было бы лучше? – DSF
, используя хранимую процедуру, вы можете положиться на таблицы CTE и temp, которые imho значительно упростят вашу задачу. вы не делились никаким кодом, поэтому я не могу точно сказать, но это очень вероятно. – Paolo