web-dev-qa-db-fra.com

Quels sont les avantages / inconvénients de l'utilisation d'un synonyme par rapport à une vue?

Il s'agit d'une question de conception de base de données générique - Quels sont les avantages d'utiliser un synonyme dans le développement de bases de données, par rapport à une vue simple? Quelles sont les principales considérations à garder à l'esprit lors du choix entre les deux?

Un exemple voir:

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

Et le synonyme équivalent:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs
37
Jamey

Ce sont des choses différentes. Un synonyme est un alias pour l'objet directement, une vue est une construction sur une ou plusieurs tables.

Quelques raisons d'utiliser une vue:

  • Il peut être nécessaire de filtrer, de joindre ou de modifier la structure et la sémantique de l'ensemble de résultats

  • Il peut être nécessaire de fournir une prise en charge héritée d'une structure sous-jacente qui a changé mais qui a des dépendances que vous ne souhaitez pas retravailler.

  • Peut fournir une sécurité là où une partie du contenu du tableau doit être visible pour une classe d'utilisateurs mais pas pour tous. Cela peut impliquer la suppression de colonnes contenant des informations sensibles ou le filtrage d'un sous-ensemble des enregistrements.

  • Peut souhaiter encapsuler une logique métier sous une forme accessible aux utilisateurs à des fins de génération de rapports.

  • Vous pouvez souhaiter unifier les données de plusieurs sources.

... Et bien d'autres encore.

Raisons d'utiliser un synonyme:

  • Vous pouvez souhaiter alias un objet dans une autre base de données, où vous ne pouvez pas (ou ne voulez pas) coder en dur la référence à la base de données spécifique.

  • Vous pouvez souhaiter rediriger vers une source qui change au fil du temps, comme une table d'archive.

  • Vous souhaitez alias quelque chose d'une manière qui n'affecte pas l'optimiseur de requête.

... Et bien d'autres encore.

Il y a beaucoup de considérations. En bref, utilisez l'outil qui convient le mieux à chaque situation.

Avec une vue, je peux

  • masquer les colonnes
  • ajouter des prédicats (clause WHERE) pour restreindre les lignes
  • renommer les colonnes
  • donner un nom de colonne à une expression SQL

Avec un synonyme, je peux:

  • référencer des objets dans d'autres schémas et bases de données sans qualifier le nom

Il y a probablement plus à faire avec les synonymes. Dans la conception de nos applications (base de données Oracle), nous utilisons un schéma "propriétaire" (utilisateur) pour tous les objets de base de données (tables, vues, déclencheurs, etc.), et nous accordons des privilèges sur ces objets à d'autres "applications". utilisateurs. Dans chacun des schémas utilisateur "app", nous créons des synonymes pour référencer les objets "propriétaire".

HTH

7
spencer7593

La projection de colonne à partir d'une vue est établie au moment de la création. Par conséquent, si vous ajoutez une colonne à la vue sous-jacente, elle ne sera pas exposée tant que vous n'aurez pas modifié la vue. Ce n'est pas le cas avec un synonyme. Considérez-le comme un simple nom à remplacer dans votre tsql, généralement pour cacher la complexité.

3
Jimmy Zimms

Une vue est principalement une instruction "select" simple/complexe. Essentiellement, vous utilisez une vue comme masque et affichez uniquement les valeurs de colonne qui sont utiles. Vous utilisez une vue avec l'intention de ne pas afficher d'informations supplémentaires à l'utilisateur final.

Alors qu'un synonyme est un nom alternatif pour les objets de base de données.

  • il vous permet d'utiliser des tables dans un autre schéma sans préfixer le nom du schéma dans le nom de la table par un point comme dans (user.tab_name peut être remplacé par some_synonym_name)
  • vous n'êtes pas intéressé à partager l'objet réel avec d'autres,
3

J'utilise des synonymes pour partager des objets à partir d'autres bases de données afin que lorsque j'utilise .Net Entity Framework, je puisse utiliser un seul ObjectContext pour accéder à toutes les données requises à partir de nombreuses bases de données.

3
Josh

J'espère que cela pourrait aider quelqu'un, j'ai jeté un œil à cet article et j'ai trouvé une raison d'utiliser une vue au lieu d'un synonyme.

Lorsque vous utilisez le serveur SQL comme serveur Db et SAS comme client. Si vous utilisez un synonyme, il ne sera pas reconnu dans votre bibliothèque SAS. J'avais pour créer une vue.

Ce n'est pas optimisé mais au moins Windows sas avec serveur SQL n'est pas le meilleur non plus :)

1
Mathese F

Veuillez me corriger si je me trompe, mais je pense que je vois une autre utilisation d'un synonyme (au moins dans Progress OpenEdge), que je ne vois nulle part, qui peut le rendre encore plus sécurisé qu'une vue. La syntaxe de l'instruction DML SELECT vous permet d'utiliser une table, une vue ou un synonyme, mais les instructions INSERT, UPDATE et DELETE n'autorisent qu'une table ou une vue. Certaines vues, si elles répondent à certains critères, fournissent un accès modifiable, insérable et supprimable aux données. Le synonyme semble être un bon moyen de fournir un accès en lecture seule aux données, sans avoir à se soucier d'accorder (ou de refuser) des privilèges sur les vues.

1
Arthur