Oggetto del database che legge da due tabelle e scrive su uno

2

Sto aggiornando un progetto di database che deve essere compatibile con vecchie e nuove applicazioni. Il mio obiettivo è quello di apportare modifiche al design che riducano al minimo l'impatto sul codice esistente.

The Design Change

Attualmente il nostro database ha dati universali che sono memorizzati in ogni database di clienti. Voglio spostare questi dati comuni in un DB / server diverso per semplificare la manutenzione. Tuttavia, devo anche conservare una copia locale di queste tabelle in modo che i clienti possano aggiungere e modificare elementi personalizzati (che non saremo responsabili della manutenzione).

Che cosa usare?

Quindi in pratica ho bisogno di selezionare per restituire i dati da entrambe le tabelle e aggiornare / eliminare / inserire istruzioni per modificare i dati dalla tabella locale.

Penso di poter usare una vista per restituire i dati da entrambe le tabelle come aggregato, ma è possibile impostarlo per scrivere solo sulla tabella locale?

Uso SQL Server 2008 con VB.NET.

    
posta Ian 26.05.2016 - 20:14
fonte

1 risposta

1

Sì, è possibile utilizzare le viste per ottenere una rappresentazione aggregata di righe da due (o più) tabelle. D'altra parte, come sembri già rendersi conto, le viste non sono normalmente scrivibili. Anche se MSSQL (o qualsiasi altro RDBMS) offre alcune funzioni magiche per scrivere su una vista, consiglierei di non usarle, perché la magia tende a girare e mordere alla fine. (La magia funziona molto bene fino a quando non lo fa. E rende molto difficile capire cosa sta succedendo.)

La maggior parte delle operazioni di database eseguite da qualsiasi applicazione vengono lette, quindi è possibile coprire quelle con visualizzazioni. Per la restante percentuale molto piccola di operazioni che vengono scritte, è sufficiente farlo in modo semplice e modificare il codice per scrivere nelle tabelle corrette che devono essere scritte.

Tuttavia, tieni presente che rompere un database in database separati non è quasi mai una buona idea, perché la transazione e l'integrità referenziale di solito vengono perse quando fai così. Sei sicuro che ciò di cui hai bisogno non può essere realizzato aggiungendo un'altra colonna che identifica se una determinata riga appartiene a un cliente specifico o all'universo?

    
risposta data 26.05.2016 - 23:00
fonte

Leggi altre domande sui tag