Un altro uso che nessuna delle risposte precedenti sembra aver menzionato è la distribuzione più semplice delle modifiche alla struttura della tabella.
Supponiamo che desideri ritirare una tabella ( T_OLD
) contenente dati per utenti attivi e utilizzare invece una nuova tabella con dati simili (denominati T_NEW
) ma che contenga dati sia per gli utenti attivi che per quelli inattivi, con una colonna in piùactive
.
Se i tuoi sistemi hanno miliardi di query che lo fanno SELECT whatever FROM T_OLD WHERE whatever
, hai due scelte per il lancio:
1) Tacchino freddo - Cambia il DB e, allo stesso tempo, cambia, testa e rilascia numerosi pezzi di codice che contenevano detta query. MOLTO difficile da fare (o anche da coordinare), molto rischioso. Male.
2) Graduale : cambia il DB creando la T_NEW
tabella, rilasciando la T_OLD
tabella e creando invece una VIEW chiamata T_OLD
che imita la T_OLD
tabella al 100% (ad esempio, la query di visualizzazione èSELECT all_fields_except_active FROM T_NEW WHERE active=1
).
Ciò consentirebbe di evitare di rilasciare QUALSIASI codice che attualmente seleziona da T_OLD
e di apportare le modifiche per migrare il codice da T_OLD
a T_NEW
a piacimento.
Questo è un semplice esempio, ce ne sono altri molto più coinvolti.
PS D'altra parte, probabilmente avresti dovuto avere un'API di stored procedure invece di query dirette da T_OLD
, ma non è sempre così.