Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Sinônimos públicos vs. padrão schema.object


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...