Dimitris wrote: |
Ναι είναι ευθήνη της εφαρμογής να μην κάνει update την τιμή σε αρνητικό αριθμό ή να μην β ημερομηάλεινία 20005 αντί για 2005. |
|
Ποιάς απ' όλες τις εφαρμογές? Δεν είναι μόνο μία η εφαρμογή που κοιτάει μια βάση. Ακόμα και αν φτιάχνεις μια καινούρια εφαρμογή με μια εντελώς νέα βάση, κάποια στιγμή θα θέλεις να προσθέσεις άλλη μια εφαρμογή, ή κάποιος άλλος θα θέλει να φτιάξει μια νέα εφαρμογή πάνω από τη βάση σου. Τί θα κάνει τότε? Θα πρέπει να βρει τον δικό σου κώδικα για να καταλάβει τί συμβαίνει? Και αν χρειαστούν κάποιες αλλαγές στη βάση? Θα πρέπει να αλλάξουν όλες οι εφαρμογές που τη χρησιμοποιούν?
Αν γίνει αυτό που προτείνεις θα πρέπει να φτιάξεις και κάποια batch που θα τρέχουν περιοδικά για να ελέγχουν ότι τα δεδομένα της βάσης είναι σωστά. Κάποτε αυτό ήταν αποδεκτό, επειδή τα μηχανήματα ήταν αργά και κόστιζε πολύ να τρέχει κανείς τους ελέγχους για τα constraints για κάθε insert/update/delete. Σήμερα, τα μηχανήματα είναι πολύ πιο γρήγορα και κανείς δεν έχει όρεξη να σπαταλήσει χρόνο για κάτι που η database μπορεί να το κάνει πολύ απλά μόνη της.
Όσα λες θα ίσχυαν αν η βάση ήταν απλά ένα ακόμα component της εφαρμογής. Αυτό όμως δεν ισχύει παρά μόνο σε εξαιρετικά απλές εφαρμογές. Ακόμα και μηχανογράφηση video club να κάνεις, σε ένα και μόνο υπολογιστή, δεν είσαι σίγουρος ότι δεν θα προστεθεί κάποια στιγμή και άλλη εφαρμογή στην ίδια βάση. Μπορεί το video club να βάλει και ένα ATM για την επιστροφή των ταινιών. Αυτό ήταν σπάνιο πριν από μερικά χρόνια, αλλά κοντεύει να γίνει στάνταρ πλέον.
Όλα αυτά δεν τα λέμε επειδή είμαστε κολλημένοι με τον SQL Server ή μισούμε το MySQL. Είναι βασικές αρχές οι οποίες ισχύουν εδώ και δεκαετίες, χωρίς τις οποίες δεν μπορείς να φτιάξεις σωστές εφαρμογές. Ανήκουν στην ίδια κατηγορία με το "σπάτε τον κώδικα σε functions", "αντί να κάνετε copy-paste τον κώδικα που χρειάζεστε φτιάξτε ένα function", "δώστε ευκολονόητα ονόματα στις παραμέτρους και τις μεταβλητές". Στην αρχή όλοι τα αγνοήσαμε γιατί τα βρίσκαμε υπερβολικά. Αλλάξαμε βέβαια γνώμη αφού κάηκε η γούνα μας μετά από ένα-δύο project!
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos