Comment les Postgres clé étrangère 'jour' et 'supprimer' options de travail?
Quelqu'un peut-il fournir une explication claire de ce que ces fonctions ne, et quand il est approprié de les utiliser?
Vous devez vous connecter pour publier un commentaire.
Directement à partir de le manuel...
edit: Vous voudrez peut-être jeter un oeil à cette question connexe: Quand/Pourquoi pour utilisation en Cascade dans SQL Server?. Les concepts derrière les questions/réponses sont les mêmes.
J'ai une base de données PostGreSQL et je l'utilise Sur Supprimer lorsque j'ai un utilisateur qui-je le supprimer de la base de données et j'ai besoin de le supprimer de l'information à partir d'une autre table. De cette façons, j'ai besoin de faire seulement 1 supprimer et FK qui a SUR delete supprimer des informations à partir d'une autre table.
Vous pouvez faire de même avec les mises À Jour. Si vous mettez à jour la table et le terrain ont un FK avec Sur mise à Jour, si une modification est faite sur la FK, vous serez remarqué sur la FK table.
Ce Daok dit est vrai... il peut être assez pratique. D'autre part, avoir des choses se produire automatiquement dans la base de données peut être un réel problème, surtout quand il s'agit d'éliminer les données. Il est possible que dans l'avenir, quelqu'un pourra compter sur le fait que FKs d'éviter que la suppression des parents quand il y a des enfants et ne pas réaliser que votre utilisation de Delete Cascade, non seulement n'empêche pas la suppression, il rend d'énormes quantités de données dans des dizaines d'autres tables aller plus loin grâce à une chute d'eau de suppressions en cascade.
@Arthur commentaire.
Le plus souvent "cachés" des choses qui arrivent dans la base de données la moins probable, il devient que quelqu'un avez une bonne poignée sur ce qui se passe. Les déclencheurs (et c'est essentiellement un déclencheur) peut causer mon simple action de la suppression d'une ligne, d'avoir de vastes conséquences tout au long de ma base de données. - Je émettre une instruction Delete et 17 tableaux sont touchés, avec des cascades de déclencheurs et les contraintes, et rien de ce qui est immédiatement apparent à l'émetteur de la commande. Otoh, que, Si je place la suppression de la mère et de tous ses enfants dans une procédure, alors il est très clair et facile pour quiconque de voir EXACTEMENT ce qui va se passer si je la commande.
Il n'a absolument rien à voir avec comment concevoir une base de données. Il a tout à voir avec les problèmes opérationnels introduit par des déclencheurs.
Au lieu d'écrire la méthode pour faire tout le travail, de la cascade de supprimer ou de mettre à jour en cascade, il vous suffit d'écrire un message d'avertissement à la place. Beaucoup plus facile que de réinventer la roue, et il est clair pour le client (et les nouveaux développeurs de ramasser le code)