Je travaille sur une application Compact Framework fonctionnant sous Windows Mobile. Il doit être utilisé par les chauffeurs de livraison pour leur dire leur prochain travail et suivre les dépenses, etc. J'ai une base de données SQL CE sur les appareils mobiles et SQL Server sur le serveur. Après avoir lutté avec des problèmes majeurs de performances et de configuration avec Sync Framework, j'ai fini par écrire mon propre code de synchronisation en utilisant WCF. Cela fonctionne bien et est beaucoup plus rapide que Sync Framework, mais on m'a demandé de l'accélérer davantage. Maintenant, nous entrons dans les détails du problème. J'espère pouvoir l'expliquer clairement.Conception de base de données et d'application - suppression des contraintes?
La synchronisation fonctionne une table à la fois et est seulement unidirectionnelle. Les mises à jour sont envoyées du serveur au PDA uniquement. Les données renvoyées au serveur sont traitées de manière complètement différente. Tout d'abord, je supprime tous les enregistrements sur le PDA qui ont été supprimés du serveur. En raison des contraintes de la base de données, je dois supprimer des tables 'child' avant de les supprimer des tables 'parent', donc je travaille sur l'heirachy à partir du bas. PAR EXEMPLE. Je supprime les enregistrements de la table des factures avant de les supprimer de la table des produits.
Ensuite, j'ajoute de nouveaux enregistrements au PDA qui ont été ajoutés sur le serveur. Dans ce cas, je dois d'abord mettre à jour les tables parentes et travailler sur heirachy et mettre à jour les tables enfant plus tard. Le problème est que mon patron n'aime pas le fait que mon application gardera une grande table comme la table des produits synchronisée avec le serveur lorsque le pilote de livraison n'a besoin que de la table invoiceProduct . La table invoiceProduct relie la table des factures et des produits et contient des informations sur le produit. Je veux dire que leur conception de base de données n'est pas normalisée et que le nom du produit a été dupliqué et stocké dans la table invoiceProduct ainsi que dans la table des produits. Bien sûr, nous savons tous que c'est une mauvaise conception, mais il semble qu'ils l'ont fait pour améliorer les performances dans ce type de situations.
La solution évidente consiste à supprimer complètement la table des produits de la base de données PDA. Cependant je ne peux pas faire cela parce que c'est parfois nécessaire. Les conducteurs ont la possibilité d'ajouter un nouveau produit à une facture à la volée. Mon patron suggère qu'ils pourraient simplement synchroniser la grande table de produits de temps en temps ou quand ils essaient d'ajouter un produit et constater qu'il n'est pas là. Cela ne fonctionnera pas avec la conception actuelle si une facture est téléchargée contenant un nouveau produit qui n'est pas sur le PDA, il va lancer une erreur de clé étrangère de base de données.
Désolé de poster un message aussi volumineux. J'espère que cela a du sens. Je ne veux pas supprimer mes contraintes de base de données et gâcher ma belle structure de données :(
Pourquoi la résistance à la synchronisation de la table des produits? –
... Et, pourriez-vous sortir avec seulement avoir (et synchronisation) partie de la table des produits (juste quelques-unes des colonnes)? –