2009-07-02 6 views
1

Il y a environ cinq ans, j'ai commencé à utiliser des tables génériques de recherche pour les applications que je développais. Je sais, je peux entendre les soupirs et les poings battre contre vos bureaux, mais il a prouvé qu'il réduit considérablement le temps de développement. Si vous voulez un résumé et une voix forte contre des tables de consultation, Jake Christian fait un bon travail qui résume ici: http://www.projectdmx.com/dbdesign/lookup.aspxRemplacement générique de table de recherche

Le dernier projet que je lancé il y a quelques jours a environ 20 types de valeurs de recherche, allant de l'État Noms aux statuts actifs. En utilisant le modèle N-Tier classique et en restreignant l'accès aux procédures stockées, nous aurions écrit 20 tables, 80 procédures stockées (1 Select, 1 Edit, 1 Update et 1 Delete per) si nous utilisions un modèle relationnel «correct». Au lieu de cela, la table de correspondance commune a 1 table et 4 SP. Comme l'accès aux valeurs de recherche est plus fréquent, nous mettons en cache les valeurs dans un objet d'application ASP.NET.

Ma question est quelles sont les alternatives, en plus de créer une table et 4 SP par type de recherche? Je commence juste à regarder LINQ en remplacement de notre DAL (EntLib DAAB), donc je serais ouvert à entendre parler des alternatives LINQ aussi.

Nous vous remercions d'avance pour vos suggestions.

Répondre

1

L'écriture de tables/procs stockés n'est pas difficile, de nombreux outils existent pour rendre cela assez trivial (même en incluant les relations de clés étrangères impossibles dans les tables de style MUCK).

Ce qui est difficile, c'est de changer à ces structures. Alors que dans votre phase de développement, il est probable que vous réaliserez que certains aspects du modèle étaient incorrects et nécessitent des altérations simples (il s'agit de flotteurs non entiers) ou complexes (nous avons besoin d'une couche supplémentaire entre ces deux tables). Si vous avez juste la base de données de développement, cela peut être douloureux avec plusieurs développeurs, mais ce n'est pas la fin du monde.

La modification en cours de production peut cependant être très complexe et difficile à gérer (nécessitant parfois la mise à jour de toutes les applications à la fois). Les procédures stockées CRUD évitent presque toutes ces questions pour les changements simples mais ne aident pas du tout pour les complexes (en fait ils pourraient même l'entraver) mais fondamentalement la structure a changé de façon significative et il est probable que si vous étiez en utilisant un MUCK que vous auriez manqué d'une certaine manière et commencer à mettre des données invalides dans votre DB.

LINQ pour Sql ne contribue pas beaucoup ici, car il vous permet simplement d'écrire du code qui ressemble à sql [1] (procédures stockées se fait de la manière OMI), mais il va vous faire savoir au moment de la compilation, votre code db n'est plus valide pour certains types de modifications significatives dans le schéma de la base de données (en particulier en ce qui concerne les relations FK). Il n'est pas très utile pour les changements «sémantiques» comme modifier la clé primaire pour couvrir plus/moins de colonnes.

Lors du développement initial, vous pouvez réduire considérablement les frais de base de données en donnant à chaque développeur sa propre base de données, de préférence locale. Cela dépend fortement des coûts associés impliqués bien sûr. Les tables MUCK peuvent avoir leur utilité, en particulier lorsque vous voulez créer/supprimer de nouvelles colonnes à la volée sans frais et conserver leurs valeurs de durée de vie (les mises à jour de schémas jouent avec beaucoup de durée de vie). techniques) mais de telles utilisations sont relativement rares.Vous pouvez rendre Mucks légèrement plus agréable à certains égards (mais pire dans d'autres) en ayant une table par type, vous obtenez alors la validité de type sur insertion/recherche (vous pouvez ajouter des contraintes qui vérifient que la 'catégorie' est insérée est du type correct si désiré). Une partie de ceci peut être cachée derrière des procédures stockées.

[1] Je aime ce ne vous méprenez pas, il ne vient pas aider votre problème spécifique beaucoup

+0

Vous clouer le problème majeur, l'entretien. Vous pouvez utiliser des outils pour créer des tables et des SP CRUD, mais les changements de table tels que les changements de type nécessitent généralement des changements codés à la main dans la table def et 3 des 4 SP du CRUD. Nous limitons notre utilisation aux tables de recherche à varchars pour le contenu (les ID sont ints) car la plupart des valeurs de recherche se retrouvent comme des valeurs dans Drop-Drop-Down et d'autres listes sur le client. Si le type de contenu de recherche était autre chose qu'un varchar, nous créerions une table enfant. – Josh

Questions connexes