2009-05-15 17 views
32

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?¿Cuáles son los pros/contras de usar un sinónimo vs. una vista?

Un ejemplo vista:

CREATE VIEW Users AS 
SELECT * FROM IdentitySystem.dbo.Users 

Y el sinónimo equivalente:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs 

Respuesta

34

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 utilizar un punto de vista:

  • Puede necesitar para filtrar, unirse o de lo contrario Frig con la estructura y la semántica del conjunto de resultados

  • posible que deba proporcionar el soporte heredado para un subyacente estructura que ha cambiado pero tiene dependencias que no desea volver a trabajar.

  • Puede proporcionar seguridad cuando algunos de los contenidos de la tabla deben 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 algunas lógicas de negocio en un formulario que sea accesible para los usuarios con fines informativos.

  • Puede desear unificar datos de más de una fuente.

... Más.

razones para utilizar un sinónimo:

  • Es posible que desee poner un alias para un objeto en otra base de datos, donde no se 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.

  • Quiere alias algo de una manera que no afecte al optimizador de consultas.

... Más.

+0

sentimos que arrastrar hasta un viejo hilo, pero tengo un dilema similar en cuanto a si utilizar una vista o sinónimo. Esa es una gran respuesta, gracias, pero en realidad no responde a la pregunta – DarthPablo

+1

Tome 2: - Cierro arrastrar un hilo viejo, pero tengo un dilema similar sobre si usar una vista o un sinónimo. Gracias por tu buena explicación, también. La pregunta que tengo es si hay alguna razón _no_ para usar una vista "recta" al hacer "seleccionar * de la tabla"? ¿Es eso lo que mencionas que hace con el optimizador de consultas? Un problema que he encontrado con los sinónimos es que hacen que Hibernate se queje cuando la validación del esquema se activa con 'hibernate.hbm2ddl.auto = validate'. En cuanto a tus razones para usar un sinónimo, seguramente las dos primeras podrían abordarse con una vista, ¿no es así? – DarthPablo

+0

De las 3 razones para usar un sinónimo, las dos primeras son igualmente aplicables a las vistas de proximidad ('' 'create view X_table as select * from another_database.dbo.X_table''') En cuanto a la tercera razón: 99% de el momento en que probablemente no haya penalización tampoco. Entonces, ¿qué son los misteriosos '' '... y muchos más'''? y ¿ellos importan? Un buen informe lo da @Jimmy Zimms – Konstantin

6

Hay muchas consideraciones. En resumen, use la herramienta que mejor se adapte a cada situación.

Con vistas, puedo

  • ocultar columnas
  • añadir predicados (cláusula WHERE) para restringir las 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

hay probablemente más que se pueda hacer 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, desencadenadores, 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

3

Una vista es principalmente un simple/complejo "select". 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.

Considerando que un sinónimo es un nombre alternativo para los objetos de la base de datos.

  • que le permite utilizar tablas en otro esquema, sin prefijar el nombre de esquema en el nombre de la tabla con un punto como en (user.tab_name pueden ser reemplazados por some_synonym_name)
  • que no están interesados ​​en compartir el objeto real con los demás,
1

por favor, corríjanme si me equivoco, pero creo que veo un nuevo uso para un sinónimo (por lo menos en OpenEdge de Progress), que no veo documentado en ninguna parte, que puede hacer es incluso 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.

+1

Para SQL Server, puede otorgar SELECT, INSERT, UPDATE, DELETE a SYNONYM para una tabla. (conceda EXEC para SP o UDF, etc.). – tgolisch

3

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.

+0

¿Puede proporcionar un poco más de detalles sobre cómo lo está logrando? Esta respuesta proporciona una forma, pero es menos que ideal. http://stackoverflow.com/questions/6036357 – JoeBrockhaus

3

La proyección de columna desde una vista se establece en el momento de creación. 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.

1

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 sas de Windows con el servidor SQL no es la mejor ni :)

Cuestiones relacionadas