|
-
01-12-2006, 17:56
|
|
fk contraints στη βάση δεδομένων ή σε metadata;
Μια ερώτηση με λιγάκι αιρετικό περιεχόμενο  , κατά τη γνώμη μου! Υπάρχει μια σχολή (όπως λέμε 'η γιουγκοσλάβικη σχολή του μπάσκετ'!) που λέει ότι δεν είναι καλό να βάζουμε foreign key constraints σε μια βάση δεδομένων, γιατί αυτό περιορίζει την επεκτασιμότητά της. Οι περιορισμοί και οι σχέσεις μεταξύ πινάκων πρέπει να ορίζονται με μεταδεδομένα, έτσι ώστε να είναι περισσότερο εύκολη η παραμετροποίησή τους. Προσωπικά μου φαίνεται εντελώς αιρετικό! Ok, δεν μου αρέσει να βάζω πολύ business logic στην βάση δεδομένων και θέλω να την χρησιμοποιώ απλά ως ένα αξιόπιστο repository δεδομένων, αλλά κάποιες βασικές αρχές, όπως τα fk, θέλω να λειτουργούν αυστηρά! Εσάς πως σας φαίνεται; Γίνονται δεκτές και μονολεκτικές απαντήσεις ή απαντήσεις του τύπου "είσαι τρελός;" ή "βάση χωρίς fk = κρεβάτι χωρίς μαξιλάρι" κλπ.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
01-12-2006, 18:37
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
papadi wrote: | Προσωπικά μου φαίνεται εντελώς αιρετικό! Ok, δεν μου αρέσει να βάζω πολύ business logic στην βάση δεδομένων και θέλω να την χρησιμοποιώ απλά ως ένα αξιόπιστο repository δεδομένων, αλλά κάποιες βασικές αρχές, όπως τα fk, θέλω να λειτουργούν αυστηρά! Εσάς πως σας φαίνεται;
|
|
Βιάζεσαι! 
Το ότι δεν μπαίνουν foreign key constraints επάνω στην βάση, δεν είναι ισοδύναμο του ότι δεν υλοποιούνται και ότι δεν υπάρχει παρόμοια λειτουργικότητα. Πιθανώς ο κώδικας εισαγωγής - store procedures/serviced components - κάνει αυτή την δουλειά, ίσως και με μεγαλύτερη επιμέλεια κιόλας!
Είναι αλήθεια ότι σε μια μεγάλη βάση, στο μέγεθος του σχήματος αναφέρομαι, μπορεί να αποδόσει καλύτερα μετά από το πρώτο εκατομύριο εγγραφές, αν δεν υπάρχουν τα foreign key constraints. Και σίγουρα μπορούν τέτοιες να μεγαλώσουν πιο εύκολα, ή και να αλλάξουν του foreign key constraints μηχανισμούς πολύ πιο εύκολα!
George J.
|
|
-
01-12-2006, 18:43
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
gcapnias wrote: | Είναι αλήθεια ότι σε μια μεγάλη βάση, στο μέγεθος του σχήματος αναφέρομαι, μπορεί να αποδόσει καλύτερα μετά από το πρώτο εκατομύριο εγγραφές, αν δεν υπάρχουν τα foreign key constraints. |
|
Όταν λες "να αποδόσει" εννοείς σε θέματα scalability ή σε πραγματική απόδοση;
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
01-12-2006, 18:55
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
Για την πραγματική απόδοση: Αν ήσουν το υπουργείο οικονομικών θα εβαζες FK relation από κάθε φορολογούμενο σε κάθε φορολογική δήλωση που έκανε ποτέ στην ζωή του;
George J.
|
|
-
01-12-2006, 19:42
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
Τα FK constraints έχουν ένα χαρακτηριστικό, όπως και όλα τα άλλα constraints: είναι απίστευτα εύκολο να τα ξεφορτωθείς, αλλά δύσκολο να τα βάλεις σε μια βάση εκ των υστέρων. Ακόμα κι όταν ελέγχεις τα δεδομένα σου με κάποιο τρόπο, υπάρχουν πάντα παραθυράκια να πέσουν στη βάση σκουπίδια: bugs στον κώδικά σου, περίεργα data migration, λανθασμένες κινήσεις (π.χ. διαγραφές) από τους χρήστες κλπ. Το αποτέλεσμα θα είναι ασυνεπή δεδομένα τα οποία μπορεί να έχουν ή να μην έχουν σημασία.
Όσον αφορά την ευελιξία, όντως υπάρχουν περιπτώσεις που δεν μπορείς να ορίσεις ένα constraint, γιατί π.χ. έχεις ένα πίνακα με ομαδοποιήσεις που μπορεί να είναι ως προς υποκατάστημα, είδος, μέγεθος ή κάτι άλλο. Μια ΔΟΥ όμως είναι πάντα μια ΔΟΥ και δεν έχεις να κερδίσεις σε ευελιξία παραλείποντας το constraint.
Η δική μου άποψη είναι: βάλε τα όπου μπορείς, γιατί είναι η τελευταία γραμμή άμυνάς σου. Όταν έρθει η στιγμή που δημιουργούν προβλήματα απόδοσης ή αλλάζει το domain σου, ξεφορτώσου τα.
Νατάσα Μανουσοπούλου
|
|
-
-
01-12-2006, 19:52
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
... η συζήτηση έχει αρχίσει να έχει ενδιαφέρον!
Νατάσα, κάπως έτσι το σκέφτομαι κι εγώ. Σωστό, βέβαια, το ότι σε κάποιες ιδιαίτερες περιπτώσεις μπορεί το fk να ενοχλεί σε απόδοση, μια που κρύβει πίσω του δυο index, αλλά στην γενική περίπτωση χρειάζεται για τους λόγους που ανέφερες.
Άλλωστε, ακόμα κι αν δεν έχεις fk στην βάση και τα υλοποιείς με κώδικα, πάλι θα έχεις πρόβλημα απόδοσης. Αν τα υλοποιείς κατά τις αποθηκεύσεις, για να αποφύγεις το violation, θα έχεις πρόβλημα απόδοσης στις αποθηκεύσεις. Εκτός κι αν έχεις σχεδιάσεις batch διαδικασίες που θα κάνουν αυτούς του ελέγχους, έτσι ώστε να μην γίνονται κατά την αποθήκευση. Πάλι όμως θα πρέπει να έχεις σχεδιάσει και σενάρια αντιμετώπισης των violations, όταν αυτοί οι έλεγχοι "τσακώσουν" αδέσποτη μια εγγραφή!
Γιώργο, κάνω λάθος; Ή υπάρχει κάποιος καλύτερος τρόπος αντιμετώπισης...;
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
01-12-2006, 21:01
|
-
KelMan
-
-
-
Μέλος από τις 03-11-2004
-
Planet Earth
-
Δημοσιεύσεις 2.851
-
-
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
My 2 cents: Θα πρέπει να υπάρχει συγκεκριμένος λόγος και αιτία για να μην χρησιμοποιήσω constraints και μάλιστα θα αποτελεί την εξαίρεση στον κανόνα. Διαφορετικά, ούτε που μου περνάει από το μυαλό να τα ανεβάσω σε application level!
Ακόμα και στην περίπτωση που υπάρχει αυτός ο συγκεκριμένος λόγος και αιτία, είναι τόσο εύκολο τελικά να χαθεί το consistency στα data που δίνει στη λύση πολύ υψηλό ρίσκο! Φαντάσου να μπει μια νέα ή μια πρόσθετη εφαρμογή που δεν γνωρίζει τίποτα για τα metadata σου. Φαντάσου αν θες να επιχειρήσεις ένα import πόσο δυσκολότερο θα είναι να χρησιμοποιήσεις αυτά τα metadata (πχ μέσα από DTS/SSIS). Φαντάσου πόσο δυσκολότερο θα είναι κάποιος να καταλάβει πως δουλεύει το σχήμα της βάσης... Κόλαση!
Vir prudens non contra ventum mingit
|
|
-
01-12-2006, 21:13
|
-
cap
-
-

