Tengo la sintaxis baja, pero me pregunto si alguien puede proporcionar un caso de uso ilustrativo donde los sinónimos de la base de datos son muy útiles.¿Cuándo deberían utilizarse los sinónimos de la base de datos?
Respuesta
Es excelente para organizar simulacros de tablas durante la prueba. Por ejemplo, si las tablas de origen contienen millones de registros y desea probar un pequeño subconjunto de datos, puede usar sinónimos para redirigir la tabla de origen a una tabla más pequeña que controle, de modo que pueda organizar varios escenarios.
De esta manera, puede actualizar/eliminar los datos en la tabla simulada sin afectar a su tabla fuente. Cuando esté listo para usar la tabla fuente, todo lo que necesita hacer es redirigir el sinónimo.
Por supuesto, los sinónimos públicos le permiten hacer referencia a un objeto sin la necesidad de la sintaxis schema.object que aumenta la legibilidad de PL/SQL y el código SQL. –
@Darren Atkinson: Y los sinónimos públicos aumentan las posibilidades de colisiones de nombres si alguna vez decide consolidar las bases de datos. –
cuán útiles son en el caso de los paquetes, recientemente no pude acceder a un paquete desde mi aplicación a pesar de que la concesión de ejecución estaba allí. Después de crear el sinónimo, pude acceder al paquete desde la aplicación. – viveksinghggits
Digamos, cuando necesita hacer una aplicación mal escrita (que no emite ALTER SESSION SET CURRENT_SCHEMA
) para trabajar contra otro esquema.
Los sinónimos se utilizan principalmente como una solución para casos como ese. Con una aplicación debidamente escrita, casi nunca tendrá que usarlos.
No estoy de acuerdo con la idea de que los sinónimos son inútiles para las aplicaciones "escritas correctamente". Los uso todo el tiempo para evitar los nombres de los esquemas de codificación en mi aplicación. Por ejemplo, podría tener una vista que une dos tablas; si necesito mover una de las tablas a otro esquema, 'ALTER SESSION SET CURRENT_SCHEMA' no funcionará. –
Cuando tiene nombres de objeto de base de datos codificados dentro del código existente.
El uso de sinónimos puede ahorrarle la agonía de volver a escribir el código anterior, a veces de varias fuentes, que tiene sus propias ideas sobre la tabla o los nombres de las bases de datos.
He visto, por ejemplo, un código que fue escrito para algún servidor de producción. El codificador ha convenientemente codificado el nombre de la tabla principal es test_data
, que funcionó bien en su estación de trabajo. Utilizar sinónimos en lugar de reescribir su código me hizo llegar a casa temprano.
Normalmente veo sinónimos utilizados cuando el DBA desea separar objetos de la base de datos en diferentes esquemas, pero quiere/necesita que algunos de estos objetos sean visibles para otros esquemas (pero no quiere darles acceso directo).
Un ejemplo que he visto más recientemente: varias aplicaciones web administradas por la misma compañía. Los usuarios generalmente tienen acceso a más de una de estas aplicaciones, y solo tendrán una cuenta de usuario para acceder a estas aplicaciones. La información de la cuenta de usuario se almacena en un esquema USER_ACCOUNTS
, y todas las demás aplicaciones están en sus propios esquemas y tienen acceso al esquema USER_ACCOUNTS
a través de sinónimos.
Eche un vistazo a Oracle documentation on synonyms.
Además de las otras respuestas aquí, también se usan comúnmente para:
- Proporcionar fácil de usar nombres de tablas remotas, es decir, sobre la base de datos vincula
- Tablas que debe ser accesible a todos usuarios, es decir, sinónimos públicos
En general, es una mala práctica incorporar nombres de esquema en SQL o PL * SQL. Por lo tanto, si está escribiendo un código que debe referirse a una tabla en otro esquema como: "select id from OtherSchema.OtherTable", es mejor que defina un sinónimo para la tabla (cree el sinónimo OtherTable para OtherSchema.OtherTable) y escriba "select id" de OtherTable ".
De esta manera, si OtherTable se mueve a un nombre de esquema diferente, o si tiene otra instalación del sistema que usa un nombre de esquema diferente, puede redefinir los sinónimos en lugar de cambiar el código.
También se puede usar para cambiar el código entre dos esquemas con la misma estructura al redefinir los sinónimos.
- 1. ¿Cuándo deberían reconstruirse los índices de la base de datos?
- 2. ¿Cuándo deberían evitarse los métodos de extensión?
- 3. Necesita una base de datos de sinónimos
- 4. ¿Cuándo debería utilizarse la función Winlock InterlockedExchange?
- 5. ¿Cuándo se activan los desencadenadores de la base de datos?
- 6. Fitnesse- ¿Deberían las pruebas hablar con la base de datos?
- 7. ¿Deberían utilizarse Debug.Assert y Debug.Fail libremente, y deberían dejarse en el código de producción?
- 8. ¿Cuándo deberían usarse los archivos XSD?
- 9. ¿Cuándo deberían escribirse los escenarios de prueba de BDD?
- 10. ¿Son compatibles los sinónimos de Oracle en Entity Framework?
- 11. Cuándo simular el acceso a la base de datos
- 12. ¿Con qué frecuencia deberían reconstruirse los índices en nuestra base de datos SQL Server?
- 13. Cuándo usar las vistas de la base de datos y cuándo no?
- 14. ¿Cómo funcionan exactamente los sinónimos de tipo?
- 15. ¿Los miembros de la entidad deberían ser tipos de datos primitivos o tipos de datos Java?
- 16. ¿Cómo diseño una base de datos para almacenar propiedades, seleccionando atributos por sinónimos?
- 17. ¿Dónde deberían estar las consultas de la base de datos en vivo?
- 18. En una base de datos, ¿cuándo debe almacenar los datos derivados?
- 19. ¿Cuándo deberían usarse directivas explícitas de alineación en el ensamblaje?
- 20. problema con conseguir los datos de la base de datos
- 21. En Clojure, ¿cuándo deberían representarse los árboles de tipos de nodo heterogéneos utilizando registros o vectores?
- 22. Cuándo usar los servicios de datos WCF y cuándo no?
- 23. ¿Cuándo debería usar una base de datos de objetos?
- 24. ¿Deberían utilizarse procedimientos y/o funciones del paquete DBMS_STANDARD en el código PL/SQL?
- 25. Base de datos horizontal y base de datos vertical
- 26. ¿Cuándo se llama una base de datos como base de datos incrustada?
- 27. ¿Cuándo glVertexPointer() copia los datos?
- 28. ¿Cuándo debería crear índices de base de datos?
- 29. ¿Cuándo deberían usarse los algoritmos STL en lugar de usar los propios?
- 30. ¿Cuándo compactas una base de datos de servidor Sql?
Enlace: http://www.dba-oracle.com/concepts/synonyms.htm –
Característica completamente inútil: http://vadimtropashko.wordpress.com/2012/12/12/synonyms-do-we-need -them/ –