Από ο,τι καταλαβαίνω θέλεις να ενημερώνεις το application που βρίσκεται στο χώρο του πελάτη, με τη νέα έκδοση που θα έχεις φτιάξει, που πιθανώς θα έχει και αλλαγές στην database.
(Δεν μας λες για το ίδιο το application, φαντάζομαι όμως ότι το εγχείρημα επεκτείνεται και εκεί).
Ναι, γενικά η *αντικατάσταση* της βάσης δεν φαντάζει καλή λύση. Για την ακρίβεια, δεν φαντάζει καθόλου ως λύση.
Υποθέτω ότι χρησιμοποιείς Access, (από τα λεγόμενά σου διαφαίνεται κάτι τέτοιο). Θα πρότεινα τα εξής (όχι αναίμακτα, βέβαια), βήματα, ΠΟΛΥ χοντρικά:
1. Να γυρίσεις σε sql server express.
2. Στην database σου να υπάρχει κάπου σε κάποιον πίνακα η τρέχουσα έκδοση της database. (Minor, major version πεδία τουλάχιστον)
3. Οταν κάνεις update την εφαρμογή του πελάτη (το application), να υπάρχει κάποια συσχέτιση μεταξύ έκδοσης της εφαρμογής και έκδοσης της βάσης - θα μπορούσε να είναι και ο ίδιος αριθμός.
4. Το πρώτο πράγμα που θα ελέγχει η εφαρμογή σου, όποτε τρέχει, είναι αν η έκδοση της βάσης είναι αυτή που αναμένεται.
5. Αν ΔΕΝ είναι, θα πρέπει να έχεις ετοιμάσει μια σειρά από upgrade scripts που είτε θα μεταβάλλουν τη δομή των πινάκων, είτε θα προσθέτουν δεδομένα εκεί που χρειάζεται, ΧΩΡΙΣ να επηρεάζουν τα δεδομένα που έχει ήδη καταχωρήσει ο πελάτης.
6. Αυτό θα πρέπει να το κάνεις για κάθε new version, και μάλιστα η εφαρμογή σου θα πρέπει να είναι "έξυπνη", ωστε π.χ. αν βρίσκεται πέντε versions μπροστά από τη βάση, να ξέρει να τρέξει και τα πέντε σετ από upgrade scripts με τη σειρά, για να φτάσει τη βάση στο επιθυμητό version.
Επαναλαμβάνω, ΠΟΛΥ χοντρικά τα παραπάνω. Απλά σαν ιδέα. Το όλο κλειδί της υπόθεσης είναι ότι ΔΕΝ θέλεις να πειράξεις τα δεδομένα του πελάτη, θέλεις όμως να δώσεις στη βάση τη νέα λειτουργικότητα. Από έκδοση σε έκδοση, αυτό μπορεί συνεπάγεται ακόμα και migration (π.χ. είχες ένα πίνακα που καταχωρούσε κάτι ο πελάτης και τώρα τον έσπασες σε δύο - θα πρέπει να κάνεις migrate τα υπάρχοντα data στη νέα δομή). Είναι όμως μονόδρομος γενικά.
Σωτήρης Φιλιππίδης
DotSee Web Services