61 votes

Inconvénients "AVEC SCHEMABINDING" dans SQL Server?

J'ai une base de données avec des centaines de maladroitement nommé tables qu'il (CG001T, GH066L, etc), et j'ai des vues sur tous les avec son "amie" (nom de la vue "CLIENTS" est "SELECT * from GG120T", par exemple). Je veux ajouter "AVEC SCHEMABINDING" de mon point de vue afin que je puisse avoir quelques-uns des avantages associés avec elle, comme être en mesure de l'index de la vue, puisqu'une poignée de points de vue ont des colonnes calculées qui sont coûteux à calculer à la volée.

Existe-il des inconvénients à SCHEMABINDING ces points de vue? J'ai trouvé quelques articles que vaguement allusion à des inconvénients, mais ne vont jamais en détail. Je sais qu'une fois d'un point de vue est liée au schéma, vous ne pouvez pas modifier quelque chose qui aurait un impact sur la vue (par exemple, une colonne de type de données ou de classement) sans d'abord l'abandon de la vue, de sorte qu'un, mais à côté de cela? Il semble que la capacité de l'indice de la vue elle-même serait l'emportent de loin sur le revers de la médaille de la planification de vos modifications de schéma avec plus de soin.

45voto

Dan S Points 808

Vous ne serez pas en mesure de modifier/supprimer la table, sauf si vous les supprimez-la d'abord.

31voto

user2246674 Points 5511

Oh, il y a CERTAINEMENT des INCONVÉNIENTS à l'utilisation de SCHEMABINDING - ci viennent de fait la liaison du schéma, en particulier lorsqu'il est couplé avec des colonnes CALCULÉES "bloque" LES RELATIONS et fait quelques "modifications insignifiantes" sacrément près impossible.

  1. Créer une table.
  2. Créer une liaison de schéma (UDF.
  3. Créer un CALCULÉES PERSISTÉ colonne qui fait référence à l'UDF.
  4. Ajouter un INDICE au-dessus de ladite colonne.
  5. Essayez de mettre à jour l'UDF.

Bonne chance avec celui-là!

  1. L'UDF ne peut pas être supprimé ou modifié, car elle est liée au schéma.
  2. La COLONNE ne peut pas être supprimée, car elle est utilisée dans un INDEX.
  3. La COLONNE ne peut pas être modifié car il est CALCULÉ.

Eh bien, frak. Vraiment..!?! Ma journée est devenu un pain PITA. (Maintenant, des outils comme ApexSQL Diff pouvez gérer cela lorsqu'il est fourni avec un schéma modifié, mais la question est ici que je ne peux même pas modifier le schéma pour commencer!)

Je ne suis pas contre SCHEMABINDING, de l'esprit (et c'est nécessaire pour un UDF dans ce cas), mais je suis contre il y a pas un moyen (que je peux trouver) pour "désactiver temporairement" la SCHEMABINDING.

29voto

gbn Points 197263

Pas du tout. C'est plus sûr. nous l'utiliser partout.

4voto

JeffO Points 5393

Si ces tableaux sont à partir d'une application tierce (ils sont connus pour essayer de cacher leurs tables), vous provoquer et de mise à niveau à l'échec si elle tente de modifier l'une de ces tables.

Vous avez juste à modifier les points de vue sans les schemabinding avant la mise à jour/mise à niveau et ensuite les mettre en arrière. Comme d'autres l'ont mentionné. Faut juste un peu de planification, la discipline, etc.

4voto

Triynko Points 5600

Un inconvénient est que si vous schemabind vue, il ne peut faire référence à d'autres liée au schéma de vues.

Je le sais parce que j'ai essayé de schemabind vue et a été rencontré avec un message d'erreur me disant qu'il ne pouvait pas être liée au schéma parce que l'un des autres points de vue il fait référence n'est pas aussi liée au schéma.

La seule conséquence de cela est que si vous voulez tout à coup de la mise à jour d'une liaison de schéma (vue de référence de certaines nouvelles ou existantes de la vue, vous pourriez avoir à schemabind que de nouvelles ou existantes de la vue. Dans ce cas, vous ne serez pas en mesure de mettre à jour la vue, et vous espérez que votre base de données, les développeurs savent comment travailler avec de liaison de schéma (points de vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X