Salve a tutti,
il DBMS che utilizzo è SQL Server Management Studio.
Avrei il bisogno di aggiornare più tabelle contemporaneamente utilizzando una vista unica.
Ad esempio:
Creo due tabelle IMPIEGATO e PROVINCIA, una chiave primaria per ogni tabella, una secondaria solo per IMPIEGATO e una relazione.
Poi creo una Vista e mi aspetterei di poter modificare i valori al suo interno, ma niente, mi dice che è solo in lettura. Avete qualche idea?, esiste un'opzione?, è giusto così? Boh!
Vi scrivo il codice per aiutarvi nella comprensione
USE [prova]
GO
CREATE TABLE PROVINCIA
( Nome nvarchar(50) NOT NULL,
CONSTRAINT KP_PROVINCIA PRIMARY KEY (Nome)
)
GO
CREATE TABLE IMPIEGATO
( ID_Impiegato smallint NOT NULL,
Nome nvarchar(20) NOT NULL,
Cognome nvarchar(20) NOT NULL,
Prov nvarchar(50) NOT NULL,
Telefono nvarchar(15) NULL
CONSTRAINT KP_IMPIEGATO PRIMARY KEY (ID_Impiegato)
CONSTRAINT REL_IMPIEGATO_PROVINCIA FOREIGN KEY (Prov) REFERENCES PROVINCIA(Nome) ON DELETE CASCADE ON UPDATE CASCADE
)
GO
CREATE VIEW VISTA
AS SELECT IMPIEGATO.ID_Impiegato,IMPIEGATO.Nome,IMPIEGATO.Cognome,IMPIEGATO.Prov,IMPIEGATO.Telefono
FROM dbo.IMPIEGATO, dbo.PROVINCIA
WHERE dbo.IMPIEGATO.Prov=dbo.PROVINCIA.Nome
GO
Che ho fatto dopo? Arrancando nel buio ho cominciato a popolare le tabelle con due viste distinte,
una per ogni tabella e in questo modo ho inserito i dati.
Poi ho eseguito la VISTA (vedi codice sopra) e comparivano le tuple. Fino a qui ok, la VISTA però non mi permette di modificare le tuple, dice che è in sola lettura.
A questo punto mi sono inventato di creare un'altra vista (non sapevo più cosa fare) che prende came tabella proprio la VISTA antecedentemente creata, e con mio stupore riesco a inserire dati, ma parzialmente. Nel senso che riesco ad aggiungere una tupla stando attento di dare all'attributo Prov uno dei valori che avevo primo inserito. Se cerco poi di modificare questa tupla e le modifiche non riguardano l'attributi Prov va tutto bene, la tabella IMPIEGATO viene modificata automaticamente, ma se cerco di modificare Prov dando un valore che non compare nella tabella PROVINCIA non mi permette di farlo. Il mio scopo sarebbe modificare il valore di Prov in modo che il sistema aggiorni la tabella PROVINCIA automaticamente come succede per la tabella IMPIEGATO.
Probabilmente questo succede perchè l'attributo Prov guarda caso è la chiave secondaria o perrchè la relazione è N (IMPIEGATO) : 1 (PROVINCIA). Sapete come fare? Magari un consiglio?
N.B. L'idea di usare le viste per inserire dati non è casuale, cito testualmente dal libro Sistemi di Basi di Dati Fondamenti di Ramez e Shamkant casa editrice PEARSON (pag. 298):
Una vista è sempre aggiornata; se si modificano le tuple nelle tabelle base su cui è definita la vista, automaticamente la vista riflette questi cambiamenti. La vista, quindi, non è realizzata al momento della definizione, ma piuttosto quando si specifica un'interrogazione su di essa. E' responsabilità del DBMS e non dell'utente assicurarsi che questa sia aggiornata.