-
Μέλος από τις 14-01-2005
-
Βύρωνας, Αθήνα
-
Δημοσιεύσεις 2.750
-
-
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
KelMan wrote: | Φαντάσου αν θες να επιχειρήσεις ένα import πόσο δυσκολότερο θα είναι να χρησιμοποιήσεις αυτά τα metadata (πχ μέσα από DTS/SSIS). Φαντάσου πόσο δυσκολότερο θα είναι κάποιος να καταλάβει πως δουλεύει το σχήμα της βάσης... Κόλαση! |
|
Ω ναι! Να κάτι που δεν σκέφτηκα και εγώ στην αρχική μου απάντηση! Και να σκεφτείς οτι ΕΧΩ δουλέψει import με DTS και τα constraints ήταν ο μεγάλος μου σύμμαχος στο να μην κάνω απίστευτες βλακείες! :)
Επίσης: Είναι απίστευτα δύσκολο να παράξεις ένα σωστό ERD όταν δεν υπάρχουν constraints! Εκτός αν παει κανείς βέβαια με την πεποίθηση οτι "όλες οι σοβαρές και μη εφαρμογές εχουν - καπου, καπως, κάποτε - στα documents (?) που τις συνοδεύουν (?) ένα ενημερωμένο ERD Diagram!" :)
Τελος: Ακόμα και στις πιο απλές εφαρμογές (βλεπε VS2005 με typed datasets και μπαμ μπουμ κανονιές στον dataset designer) θα έχετε δει οτι φτιάχνει τα relationships μόνο του αν βρει FK constraints ετσι; Χμ, δεν είναι και τόσο ασήμαντο αυτό - φαντασου να θέλεις να φτιάξεις ένα utility (για μια ήδη υπάρχουσα εφαρμογή) και να το θέλεις ΓΡΗΓΟΡΑ - σενάριο που έχει συμβεί πολλές φορές (και τη στιγμή που γράφω ένα τέτοιο φτιάχνω). Βαση χωρίς constraints = πίτσα χωρίς ψωμάκι :)
Σωτήρης Φιλιππίδης DotSee Web Services
|
|
-
01-12-2006, 21:46
|
-
vxan
-
-

