208 votes

Sont déclencheurs de base de données mal?

Sont déclencheurs de base de données une mauvaise idée?

Dans mon expérience, ils sont mauvais, car ils peuvent entraîner surprenant effets secondaires, et sont difficiles à déboguer (surtout quand on déclencher les feux de l'autre). Souvent, les développeurs n'ont même pas pensé à regarder si il y a un déclencheur.

D'autre part, il semble que si vous disposez d'une logique qui doit se produire evertime un nouveau FOO est créé dans la base de données la plus infaillible endroit est un déclencheur d'insertion sur le FOO table.

Le seul moment où nous sommes à l'aide de déclencheurs est pour des choses vraiment simples comme mettre la ModifiedDate.

176voto

le dorfier Points 27267

Les principaux problèmes avec les déclencheurs sont a) ils sont complètement Global - ils s'appliquer quel que soit le contexte de la table de l'activité; et b) s'ils sont discrets; il est facile d'oublier qu'ils sont là jusqu'à ce qu'ils vous blesser avec les imprévus (et très mystérieux) les conséquences.

Ce qui signifie simplement qu'ils doivent être soigneusement utilisés pour les circonstances appropriées, ce qui, dans mon expérience est limitée, à l'intégrité relationnelle questions (parfois avec une granularité plus fine que vous pouvez obtenir de manière déclarative); et généralement pas pour des affaires ou des fins de transactions. YMMV.

89voto

paxdiablo Points 341644

Non, ils sont effectivement une bonne idée. Si il y a un problème avec vos déclencheurs, vous n'êtes pas fait leur droit, mais cela signifie généralement qu'il ya un problème avec votre application, pas le concept de triggers eux-mêmes :-).

Nous utilisons déclenche beaucoup, car il est le SGBD spécifique de l'activité sous le contrôle de la base de données à laquelle il appartient. Les utilisateurs d'un SGBD ne devriez pas avoir à vous soucier de ce genre de choses. L'intégrité des données se trouve à la base de données elle-même, pas les applications ou les utilisateurs qui l'utilisent. Sans contraintes et des déclencheurs et d'autres caractéristiques dans la base de données, il est laissé aux applications pour faire respecter les règles et il ne prend qu'un voleur ou buggy application/utilisateur de détruire les données.

Par exemple, sans les déclencheurs, ces merveilleuses choses que l'auto-générés colonnes n'existent pas et que vous avez à traiter une fonction sur chaque ligne lors de la sélection. C'est probablement pour tuer les SGBD performance, de loin préférable de créer des auto-généré colonne à insérer/mettre à jour de temps puisque c'est la seule fois qu'il change.

Aussi, le manque de déclencheurs empêcherait de données règles soient appliquées au niveau de la SGBD tels que les déclencheurs pour assurer les colonnes ont un format spécifique. Notez que ceci est différent de règles d'intégrité de données qui sont généralement juste de clé étrangère regard ups.

58voto

Andy Webb Points 1129

Les outils ne sont jamais mal. Les Applications de ces outils peut être mal.

21voto

MatBailie Points 37610

Je suis d'accord. Les problèmes avec les déclencheurs sont les gens, pas les déclencheurs. Même si c'est plus de regarder, de plus en plus à considérer et augmente le fardeau de la preuve sur les codeurs de vérifier les choses correctement, nous n'avons pas jeter des index pour rendre notre vie plus simple. (Mauvais index peut être tout aussi mauvais que mauvais déclencheurs)

L'importance de déclencheurs (dans mon esprit), c'est que...
- Tout système doit toujours être dans un état valide
- Code pour l'application de cet état valide doit être centralisée (pas écrite dans chaque SP)

À partir d'un entretien de point de vue, un déclencheur est très utile pour competant des codeurs et des problèmes pour plus d'junior/amateur. Pourtant, ces gens ont besoin d'apprendre et de grandir en quelque sorte.

Je suppose que cela vient de votre environnement de travail. Avez-vous des gens fiables qui apprennent bien et on peut faire confiance à être méthodique? Sinon apparemment vous avez deux choix:
- Accepter que vous aurez à perdre des fonctionnalités pour compenser
- Accepter que vous avez besoin de différentes personnes ou mieux, de la formation et de la gestion

Ils sembler dur, et je suppose qu'ils sont. Mais c'est la vérité fondamentale, dans mon esprit...

20voto

derobert Points 26258

Les déclencheurs semblent bien fonctionner pour l'enregistrement d'audit.

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