
Η πρώτη κανονική φόρμα (1NF) ορίζει τους βασικούς κανόνες για μια οργανωμένη βάση δεδομένων:
- Εξαλείψτε τις διπλές στήλες από τον ίδιο πίνακα.
- Δημιουργήστε ξεχωριστούς πίνακες για κάθε ομάδα σχετικών δεδομένων και προσδιορίστε κάθε σειρά με μια μοναδική στήλη (το πρωτεύον κλειδί).
Τι σημαίνουν αυτοί οι κανόνες όταν εξετάζουμε τον πρακτικό σχεδιασμό μιας βάσης δεδομένων; Είναι πραγματικά πολύ απλό.
Εξαλείψτε την επικάλυψη
Ο πρώτος κανόνας υπαγορεύει ότι δεν πρέπει να αντιγράφουμε δεδομένα στην ίδια σειρά ενός πίνακα. Στην κοινότητα των βάσεων δεδομένων, αυτή η έννοια αναφέρεται ως η ατομικότητα ενός πίνακα. Οι πίνακες που συμμορφώνονται με αυτόν τον κανόνα λέγονται ατομικοί. Ας εξερευνήσουμε αυτήν την αρχή με ένα κλασικό παράδειγμα: έναν πίνακα σε μια βάση δεδομένων ανθρώπινων πόρων που αποθηκεύει τη σχέση διαχειριστή-δευτερεύουσας πλευράς Για τους σκοπούς του παραδείγματος, θα επιβάλουμε τον επιχειρηματικό κανόνα ότι κάθε διαχειριστής μπορεί να έχει έναν ή περισσότερους υφισταμένους, ενώ κάθε υφιστάμενος μπορεί να έχει μόνο έναν διαχειριστή. Διαισθητικά, κατά τη δημιουργία μιας λίστας ή υπολογιστικού φύλλου για την παρακολούθηση αυτών των πληροφοριών, ενδέχεται να δημιουργήσουμε έναν πίνακα με τα ακόλουθα πεδία:
- Διευθυντής
- Δευτερεύον 1
- Δευτερεύον2
- Υπεύθυνος3
- Υποδεέστερος4
Ωστόσο, θυμηθείτε τον πρώτο κανόνα που επέβαλε το 1NF: Εξαλείψτε τις διπλές στήλες από τον ίδιο πίνακα. Είναι σαφές ότι οι στήλες Subordinate1-Subordinate4 είναι διπλές. Αφιερώστε λίγο χρόνο και συλλογιστείτε τα προβλήματα που προκύπτουν από αυτό το σενάριο. Εάν ένας διαχειριστής έχει μόνο ένα δευτερεύον, οι στήλες Subordinate2-Subordinate4 είναι απλώς χαμένος χώρος αποθήκευσης (ένα πολύτιμο προϊόν βάσης δεδομένων). Επιπλέον, φανταστείτε την περίπτωση όπου ένας διευθυντής έχει ήδη 4 υφισταμένους – τι συμβαίνει εάν αναλάβει έναν άλλο υπάλληλο; Ολόκληρη η δομή του πίνακα θα απαιτούσε τροποποίηση. Σε αυτό το σημείο, μια δεύτερη λαμπρή ιδέα εμφανίζεται συνήθως στους αρχάριους της βάσης δεδομένων: Δεν θέλουμε να έχουμε περισσότερες από μία στήλες και θέλουμε να επιτρέψουμε μια ευέλικτη ποσότητα αποθήκευσης δεδομένων. Ας δοκιμάσουμε κάτι σαν αυτό:
- Διευθυντής
- Οι υφιστάμενοι
Και το πεδίο των υφισταμένων θα περιέχει πολλές καταχωρήσεις με τη μορφή «Mary, Bill, Joe.» Αυτή η λύση είναι πιο κοντά, αλλά επίσης υπολείπεται του σημείου. Η στήλη υφισταμένων εξακολουθεί να είναι διπλή και μη ατομική. Τι συμβαίνει όταν πρέπει να προσθέσουμε ή να αφαιρέσουμε έναν δευτερεύοντα; Πρέπει να διαβάσουμε και να γράψουμε ολόκληρο το περιεχόμενο του πίνακα. Αυτό δεν είναι μεγάλη υπόθεση σε αυτήν την κατάσταση, αλλά τι γίνεται αν ένας διευθυντής είχε εκατό υπαλλήλους; Επίσης, περιπλέκει τη διαδικασία επιλογής δεδομένων από τη βάση δεδομένων σε μελλοντικά ερωτήματα. Ακολουθεί ένας πίνακας που ικανοποιεί τον πρώτο κανόνα του 1NF:
- Διευθυντής
- Υφιστάμενος
Σε αυτήν την περίπτωση, κάθε δευτερεύων έχει μία μόνο καταχώριση, αλλά οι διαχειριστές μπορεί να έχουν πολλές καταχωρήσεις.
Προσδιορίστε το πρωτεύον κλειδί
Τώρα, τι γίνεται με τον δεύτερο κανόνα: προσδιορίστε κάθε σειρά με μια μοναδική στήλη ή ένα σύνολο στηλών (το πρωτεύον κλειδί). Μπορείτε να ρίξετε μια ματιά στον παραπάνω πίνακα και να προτείνετε τη χρήση της δευτερεύουσας στήλης ως πρωτεύον κλειδί. Στην πραγματικότητα, η δευτερεύουσα στήλη είναι ένας καλός υποψήφιος για ένα πρωτεύον κλειδί λόγω του γεγονότος ότι οι επιχειρηματικοί μας κανόνες όριζαν ότι κάθε δευτερεύων μπορεί να έχει μόνο έναν διαχειριστή. Ωστόσο, τα δεδομένα που επιλέξαμε να αποθηκεύσουμε στον πίνακα μας το καθιστούν λιγότερο από την ιδανική λύση. Τι θα συμβεί εάν προσλάβουμε έναν άλλο υπάλληλο που ονομάζεται Jim; Πώς αποθηκεύουμε τη σχέση διευθυντή-δευτερεύοντος στη βάση δεδομένων; Είναι καλύτερο να χρησιμοποιήσετε ένα πραγματικά μοναδικό αναγνωριστικό (όπως ένα αναγνωριστικό υπαλλήλου) ως κύριο κλειδί. Το τελικό μας τραπέζι θα μοιάζει με αυτό:
- Αναγνωριστικό διαχειριστή
- Δευτερεύον αναγνωριστικό
Τώρα, το τραπέζι μας είναι σε πρώτη κανονική μορφή! Πέρα από αυτό, υπάρχουν επιλογές για την τοποθέτηση της βάσης δεδομένων σας στη δεύτερη κανονική φόρμα, καθώς και στην τρίτη κανονική φόρμα εάν είστε ενθουσιασμένοι για ακόμη περισσότερη οργάνωση.