-
Μέλος από τις 08-12-2005
-
Μαρούσι
-
Δημοσιεύσεις 127
-
-
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
Χωρίς να θέλω να πω ότι είναι καλύτερο το ένα ή το άλλο θέλω να αναφέρω την εμπειρία μου από το Microsoft CRM. Το συγκεκριμμένο προϊόν δεν έχει ούτε για δείγμα foreign keys. Μιλώ από τη πλευρά κάποιου ο οποίος έχει δουλέψει αρκετά πάνω στο προϊόν - πλατφόρμα ανάπτυξης εφαρμογών. Το MSCRM είναι ταυτόχρονα μία εφαρμογή CRM και ένας application builder με τεράστιες δυνατότητες επέκτασης (δε κάνω διαφήμιση στη Microsoft, υπάρχουν και limitations). Όπως λοιπόν προανέφερα δεν υπάρχουν FKs αλλά και να υπήρχαν δε θα μας ενδιέφερε γιατί απλά σαν προγραμματιστές δε χρειάζεται να αγγίξουμε τη βάση. Όλο το σύστημα βασίζεται σε Metadata και όλα γίνονται από εργαλεία μέσα στην εφαρμογή. Η αρχιτεκτονική SOA, το security, το consistency και όσα μαθαίνουμε τόσα χρόνια βρίσκονται σε υψηλά επίπεδα σχεδιασμού και ΔΟΥΛΕΥΟΥΝ. Όταν κάποιος χρειάζεται να γράψει κώδικα στο VS2003 (δεν υποστηρίζεται ακόμη .NET2.0 σε όλα τα τμήματα της εφαρμογής) απλά έχει να κάνει με typed objects και όλα μέλι γάλα.
Που θέλω να καταλήξω για να μη μακρυγορώ ... όλα εξαρτώνται άπό την αρχιτεκτονική ενός πληροφοριακού συστήματος ... δεν είναι λάθος η μία επιλογή ή άλλη. Σε κάθε περίπτωση πρέπει να είμαστε ανοικτοί και φυσικά διαβασμένοι ώστε να κάνουμε τη σωστή επιλογή.
Βαγγέλης Ξανθάκης Independent Consultant www.aylos.com
|
|
-
03-12-2006, 13:10
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
Όντως, το MSCRM είναι ανεπτυγμένο πάνω από ένα πολύ ισχυρό application builder. Όπως λες και εσύ, η βάση δεδομένων δεν είναι ορατή στον προγραμματιστή. Οπότε τα πάντα και όχι μόνο τα fk, μεταφέρονται σε ένα διαφορετικό επίπεδο. Ο τρόπος που δουλεύει το MSCRM, όχι μόνο σε αυτό το επίπεδο, αλλά και στο επικοινωνιακό του μέρος, με έχει γοητεύσει... αν επιτρέπετε την έκφραση!
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
|
|
-
04-12-2006, 23:18
|
-
vxan
-
-

