Αν και έχει σχέση περισσότερο με ύλοποίηση-σχεδιασμό, πιστεύω ότι ταιριάζει περισσότερο στην ενότητα για τις βάσεις.
Έχω μια εφαρμογή η οποία ουσιαστικά είναι ένα read-only reporting front end για χρήστες-πελάτες. Όλοι συνδέονται με μοναδικό user name, το οποίο προφανώς αντιστοιχεί με join σε πίνακα με ένα μοναδικό Primary key πελάτη ώστε να τραβάω τα πράγματα με απλά views κλπ...
Zητήθηκε λόγω δημιουργίας υποκαταστημάτων με αυτόνομα συστήματα και ξεχωριστές βάσεις, η ενσωμάτωσή τους στο συγχρονισμό, ώστε να χρησιμοποιείται η ίδια εφαρμογή από όλα τους πελάτες όλων των υποκαταστημάτων. Το πρόβλημα είναι ότι προφανώς κάθε βάση έχει δικό της primary key για τους πελάτες.
Πως θα μπορούσα να το αντιμετωπίσω καλύτερα?
Η πρώτη σκέψη ήτανε να κρατάω ένα field για κάθε πελάτη για το σε ποιό υποκατάστημα ανοίκει, και να το περνάω στις stored procedures. Εκει με ένα case, θα κάνω join και θα επιστρέφω αποτελέσματα από διαφορετικούς πίνακες, οι οποίοι θα κρατάνε ξεχωριστά τα στοιχεία για κάθε υποκατάστημα. ΔΕΝ μου αρέσει όμως πολύ...
Μια 2η σκέψη ήτανε να ξεκινήσει το identity auto number από πολύ ψηλά για κάθε υποκατάστημα και κάθε ένα να χρησιμοποιεί διαφορετικό "range" Ids. Κάτι σαν την αριθμοδότιση των ΙΡ διευθύνσεων. έτσι θα μπορώ να τα κρατάω όλα σε έναν πίνακα χωρίς αλλολοκαλυπτόμενα primary keys. Aν PK είναι πχ numeric(18,0), και κατά μέσω όρο κάθε υποκατάστημα έχει 1εκατ. πελάτες, μπορώ να δώσω πχ το 1000000... στο πρώτο, το 2000000... στο 2ο κ.ο.κ.
Έχετε τυχόν προτάσεις πάνω σε αυτό?
Ο συγχρονισμός γίνεται με linked servers, drop tables τοπικά, και select * into localserver.table from remoteserver.table . Ξέρω δεν είναι και πολύ efficient αλλά είναι αρκετά απλό, ειδικά μιας και τα δεδομένα είναι και θα παραμείνουνε read only. To κακό είναι ότι έτσι δεν μπορώ να κάνω insert από διαφορετικούς πίνακες στον ίδιο τοπικό γιατί μου βγάζει ότι ο πίνακας ήδη υπάρχει. (Γι αυτό τον κάνω drop πρώτα τοπικά). Μήπως έχετε να προτείνετε κάτι καλύτερο και για αυτό?
Ευχαριστώ εκ των προτέρων.
Simple Photography