Oracle
 sql >> Database >  >> RDS >> Oracle

Sinonimi pubblici vs. schema.object pattern

I sinonimi pubblici hanno uno scopo molto specifico; consentono a un oggetto di essere referenziato da ogni utente - supponendo che dispongano dei privilegi appropriati. Se in qualsiasi momento in futuro potresti voler cambiare il modo in cui un utente specifico visualizza un oggetto, allora i sinonimi pubblici non sono la strada da percorrere.

Utilizzano anche un nome oggetto specifico per l'intero database. Tuttavia, il fatto che esista un sinonimo pubblico non impedisce di creare un oggetto con lo stesso nome. Questo può essere incredibilmente confuso.

Ad esempio, supponi di avere una procedura test e uno schema emp . Tentativo di eseguire emp.test non funzionerà perché hai già un sinonimo pubblico emp sul tavolo .

Tom Kyte , sembra hanno scritto un numero di articoli su questo.

Per quanto riguarda le prestazioni, sembrano suggerire che un sinonimo pubblico rispetto a un sinonimo privato risulterà in un leggero calo delle prestazioni . Tuttavia, l'utilizzo di un sinonimo anziché di nessun sinonimo comporterà anche una leggera diminuzione delle prestazioni. Ciò suggerisce che se fino all'ultimo computron è prezioso non dovresti usare affatto i sinonimi.

Messo insieme penso che questo significhi che dovresti evitare i sinonimi pubblici, se possibile. Se hai necessità uno poi ovviamente usa uno, dopotutto esistono per un motivo, ma se non lo fai allora che senso ha averne uno? Il scott.emp costrutto è chiaro, ti mostra esattamente a quale schema e oggetto stai facendo riferimento senza alcuna possibilità di interpretazioni errate, da parte tua o di qualcun altro che non conosce il database e il codice.

Punto veloce. Non lo dici esplicitamente, ma la formulazione della tua domanda sembra suggerire che stai creando uno schema per ogni utente. Questo sembra essere enormemente confuso...