Os sinônimos públicos servem a um propósito muito específico; eles permitem que um objeto seja referenciado por todos user - supondo que eles tenham os privilégios apropriados. Se em algum momento no futuro você desejar alterar a forma como um usuário específico visualiza um objeto, então os sinônimos públicos não são o caminho a seguir.
Eles também usam um nome de objeto específico para todo o banco de dados. No entanto, o fato de existir um sinônimo público não impede que você crie um objeto com o mesmo nome. Isso pode ser incrivelmente confuso.
Por exemplo, suponha que você tenha um procedimento
test
e um esquema emp
. Tentando executar emp.test
não funcionará porque você já tem o sinônimo público emp
na mesa . Tom Kyte , parece escreveram um número de artigos sobre isso.
No aspecto de desempenho, eles parecem sugerir que um sinônimo público sobre um sinônimo privado resultará em um ligeira diminuição no desempenho . No entanto, usar um sinônimo em vez de nenhum sinônimo também resultará em uma ligeira diminuição no desempenho. Isso sugere que, se cada último computron é precioso, você não deve usar sinônimos.
Juntos, acho que isso significa que você deve evitar sinônimos públicos, se possível. Se você precisar um, então, é claro, use um, eles existem por um motivo, mas se você não o fizer, qual é o sentido de ter um? O
scott.emp
construct é claro, mostra exatamente qual esquema e objeto você está referenciando sem qualquer possibilidade de má interpretação, seja por você mesmo ou por outra pessoa que está começando a usar o banco de dados e o código. Ponto rápido. Você não diz isso explicitamente, mas o texto da sua pergunta parece sugerir que você está criando um esquema para cada usuário. Parece que vai ser muito confuso...