Другое использование, которое, кажется, не упоминалось ни в одном из предыдущих ответов, - это более простое развертывание изменений структуры таблицы.
Скажем, вы хотите удалить таблицу (T_OLD), содержащую данные для активных пользователей, и вместо этого использовать новую таблицу с аналогичными данными (с именем T_NEW), но в которой есть данные как для активных, так и для неактивных пользователей, с одним дополнительным столбцом " активный».
Если в вашей системе есть gazillion запросов, выполняющих SELECT whatever FROM T_OLD WHERE whatever
, у вас есть два варианта развертывания:
1) Холодная Турция - Измените базу данных и, в то же время, измените, протестируйте и выпустите многочисленные фрагменты кода, которые содержали указанный запрос. ОЧЕНЬ сложно сделать (или даже координировать), очень рискованно. Плохо.
2) Постепенно - измените базу данных, создав T_NEW, отбросив T_OLD и создав вместо него VIEW с именем T_OLD, который имитирует таблицу T_OLD на 100% (например, запрос представления SELECT all_fields_except_active FROM T_NEW WHERE active=1
).
Это позволит вам избежать выпуска ЛЮБОГО кода, который в настоящее время выбирается из T_OLD, и вносить изменения для переноса кода из T_OLD в T_NEW на досуге.
Это простой пример, есть и другие, более вовлеченные.
P.S. С другой стороны, вам, вероятно, следовало бы иметь API хранимых процедур вместо прямых запросов от T_OLD, но это не всегда так.