2010-01-26 10 views
2

Je développe une application avec des composants client léger et client léger. Nous mettons également à jour notre base de données de telle sorte que les changements de schémas aboutissent à leur propre numéro de version et que des scripts de changement peuvent être appliqués. Les modifications de la base de données, cependant, ne se produisent pas toujours en même temps que les modifications du client lourd. Oui, la modification de la base de données d'aujourd'hui pourrait ajouter une colonne et nécessiter un dans le client lourd, mais la modification de la base de données de demain pourrait corriger une erreur dans une procédure stockée qui ne nécessite aucune modification externe. Comment puis-je coder le client lourd pour tester s'il est compatible avec une version de base de données spécifique lorsque certains sont rétrocompatibles et d'autres pas?Comment votre client lourd vérifie-t-il s'il est compatible avec le schéma de la base de données?

Dans le même que tout le monde se soucie, notre est une application .NET intégrant SQL Server, mais cela ressemble plus à une question de versionnement qu'à une question de plate-forme. À moins qu'il n'existe une solution spécifique à la plate-forme ...

+0

Voir http://stackoverflow.com/questions/115369/do-you-source-control-your-databases. Dupliquer de http://stackoverflow.com/questions/33638/testing-and-managing-database-versions-against-code-versions –

+0

Également dupliqué de http://stackoverflow.com/questions/1534579/verify-database-changes -version-control et http://stackoverflow.com/questions/308/is-there-a-version-control-system-for-database-structure-changes et http://stackoverflow.com/questions/257045/managing -the-migration-of-breaking-database-change-to-a-database-by-old-v –

Répondre

3

Vous pouvez créer une table, ex. metadata avec deux colonnes de chaîne, et y mettre une entrée (ou plus d'entrées) avec la version actuelle du schéma. Je suppose que vous faites quelque chose de similaire maintenant.

Et diviser la version en deux nombres (comme schéma majeur/mineur). Lorsque vous modifiez le schéma de manière non rétro-compatible, vous augmentez la version majeure. Après un changement compatible avec les versions précédentes, vous n'avez qu'à mettre à jour la version mineure.

Major est utilisé par l'application pour vérifier si elle est compatible avec le schéma actuel, et major + minor est utilisé pour vérifier si vous pouvez/devez mettre à jour le schéma. Je pense que c'est la solution qui est utilisée par la plupart des applications.

0

Pourriez-vous adopter un schéma de numéro de version majeur/mineur?

Une modification du nombre majeur implique que les clients ont besoin d'une mise à jour, ce qui n'est pas le cas du changement de nombre mineur.

+0

Un tableau de "numéro de version" qui enregistre les versions majeure et mineure est essentiel à chaque conception de base de données. Cela devrait avoir une rangée. Les applications doivent simplement l'interroger avant de faire quoi que ce soit. –

+0

@ S.Lott: Pouvez-vous partager un peu plus de détails sur cette approche de table "numéro de version"? –

+0

@Tahir Akhtar: 'CREATE TABLE MY_APPLICATION_VERSION (COMPOSANTE VARCHAR, NUMERO MAJEUR, NUMERO MINEUR);' Chaque modification met à jour cette table la version actuelle du composant nommé. Chaque application interroge ceci pour obtenir la version actuelle du composant nommé. –

0

Avec l'un de ces éléments, les numéros de version sont toujours en augmentation. Si la base de données connaît la version client minimale requise et que le client connaît la version de base de données minimale requise, il s'agit d'une vérification simple pour déterminer ce qui doit être mis à niveau (si nécessaire) - maintenant si vous encapsulez la logique dans un stockage stocké. procédure, ou dans le code, c'est votre décision ...