A CTE
против View
- это две разные вещи.View
подходит для запроса, который будет использоваться в нескольких местах, A CTE
доступен только в запросе, в котором он определен.Я обычно не использую CTE
, кроме как для замены сложного подзапроса.В вашем случае условие достаточно простое, чтобы содержаться в предложении where, поэтому я не вижу необходимости вносить дополнительную сложность.
Некоторые люди скажут вам не запрашивать таблицу непосредственно в программе, новсегда использовать вид.Таким образом, вы добавляете дополнительный слой изоляции между программой и базой данных, и вы все равно можете определять структуры записей с помощью ExtName
, и вам не нужно беспокоиться об изменениях в таблице, если они не влияют на само представление.В этом случае у вас, скорее всего, будет отдельное представление для каждой программы, которая использует таблицу.
Я склонен использовать гибрид этих методов.Я запрашиваю таблицы, CTE или Views в зависимости от ситуации и четко определяю свои структуры записей в программе.Я предпочитаю просто запрашивать таблицу, но если у меня сложная логика запросов, уникальная для программы, я буду использовать CTE.У меня есть несколько представлений, но они ограничены запросами, которые происходят в нескольких программах, где я хочу убедиться, что одна и та же логика применяется последовательно.