È una cattiva pratica inserire e aggiornare attraverso le viste del database?

3

Attualmente stiamo lentamente sostituendo un framework ORM personalizzato con Entity Framework (EF). Uno dei passaggi è assicurarsi che possiamo aggiornare e inserire record attraverso le viste del database con EF, proprio come stiamo facendo con l'attuale ORM. Le viste forniscono sicurezza filtrando i record accessibili per l'utente, impedendo l'accesso e la possibilità di aggiornare altri record.

Non riesco a capire come implementare correttamente questo approccio con EF e ho iniziato a chiedermi se è buona norma aggiornare e inserire (e talvolta cancellare) attraverso queste visualizzazioni. Quando google non riesco a trovare raccomandazioni di buone / cattive pratiche su questo argomento, solo il fatto che a volte anche altri usano questo approccio. Forse le mie capacità di ricerca non sono abbastanza sofisticate.

Per me sembra che le visualizzazioni siano intese come di sola lettura e aiutino l'utente a selezionare rapidamente i dati da potenzialmente più tabelle. L'esecuzione di un inserimento o di un aggiornamento su una vista non è buona per questo motivo, nonostante sia possibile.

Quali sono i vantaggi e gli svantaggi dell'utilizzo delle viste per inserire e aggiornare i record?

Ci sono anche problemi specifici durante l'installazione di Entity Framework?

Quello che ho trovato finora. Vantaggi:

  • Sicurezza filtrando i record accessibili a livello di database
  • L'inserimento in blocco funziona anche per le viste

Svantaggi:

  • L'istruzione Select è più o meno bloccata quando è necessario aggiornare o inserire i record
  • Specifico per EF, quando si utilizzano le viste Migrazioni improvvisamente è necessario essere trattati come una vista anziché una tabella. (correggimi se sbaglio)

Alcune informazioni:

  • Usiamo EF 6.13
  • È un database MSSQL
  • Sono disponibili sia visualizzazioni di sola lettura sia visualizzazioni CRUD
  • Alcune visualizzazioni hanno prestazioni terribili, principalmente perché non possiamo modificarle perché dobbiamo essere in grado di eseguire operazioni CRUD su di esse.
  • Abbiamo circa 30 visualizzazioni

Spero che questo sia il posto giusto per porre questa domanda.

    
posta Mixxiphoid 30.06.2017 - 16:09
fonte

1 risposta

3

Probabilmente puoi trovare tutto ciò che devi sapere su questo argomento in questo articolo di Microsoft.

In particolare:

When querying through a view, the Database Engine checks to make sure that all the database objects referenced anywhere in the statement exist, that they are valid in the context of the statement, and that data modification statements do not violate any data integrity rules. A check that fails returns an error message. A successful check translates the action into an action against the underlying table or tables.

In altre parole, qualsiasi operazione di modifica dei dati effettuata su una vista dovrebbe comunque rispettare tutti i vincoli che sono già stati imposti sullo schema del database sottostante. Inoltre, beneficiate di eventuali regolamenti di autorizzazione forniti dalla vista stessa. EF considera le visualizzazioni essenzialmente come qualsiasi altro tavolo, quindi vedo un sacco di rialzo e un piccolo svantaggio.

Naturalmente, se incontri problemi con questo approccio, come ad esempio le tue visualizzazioni con scarse prestazioni, puoi valutare se dovresti o meno tornare alle tabelle dirette in questi casi o creare viste migliori ai fini della modifica.

    
risposta data 30.06.2017 - 16:57
fonte

Leggi altre domande sui tag