sql >> Base de Datos >  >> RDS >> Oracle

Sinónimos públicos frente a patrón schema.object

Los sinónimos públicos tienen un propósito muy específico; permiten que un objeto sea referenciado por todos usuario, suponiendo que tenga los privilegios adecuados. Si en algún momento en el futuro desea cambiar la forma en que un usuario específico ve un objeto, los sinónimos públicos no son el camino a seguir.

También usan un nombre de objeto específico para toda la base de datos. Sin embargo, el hecho de que exista un sinónimo público no le impide crear un objeto con el mismo nombre. Esto puede ser increíblemente confuso.

Por ejemplo, suponga que tiene un procedimiento test y un esquema emp . Intentando ejecutar emp.test no funcionará porque ya tiene el sinónimo público emp sobre la mesa .

Tom Kyte , parece han escrito un número de artículos sobre esto.

En el aspecto de rendimiento, parecen sugerir que un sinónimo público sobre un sinónimo privado dará como resultado un ligera disminución del rendimiento . Sin embargo, el uso de un sinónimo en lugar de ningún sinónimo también dará como resultado una ligera disminución en el rendimiento. Esto sugiere que si cada último computron es preciosa, no deberías usar sinónimos en absoluto.

En conjunto, creo que esto significa que debe evitar los sinónimos públicos si es posible. Si necesitas entonces, por supuesto, usa uno, existen por una razón después de todo, pero si no lo haces, ¿cuál es el punto de tener uno? El scott.emp la construcción es clara, le muestra exactamente a qué esquema y objeto está haciendo referencia sin ninguna posibilidad de mala interpretación, ya sea por usted mismo o por otra persona nueva en la base de datos y el código.

Punto rápido. No lo dice explícitamente, pero la redacción de su pregunta parece sugerir que está creando un esquema para cada usuario. Esto parece que sería enormemente confuso...