-
Μέλος από τις 08-12-2005
-
Μαρούσι
-
Δημοσιεύσεις 127
-
-
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
papadi wrote: | ... Όπως λες και εσύ, η βάση δεδομένων δεν είναι ορατή στον προγραμματιστή. Οπότε τα πάντα και όχι μόνο τα fk, μεταφέρονται σε ένα διαφορετικό επίπεδο ... |
|
Για να μην υπάρξει κάποια παρεξήγηση γι αυτούς που δεν έχουν δει το MS CRM δεν είπα ότι η βάση δεν είναι ορατή στον προγραμματιστή ... μια χαρά βάση δεδομένων στον SQL Server 2K or 2K5. Είπα όμως ότι δε χρειάζεται στον προγραμματιστή γιατί μπορεί να κάνει αυτά που θέλει να κάνει χωρίς να την χρησιμοποιήσει.
Βαγγέλης Ξανθάκης Independent Consultant www.aylos.com
|
|
-
05-12-2006, 00:47
|
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
Τα Foreign Keys είναι metadata και προσδιορίζουν τις σχέσεις μεταξύ των οντοτήτων της βάσης. Η έλλειψη τους δεν είναι προσόν σε καμμία περίπτωση. Ότι μπορεί να δουλέψει μία εφαρμογή χωρίς FKs, μπορεί. Αν κάνει όλα τα checks στον κώδικα. Αν δεν επιτρέπει σε κανένα να έχει πρόσβαση στη βάση. Αν δεν επιτρέπει τα bulk imports. Αν δεν επιτρέπει τα bulk exports. Αν δεν επιτρέπει τη χρήση DTS για import ή export δεδομένων από τη βάση. Αν τρέχει περιοδικά checks στα δεδομένα για να εντοπίσει σκουπίδια. Αλλιώς, ο καθένας μπορεί να εισάγει μία λανθασμένη εγγραφή και να τη διαλύσει.
Όσο για το αν χρειάζεται ή όχι να χρησιμοποιήσει κανείς τη βάση του MS CRM ... πες πως θέλεις να τραβήξεις δεδομένα από αυτή και να φορτώσεις ένα data warehouse. Η να φορτώσεις μαζικά δεδομένα στο CRM από ένα άλλο σύστημα. Θα προτιμούσες να το κάνεις αυτό μέσω ενός γρήγορου DTS ή ενός Web Service το οποίο θα ήταν πολλές φορές αργότερο?
Εδώ που τα λέμε, το data warehouse είναι ένα καλό παράδειγμα για το αν χρειάζονται ή όχι τα foreign keys και αν επηρεάζουν την απόδοση. Σε ένα data warehouse υπάρχει ένας κεντρικός πίνακας με αρκετά εκατομμύρια εγγραφές, ο οποίος έχει foreign keys προς πίνακες-διαστάσεις με μερικές ως αρκετές χιλιάδες εγγραφές ο καθένας. Από τη στιγμή που χρησιμοποιούνται τα κατάλληλα indexes δεν υπάρχει κανένα πρόβλημα απόδοσης. Μόνο όταν φορτώνονται μαζικά δεδομένα στους πίνακες απενεργοποιούνται προσωρινά τα foreign keys και τα indexes, για να επανέλθουν αμέσως μόλις τελειώσει το φόρτωμα.
Σε πολύ σπάνιες περιπτώσεις, μπορεί κανείς να χρειαστεί να φτιάξει πίνακες χωρίς foreign keys. Αυτή όμως είναι η απολύτως τελευταία λύση, καθώς μπορούν άνετα να εφαρμοστούν άλλες τεχνικές που να βελτιώνουν την απόδοση (σωστά indexes, χρήση RAID, σωστά filegroups) κατά πολύ περισσότερο.
Σε τελική ανάλυση, το να παίζεις με τα foreign keys είναι σαν να παίζεις Jengha. Όσο περισσότερα αφαιρείς, τόσο δυσκολεύουν τα πράγματα.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
06-12-2006, 12:49
|
-
spantos
-
-
-
Μέλος από τις 01-02-2006
-
Μαρούσι
-
Δημοσιεύσεις 275
-
-
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
Δε θα μπορούσα να συμφωνήσω περισσότερο με το Παναγιώτη.
Right on the money...
MSc Konstantinos Pantos MCP Software Engineer http://blog.pantos.name http://kostas.pantos.name
|
|
-
06-12-2006, 23:26
|
-
vxan
-
-

