Θα διαφωνίσω όσον αφορά τα MIS και το reporting, και εγώ που φτιάχνω τώρα ένα data warehouse και ο συνάδελφος στο διπλανό γραφείο που φτιάχνει τα reports στο Cognos. Τα Foreign Key constraints τα θες και στις reporting databases ως reference για όποιον άλλο δουλέψει με τη βάση, αλλά και επειδή τα εργαλεία reporting τα χρησιμοποιούν στο σχεδιασμό των μοντέλων τους.
Τέλος, τα θες και για τον πρωταρχικό τους στόχο: τον έλεγχο των δεδομένων. Μία reporting database ή ένα data warehouse πρέπει να περιέχει καθαρή πληροφορία, χωρίς τα λάθη και τις παραλείψεις του OLTP. Ένας τρόπος να το ελέγξεις αυτό είναι με τα Foreign key constraints.
Ο μόνος λόγος να τα αποφύγεις είναι επειδή καθυστερούν πολύ το φόρτωμα των δεδομένων. Γι αυτό και όταν φορτώνεις τα data είτε τα ρίχνεις είτε τα απενεργοποιείς (ανάλογα με τις δυνατότητες της βάσης) και τα επανενεργοποιείς όταν τελειώσει το φόρτωμα. Ο ευκολότερος τρόπος να το κάνεις αυτό είναι με ένα stored procedure.
Εκεί που συνήθως δεν θα βρεις constraints είναι στη staging βάση που χρησιμοποιείς για να φορτώσεις τα αρχικά δεδομένα για "σουλούπωμα", όπου πρέπει να μπούν όλα τα δεδομένα από τις πηγές σου ασχέτως μορφής και κατάστασης, πριν τα συμμαζέψεις.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos