7
votes

Avantages et inconvénients de la mise en œuvre de la clé étrangère de manière programmée que dans la base de données

Cela cause autant de problèmes en termes de développement simplement en laissant la base de données en application de la clé étrangère. Surtout lors du test de l'unité, je ne peux pas laisser tomber la table en raison de contraintes de clé étrangère, je dois créer une table dans un tel ordre que la clé étrangère limite l'avertissement ne sera pas déclenchée. En réalité, je ne vois pas trop de point de laisser la base de données en appliquant les limites de la clé étrangère. Si l'application a été correctement conçue, il ne devrait pas y avoir de manipulation manuelle de base de données autre que Select Requêtes. Je veux juste m'assurer que je ne me creuse pas dans un trou en ne limitant pas la clé étrangère dans la base de données et en laissant uniquement la responsabilité de l'application. Est-ce que je manque quelque chose?

P.s. mes tests d'unité réels (non ceux qui utilisent la moqueur) déposent des tables existantes si la structure de l'objet de domaine sous-jacent a été modifiée.


0 commentaires

6 Réponses :


7
votes

Le point d'appliquer les règles dans la base de données est que c'est déclaratif - par exemple. Vous n'êtes pas obligé d'écrire tonne de code pour le gérer.

En ce qui concerne vos tests de l'unité, supprimez simplement des tables dans le bon ordre. Il vous suffit d'écrire une fonction pour le faire une fois.


1 commentaires

Je pensais à ajouter une réponse, mais vous avez dit ce qui devait être dit que vous obtenez. Si Devs manque de compétence technique pour écrire les scripts de configuration et réinitialiser les scripts pour préparer les conditions préalables à tester, ils ne doivent pas fonctionner directement sur la base de données. Dans de tels cas, un DBA devrait préparer ces scripts. Mais abandonner l'intégrité référentielle parce que Devs veulent être paresseux? Certainement pas!



17
votes

Dans mon expérience, si vous n'appliquez pas les clés étrangères dans une base de données, alors finalement (en supposant que la base de données est relativement grande et largement utilisée), vous vous retrouverez avec des enregistrements orphelins. Cela peut arriver à bien des égards, mais cela semble toujours se produire.

Si vous indexez correctement, il ne devrait y avoir aucun avantage de performance aux clés étrangères.

La question est donc la question, les dommages potentiels / tracas / appui-support / coût financier d'avoir des enregistrements orphelins dans votre base de données l'emportent sur le développement et les tests de test?

Dans mon expérience, pour des applications professionnelles, j'utilise toujours des clés étrangères. Il ne devrait pas simplement être un coût d'installation unique pour que vos scripts de construction fonctionnent correctement et la stabilité des données aura plus que de payer pour cela au cours de la vie d'une application.


0 commentaires

1
votes

Voici une belle discussion sur celle-ci dans une question précédente sur: Qu'est-ce qui ne va pas avec les clés étrangères? . [EDIT]: L'argument est de faire des clés étrangères non forcées pour obtenir une partie des avantages si l'un des inconvénients s'applique.


0 commentaires

3
votes

On peut sembler comme si vous pouvez compter sur vos applications pour suivre les règles implicites, mais à moins que vous ne les exécutions finalement, quelqu'un fera une erreur.
Ou peut-être 5 ans à partir de maintenant, quelqu'un fera une rangée d'anciens enregistrements "qui ne sont plus nécessaires" et ne se rendront plus compte qu'il y a des données dans d'autres tables les référencées toujours. Ensuite, quelques jours / semaines plus tard, vous ou votre successeur obtient le travail amusant d'essayer de réparer le désordre que la base de données est comprise. : -)


1 commentaires

J'ai travaillé pendant 8 ans pour une entreprise avec une grande dB de dossiers clients et des données connexes, et malgré les meilleures intentions de choses qui vont mal. Les gens apportent des changements avec une connaissance complète de la DB. Et toute aide vous pouvez les donner pour éviter de faire des erreurs aura éventuellement un gain



6
votes

Vos problèmes de développement ne doivent pas conduire la conception de la DB. La reconstruction constante d'un DB est un cas d'utilisation du développeur, pas un cas d'utilisation du client.

En outre, les contraintes de DB aident au-delà de votre application. Vous ne savez jamais ce que votre client pourrait essayer de faire. Ne le faites pas trop, mais vous avez besoin de quelques-uns.


2 commentaires

Cela dépend de la théorie des tests que vous adhérez. Selon Roy Osherove dans son livre sur le test unitaire, des tests bien écrits doivent être considérés comme des utilisateurs légitimes du code.


@Kazark, mais leurs besoins ne supervisent pas ceux des utilisateurs des données. La conception de la base de données Centricer-Centric est une recette de désastre. Il n'y a aucune condition lorsque la facilité de développement devrait l'emporter sur l'intégrité des données.



1
votes

Si l'application a été correctement conçu il ne devrait y avoir aucun Manipulation manuelle de la base de données Autre que sélectionner les requêtes

Quoi? Quel genre de koolaid buvez-vous? La plupart des applications de bases de données existent pour manipuler les données de la base de données non seulement pour le voir. Généralement, l'application de l'application est d'ajouter les nouvelles commandes ou de créer les nouveaux enregistrements du client ou de documenter les appels de service client, etc.

Les clés étrangères sont destinées à l'intégrité des données. L'intégrité des données est essentielle à la possibilité d'utiliser les données avec n'importe quelle fiabilité. Les bases de données sans l'intégrité des données sont inutiles et peuvent faire perdre de l'argent des entreprises. Cela attire votre opinion égocentrique que FKS ne soit pas nécessaire car ils rendent le développement plus compliqué pour vous. Les données sont beaucoup plus importantes que votre commodité dans les tests d'exécution (qui peuvent être écrits pour rendre compte de la FKS).


1 commentaires

Ouais, qu'est-ce que Koolaid est-ce? Quel type d'application a une base de données exclusivement en lecture seule