-
Μέλος από τις 08-12-2005
-
Μαρούσι
-
Δημοσιεύσεις 127
-
-
|
Απ: fk contraints στη βάση δεδομένων ή σε metadata;
pkanavos wrote: | Όσο για το αν χρειάζεται ή όχι να χρησιμοποιήσει κανείς τη βάση του MS CRM ... πες πως θέλεις να τραβήξεις δεδομένα από αυτή και να φορτώσεις ένα data warehouse. Η να φορτώσεις μαζικά δεδομένα στο CRM από ένα άλλο σύστημα. Θα προτιμούσες να το κάνεις αυτό μέσω ενός γρήγορου DTS ή ενός Web Service το οποίο θα ήταν πολλές φορές αργότερο? |
|
Δηλαδή αν καταλαβαίνω καλά από τα παραπάνω δε συμφωνείς με τον τρόπο που έχει φιαχθεί το MS CRM. Α τώρα που το έφερε η συζήτηση και στα Oracle Apps (ERP, CRM) που έχει τύχει να δουλέψω επίσης αποφεύγανε τα FKs.
Κοίτα να δεις κάτι πράγματα ... αυτοί οι άνθρωποι δε ξέρουν να φιάχνουν μεγάλα συστήματα γιατί δε βάζουν FKs.
Όπως είπα και παραπάνω κάθε φορά που χρησιμοποιούμε μία αρχιτεκτονική το κάνουμε με κάποιο σκεπτικό. Το να αφορίζουμε τη μία ή την άλλη λύση δε νομίζω ότι είναι σωστό. Οι άνθρωποι οι οποίοι σχεδίασαν τα συστήματα αυτά προφανώς είχαν τους λόγους τους και δε το έκαναν επειδή έτσι τους κάπνισε. Ας μη βλέπουμε λοιπόν τα πράγματα τόσο απλουστευμένα και ας αναθεωρήσουμε λίγο τις απόψεις μας ... και το τρόπο με τον οποίο κριτικάρουμε τα προϊόντα του ενός ή του άλλου κατασκευαστή.
Βαγγέλης Ξανθάκης Independent Consultant www.aylos.com
|
|
Σελίδα 1 από 2 (24 εγγραφές)
1
|
|
|