Εισαγωγή στις σχεσιακές βάσεις δεδομένων #2

0

 

 

Επανερχόμαστε με το δεύτερο μέρος της εισαγωγής μας στις σχεσιακές βάσεις δεδομένων. Ξέρω πόσο διψάτε για γνώση, γι’αυτό θα μπω κατευθείαν στο ψητό.

Στο πρώτο μέρος είπαμε οτι έχουμε πινακάκια, τα γεμίζουμε και ορίζουμε ένα μοναδικό προσδιοριστή για να μπορούμε να ξαναβρούμε εύκολα ο,τι κουταμάρα γράψαμε σε αυτά. Αλλά τι κουταμάρες μπορούμε να γράψουμε στα πινακάκια μας; Ας δούμε λοιπόν.

Κάθε πινακάκι μπορεί να έχει πολλές στήλες, η κάθε μία να γεμίζει με το κατι τις της. Μόνο που αυτό το κατι τις πρέπει να είναι του ιδίου τύπου για κάθε πεδίο που ανήκει στη στήλη. Ητοι, αν έχετε μια στήλη που παίρνει νουμεράκια ΘΑ ΓΡΑΦΕΤΕ ΝΟΥΜΕΡΑΚΙΑ, αν έχετε μια στήλη που παίρνει ημερομηνίες ΘΑ ΓΡΑΦΕΤΕ ΗΜΕΡΟΜΗΝΙΕΣ. Αν έχετε μια στήλη που παίρνει κείμενο, και αποφασίσετε να τη χρησιμοποιήσετε για να γράφετε νουμεράκια ανακατεμένα με ημερομηνίες και στο ενδιάμεσο προβλέψεις ζωδίων, δικό σας πρόβλημα. Δικό σας και των αστρολόγων.

Επισης, κάθε πεδίο πρέπει να περιέχει μόνο ένα πράμα. ΕΝΑ. Οταν λέμε “επώνυμο πελάτη” εννοούμε “Παραγρηγοροβαγγελολαδοκουκοδημοσταματόπουλος” και όχι “Ο τύπος που ξανασυνάντησα χθες μετά από 3 χρόνια και μου χρωστάει 5000 ευρώ”. Τα ευρώ μπαίνουν στο πεδίο του ποσού, η ημερομηνία πρώτης συνάντησης στο πεδίο της ημερομηνίας και “ο τύπος” στο πεδίο “φύλο”. Το γεγονός ότι ψάχνατε τρία χρόνια να βρείτε κάποιον που σας χρωστάει και δεν τον βρίσκατε μπαίνει απλά στο βιβλίο Γκίνες, στην κατηγορία “ηλιθιότητα”. Εντάξει;

Η διαδικασία που μόλις περιέγραψα έχει το εξωτικό όνομα “κανονικοποίηση” και αυτό που περιέγραψα παραπάνω είναι (sort of) ο Πρώτος Κανονικός Τύπος (1NF).

Για να είναι μια σχεσιακή βάση δεδομένων σε μια μορφή ελαφρώς χρησιμοποιήσιμη από ανθρώπους με IQ άνω του δεκαδικού, πρέπει να βρίσκεται τουλάχιστον στον Τρίτο Κανονικό Τύπο (3NF). Δεν θα μπω σε λεπτομέρειες, υπάρχουν χιλιάδες άρθρα για να διαβάσετε, εδώ κάνουμε απλα μια εισαγωγή. Αυτό που θα πρέπει όμως να κρατήσετε στο μυαλό σας είναι το εξής:

ΠΩΣ ΑΝΑΓΝΩΡΙΖΟΥΜΕ ΜΙΑ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΠΟΥ ΔΕΝ ΕΙΝΑΙ ΚΑΝΟΝΙΚΟΠΟΙΗΜΕΝΗ

Αν, εξετάζοντας τους πίνακες της βάσης, αναφωνήσουμε τουλάχιστον μια φορά “αμαν, τι έχει κάνει ο τύπος”, τότε η βάση δεν βρίσκεται στον Τρίτο Κανονικό Τύπο (αλλιώς ο τύπος που τα έχει κάνει αυτά δεν θα άξιζε τέτοια επιφωνήματα). Παρομοίως, για όσες φορές αναφωνήσουμε το παραπάνω, η βάση δεν θα βρίσκεται στον Δεύτερο, στον Πρώτο και ούτω καθ’εξής.

Το μυστικό είναι ότι Τρίτος Κανονικός Τύπος σημαίνει συνήθως, ανεξάρτητα από την επιστημονική του ερμηνεία, ότι τη βάση την έχουν περάσει ένα χεράκι τουλάχιστον τρεις τύποι, οι οποίοι είναι “κανονικοί” και ξέρουν τι κάνουν και όχι αυστραλοκαγκουροσάλιαγκες που φτιάχνουν ecommerce + CRM + ERP + MMORPG application που βγαίνει “πρώτο στο google” με 50 ευρώ το hosting δωρεάν παρεπαρεπαρε.

Αν ανακαλύψετε ότι έχετε αναφωνήσει το παραπάνω πάνω από δεκα-δεκαπέντε φορές, τότε σταματήστε. Αλλάξτε επάγγελμα ΑΜΕΣΑ για να προστατευθούν οι αθώοι. Hint: δεν κοιτάτε βάση δεδομένων, κατά πάσα πιθανότητα κοιτάτε το μενού του σουβλατζίδικου από το οποίο θέλετε να παραγγείλετε.

Τελος, προτείνεται να ακολουθείτε απλές τακτικές όταν ονομάζετε τα διάφορα πεδία και τους ίδιους τους πίνακές σας. Το πεδίο Surname του πίνακα Clients έχει νόημα. Εστω, και το πεδίο ClientSurname του πίνακα Clients έχει νόημα για όσους δεν θέλουν να χρησιμοποιήσουν two-part identifiers στα queries τους γιατί τους κάνει βαβα το δαχτυλάκι να γράφουν πολλά. ΟΜΩΣ, το πεδίο DeptStorDFClntARSurnameOfclExt του πίνακα ExtDeptDStorCRMPeopleSDClients αποτελεί ΕΓΚΛΗΜΑ εναντίον της μυωπίας, του συνδρόμου καρπιαίου σωλήνα, της ανάλωσης πόρων για autocomplete και της γενικής συναισθηματικής και ψυχολογικής σταθερότητας των προγραμματιστών. Συμμορφωθείτε!

Αναμένω τις δικές σας προτάσεις για τη συνέχεια του μαθήματος. Θέλετε να πούμε για referential integrity; Transactions; Indexes; Κάτι άλλο; Προτάσεις, χυδαίες ύβρεις και προσφορές για να μου χαρίσετε αυτοκίνητα / σπίτια / τον παλιό σας κώδικα Clipper στα σχόλια.

Σχόλια (18) -