sql - eliminar - ¿Cuáles son los pros/contras de usar un sinónimo vs. una vista?
sinonimos en mysql (7)
Corrígeme si me equivoco, pero creo que veo otro uso para un sinónimo (al menos en Progress OpenEdge), que no veo documentado en ningún lado, que puede hacerlo aún más seguro que una vista. La sintaxis de la instrucción DML SELECT le permite usar una tabla, vista o sinónimo, pero las instrucciones INSERT, UPDATE y DELETE solo permiten una tabla o vista. Algunas vistas, si cumplen ciertos criterios, proporcionan acceso actualizable, insertable y eliminable a los datos. El sinónimo parece una buena manera de proporcionar acceso de solo lectura a los datos, sin tener que meterse con la concesión (o denegación) de privilegios en las vistas.
Esta es una pregunta de diseño de base de datos genérica. ¿Cuáles son los beneficios de usar un sinónimo en el desarrollo de una base de datos, en lugar de una vista simple? ¿Cuáles son las principales consideraciones a tener en cuenta al elegir entre los dos?
Una vista de ejemplo:
CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users
Y el sinónimo equivalente:
CREATE SYNONYM Users
FOR IdentitySystem.dbo.LCTs
Espero que pueda ayudar a alguien, eché un vistazo a este artículo y encontré una razón para usar una Vista en lugar de un sinónimo.
Cuando está utilizando el servidor Sql como servidor Db y SAS como cliente. Si usa un Sinónimo, no será reconocido en su biblioteca SAS. Tuve que crear una vista.
No está optimizado, pero al menos Windows sas con servidor Sql no es el mejor ni :)
Hay muchas consideraciones En resumen, use la herramienta que mejor se adapte a cada situación.
Con una vista, puedo
- ocultar columnas
- añadir predicados (cláusula WHERE) para restringir filas
- renombrar columnas
- dar un nombre de columna a una expresión SQL
Con un sinónimo, puedo:
- objetos de referencia en otros esquemas y bases de datos sin calificar el nombre
Es probable que se pueda hacer más con sinónimos. En los diseños de nuestras aplicaciones (base de datos Oracle), utilizamos un esquema de "propietario" (usuario) para todos los objetos de la base de datos (tablas, vistas, disparadores, etc.) y otorgamos privilegios sobre esos objetos a otra "aplicación" usuarios. En cada uno de los esquemas de usuario de la "aplicación", creamos sinónimos para hacer referencia a los objetos "propietarios".
HTH
La proyección de columna desde una vista se establece en crear tiempo. Por lo tanto, si agrega una columna a la vista subyacente, no se expondrá hasta que modifique la vista. No es así con un sinónimo. Piense en ello como un simple nombre reemplazar en su tsql, generalmente para ocultar la complejidad.
Son cosas diferentes. Un sinónimo es un alias para el objeto directamente, una vista es una construcción sobre una o más tablas.
Algunas razones para usar una vista:
Puede ser necesario filtrar, unir o frig de otra manera con la estructura y la semántica del conjunto de resultados
Puede que necesite proporcionar soporte heredado para una estructura subyacente que ha cambiado pero tiene dependencias que no desea volver a trabajar.
Puede proporcionar seguridad donde algunos de los contenidos de la tabla deberían ser visibles para una clase de usuarios pero no para todos. Esto podría implicar eliminar columnas con información confidencial o filtrar un subconjunto de registros.
Puede desear encapsular alguna lógica comercial en una forma que sea accesible para los usuarios con fines informativos.
Es posible que desee unificar datos de más de una fuente.
... Además de muchos más.
Razones para usar un sinónimo:
Es posible que desee alias un objeto en otra base de datos, donde no puede (o no quiere) codificar la referencia a la base de datos específica.
Es posible que desee redirigir a una fuente que cambie con el tiempo, como una tabla de archivos.
Desea alias algo de una manera que no afecte al optimizador de consultas.
... Además de muchos más.
Una vista es principalmente una declaración "selectiva" simple / compleja. Básicamente, utiliza una vista como máscara y muestra solo los valores de columna que son útiles. Utiliza una vista con la intención de no mostrar información adicional al usuario final.
Mientras que un sinónimo es un nombre alternativo para los objetos de la base de datos.
- le permite usar tablas en otro esquema sin prefijo el nombre del esquema en el nombre de la tabla con un punto como en (user.tab_name puede ser reemplazado por some_synonym_name)
- no está interesado en compartir el objeto real con otros,
Utilizo sinónimos para compartir objetos de otras bases de datos, de modo que cuando uso .Net Entity Framework, puedo usar un solo ObjectContext para acceder a todos los datos requeridos desde muchas bases de datos.