Domanda Quali sono i pro / contro dell'uso di un sinonimo rispetto a una vista?


Questa è una domanda generica sulla progettazione di un database - Quali sono i vantaggi dell'utilizzo di un sinonimo nello sviluppo di database, su una semplice visualizzazione? Quali sono le principali considerazioni da tenere a mente quando si sceglie tra i due?

Un esempio vista:

CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users

E il sinonimo equivalente:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs

34
2018-05-15 14:35


origine


risposte:


Sono cose diverse. Un sinonimo è un alias per l'oggetto direttamente, una vista è un costrutto su una o più tabelle.

Alcuni motivi per utilizzare una vista:

  • Potrebbe essere necessario filtrare, unire o altrimenti frig con la struttura e la semantica del set di risultati

  • Potrebbe essere necessario fornire supporto legacy per una struttura sottostante che è cambiata ma ha dipendenze che non si desidera rielaborare.

  • Può fornire sicurezza laddove parte del contenuto della tabella dovrebbe essere visibile a una classe di utenti ma non a tutti. Ciò potrebbe comportare la rimozione di colonne con informazioni sensibili o il filtraggio di un sottoinsieme dei record.

  • Potrebbe desiderare di incapsulare alcune logiche di business in una forma accessibile agli utenti a scopo di reporting.

  • Potresti voler unificare i dati da più di una fonte.

... e molti altri ancora.

Motivi per utilizzare un sinonimo:

  • Si potrebbe desiderare di creare un alias di un oggetto in un altro database, in cui non è possibile (o non si vuole) codice hard il riferimento al database specifico.

  • Potresti voler reindirizzare a una fonte che cambia nel tempo, come una tabella di archivio.

  • Vuoi fare l'alias di qualcosa in un modo che non influisce su Query Optimiser.

... e molti altri ancora.


37
2018-05-15 14:43



Ci sono molte considerazioni. In breve, usa lo strumento che funziona meglio per ogni situazione.

Con una vista, posso

  • nascondi colonne
  • aggiungere predicati (clausola WHERE) per limitare le righe
  • rinominare le colonne
  • dare un nome di colonna a un'espressione SQL

Con un sinonimo, posso:

  • oggetti di riferimento in altri schemi e database senza qualificare il nome

Probabilmente c'è di più che si può fare con i sinonimi. Nei progetti delle nostre applicazioni (database Oracle), utilizziamo uno schema "proprietario" (utente) per tutti gli oggetti del database (tabelle, viste, trigger, ecc.) E concediamo i privilegi su tali oggetti ad altre "app" utenti. In ciascuno degli schemi utente "app", creiamo sinonimi per fare riferimento agli oggetti "proprietario".

HTH


6
2018-05-15 15:02



Una vista è principalmente un'istruzione "select" semplice / complessa. In sostanza, si utilizza una vista come maschera e si mostrano solo i valori di colonna che sono utili. Si utilizza una vista con l'intenzione di non mostrare informazioni extra all'utente finale.

Mentre un sinonimo è un nome alternativo per gli oggetti del database.

  • consente di utilizzare tabelle in altri schemi senza prefisso allo schema nome nel nome della tabella con un punto come in (user.tab_name può essere sostituito da some_synonym_name)
  • non sei interessato a condividere l'oggetto reale con gli altri,

3
2018-05-16 11:41



Uso sinonimi per condividere oggetti da altri database in modo che quando utilizzo .Net Entity Framework posso usare un singolo ObjectContext per accedere a tutti i dati richiesti da molti database.


3
2017-12-30 20:49



La proiezione della colonna da una vista viene stabilita al momento della creazione. Pertanto se aggiungi una colonna alla vista sottostante non verrà esposta finché non modifichi la vista. Non così con un sinonimo. Pensa ad esso come a un semplice nome che viene sostituito nel tuo tsql, di solito per nascondere la complessità.


3
2017-10-04 00:52



Per favore correggimi se sbaglio, ma penso di vedere un altro uso per un sinonimo (almeno in Progress OpenEdge), che non vedo documentato da nessuna parte, che può renderlo ancora più sicuro di una vista. La sintassi dell'istruzione DML SELECT consente di utilizzare una tabella, una vista o un sinonimo, ma le istruzioni INSERT, UPDATE e DELETE consentono solo una tabella o una vista. Alcune viste, se soddisfano determinati criteri, forniscono accesso aggiornabile, inseribile e cancellabile ai dati. Il sinonimo sembra un buon modo per fornire accesso in sola lettura ai dati, senza doversi preoccupare di concedere (o negare) privilegi alle viste.


1
2018-02-05 01:02



Spero che possa aiutare qualcuno, ho dato un'occhiata a questo articolo e ho trovato un motivo per usare una vista invece di un sinonimo.

Quando si utilizza il server Sql come server Db e SAS come client. Se si utilizza un sinonimo, questo non verrà riconosciuto nella libreria SAS. Dovevo creare una vista

Non è ottimizzato, ma almeno Windows sas con il server Sql non è il migliore neanche :)


1
2018-01-08 07:49