Είναι εντελώς λάθος να συζητά κανείς για "βάση χωρισμένη", ή ακόμα και για βάση, όταν μιλάει για Entity Data Models. Σκοπός των Entity Data Models είναι να κρύψουν αν είναι δυνατόν εντελώς ότι υπάρχει βάση και να αφήσουν τον προγραμματιστή και την εφαρμογή να δουλέψει με αντικείμενα. Ένα Entity Model πρέπει να μπορεί να εξυπηρετήσει ένα ή περισσότερα use cases χωρίς να περιλαμβάνει "περιττές" κλάσεις. Πέρα από το "θόρυβο", οι περιττές κλάσεις δημιουργούν και overhead όταν χρησιμοποιείς ένα μοντέλο για πρώτη φορά. Επιπλέον, είναι πολύ πιθανότερο να κάνεις λάθη και να φορτώσεις περιττά αντικείμενα αν το μοντέλο είναι μεγάλο.
Η ιδέα "entity ανά schema" συνεπώς είναι όχι μόνο λάθος αλλά και αντιπαραγωγική. Είναι μία παρανόηση του τί είναι ένα ORM και ποιά η σχέση του με τη βάση από κάτω. Μία συναλλαγή πώλησης πάντα περιλαμβάνει άτομα και προϊόντα. Θα ήταν το λιγότερο "περίεργο" να πρέπει να συνδυάσεις 3 διαφορετικά entity models, άρα και τρία διαφορετικά connections, τρία διαφορετικά batches, τρία διαφορετικά transactions για να καταγράψεις 1 πώληση.
Για να σχεδιάσεις σωστά ένα entity model θα πρέπει καταρχήν να ξεχάσεις ότι δουλεύεις με βάση και να θυμηθείς ότι μιλάς με αντικείμενα. Θα πρέπει μετά να δεις ποιά είναι τα use cases που θέλεις να καλύψεις, ποιά αντικείμενα χρειάζονται και τί μορφή θα έχουν αυτά.
Δεν έχει νόημα να ορίσεις και τα 50 πιθανά properties που έχει ένα πελάτης για χρήση πχ. από πωλήσεις και λογιστήριο, όταν θέλεις να καλύψεις την πώληση στο γκισέ. Αρκεί να χρησιμοποιήσεις μόνο τα 5-10 properties που απαιτούνται για το use case.
Προφανώς, δεν μπορείς να φτιάξεις ένα διαφορετικό μοντέλο για κάθε use case, οπότε θα πρέπει να δεις πως μπορείς να ομαδοποιήσεις διαφορετικά use cases ώστε να χρησιμοποιήσουν το ίδιο μοντέλο. Μπορείς για παράδειγμα να έχεις ένα διαφορετικό μοντέλο για κάθε διαφορετικό module ή οικογένεια use cases της εφαρμογής σου, ή διαφορετικά μοντέλα για business διαδικασία.
Στην πραγματικότητα θα πρέπει να βρεις μία ισορροπία ανάμεσα στο πόσα διαφορετικά use cases μπορείς να εξυπηρετήσεις με ένα μοντέλο σε σχέση με το πόσες κλάσεις μένουν αχρησιμοποίητες (και θεωρούνται overhead) σε κάθε περίπτωση.
Φυσικά, αν η εφαρμογή σου είναι σχετικά μικρή, ίσως να μπορείς να χρησιμοποιήσεις ένα μόνο μοντέλο.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos