Οι κανονικές φόρμες δεν είναι μόνο για βάσεις δεδομένων

Μπορείτε επίσης να εφαρμόσετε παρόμοιους κανόνες σε τύπους αντικειμένων δεδομένων.

Πιθανότατα μάθατε τον όρο Normal Form στο πλαίσιο του καθορισμού σχημάτων για σχεσιακές βάσεις δεδομένων. Η ομαλοποίηση βάσης δεδομένων προσπαθεί να μειώσει τον πλεονασμό δεδομένων σε σειρές πινάκων και στηλών. Κατά συνέπεια, οι ανωμαλίες δεδομένων είναι λιγότερο πιθανό να εμφανιστούν.

Τι είναι μια ανωμαλία δεδομένων;

Ας υποθέσουμε ότι είχαμε αυτήν την κατάσταση:

Ο Πίνακας Α περιέχει τιμές για τις ιδιότητες X, Y, Z για μια σειρά που αναγνωρίζεται από το id του x ; αυτοί είναι ισχυρισμοί για το x. Ας υποθέσουμε ότι το Y στη σειρά x ισχυρίζεται ότι είναι η τιμή 3.

Ο Πίνακας Β περιέχει επίσης τους ίδιους ισχυρισμούς σχετικά με το γιατί Y για x

Ο Πίνακας Α λέγεται αργότερα: «Τα γεγονότα έχουν αλλάξει. Y είναι τώρα 4 "

Ο Πίνακας Β ερωτάται αργότερα και λέει ότι το Υ εξακολουθεί να είναι 3.

Τώρα οι Α και Β ισχυρίζονται δύο διαφορετικά γεγονότα για το Υ, ανάλογα με τον πίνακα στον οποίο υποβάλλετε ερώτημα.

Αυτή είναι μια ανωμαλία δεδομένων: δύο διαφορετικοί ισχυρισμοί για ένα γεγονός. Και τα γεγονότα έχουν σημασία στα συστήματα υπολογιστών.

Το τι και γιατί για κανονικές μορφές

Θα χρησιμοποιήσω τον τύπο όρου για να δηλώσω τα μετα-δεδομένα ενός αντικειμένου. Αυτό θα μπορούσε να εφαρμοστεί από έναν ορισμό κλάσης, mixin, χαρακτηριστικό, σφραγίδα ή οποιονδήποτε μηχανισμό υποστηρίζει η προτίμησή σας και η γλώσσα επιλογής. Θα επικεντρωθώ επίσης σε αντικείμενα δεδομένων , όπως POJOs, PODOs, JSON και παρόμοια απλά αντικείμενα.

Αναφέρεται ανεπίσημα, οι πρώτες τρεις κανονικές μορφές περιγράφονται ως εξής:

Πρώτη κανονική φόρμα (1NF): Χωρίς επαναλαμβανόμενα στοιχεία ή ομάδες στοιχείων

Δεύτερη κανονική φόρμα (2NF): Όλα τα μη βασικά χαρακτηριστικά εξαρτώνται από όλα τα κλειδιά

Τρίτη κανονική φόρμα (3NF): Δεν εξαρτώνται από μη βασικά χαρακτηριστικά

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

Τα αντικείμενα είναι επίσης σχεσιακά

Οι σχεσιακές βάσεις δεδομένων υποστηρίζουν τους συνδέσμους μέσω περιορισμών πρωτογενών και ξένων κλειδιών. Οι ιεραρχίες είναι σιωπηρές, αν υπάρχουν καθόλου. Οι συσχετίσεις είναι πιο χαλαροί από τις ιεραρχίες και τις ταξινομίες, αλλά είναι επίσης πιο δύσκολο να σκεφτούν.

Σε μια ιεραρχία, έχετε σχέσεις γονέα-παιδιού. Υπάρχει επίσης συχνά μια ιεραρχία τύπων δεδομένων (class-subclass), η οποία είναι επίσης μοντελοποιημένη. Οι σχέσεις σε μια ιεραρχία συγκράτησης αντικειμένων είναι πιο περιορισμένες, γενικά μονόδρομες (γονέας σε παιδί), αλλά επίσης ευκολότερες από μια πιο γενική (και ευέλικτη) σχέση.

1NF: Χωρίς επαναλαμβανόμενα στοιχεία ή ομάδες στοιχείων

Ας πούμε ότι έχουμε τα ακόλουθα στοιχεία επικοινωνίας:

Πού είναι τα επαναλαμβανόμενα στοιχεία;

  1. Χαρακτηριστικά ονομάτων: αυτό θα μπορούσε να θεωρηθεί σχέση one-to-many, όπου ο αριθμός των ονομάτων είναι απροσδιόριστος (όπως το βρετανικό δικαίωμα). Στην πράξη, ωστόσο, το πρώτο, το τελευταίο και πιθανώς το μεσαίο όνομα αρκούν για τους περισσότερους τομείς εφαρμογών, οπότε δεν υπάρχει πραγματική ανάγκη ομαλοποίησης αυτών των πεδίων.
  2. τηλέφωνα: Η επανάληψη χαρακτηριστικών τηλεφώνου μοιάζει με πιθανό πρόβλημα: αρκούν δύο τηλέφωνα; Και τι γίνεται αν περισσότερες πληροφορίες αργότερα συσχετίζονται με τον αριθμό τηλεφώνου, όπως ο διαθέσιμος χρόνος;
  3. γραμμές διευθύνσεων: και πάλι, αρκούν δύο; Σε ορισμένες χώρες, οι διευθύνσεις των οδών μπορούν να έχουν τέσσερις γραμμές, αλλά αυτό είναι το όριο. Δεδομένου ότι είναι απλές χορδές, δεν είναι τραγικό εάν προστεθούν μία ή δύο ακόμη γραμμές διευθύνσεων αργότερα.

Εδώ είναι ένα πιθανό μοντέλο, με τύπους επαφών και τηλεφώνου:

2NF: Όλα τα μη βασικά χαρακτηριστικά εξαρτώνται από όλα τα κλειδιά

Τι σημαίνει αυτό στα απλά αγγλικά; Σε μια βάση δεδομένων, αυτό σημαίνει ότι όλες οι στήλες μιας σειράς πρέπει να εξαρτώνται άμεσα από τα υποψήφια κλειδιά αυτής της σειράς.

Ας ρίξουμε μια ματιά στην Επαφή ξανά:

Εδώ το κλειδί είναι μια δημιουργημένη τιμή αναγνωριστικού, μερικές φορές αναφέρεται ως υποκατάστατο κλειδί. Τα χαρακτηριστικά διευθύνσεων εξαρτώνται από το αναγνωριστικό επαφής; Καλά…

Όλα εξαρτώνται από τον τομέα.

Οι έξι ιδιότητες διευθύνσεων σίγουρα δεν είναι χαρακτηριστικά της Επαφής, αλλά μάλλον μέσα προσδιορισμού μιας φυσικής τοποθεσίας. Είναι πιθανό μια επαφή να έχει πολλές διευθύνσεις και ίσως μια διεύθυνση να έχει πολλές επαφές.

Πρέπει να μοντελοποιηθεί ως σχέση πάρα-προς-πολλά, με κάποιο τύπο αντικειμένου ContactAddress που έχει αναγνωριστικό επαφής και αναγνωριστικό διεύθυνσης; Θα εξαρτηθεί από το τι είναι σημαντικό για τον τομέα της εφαρμογής σας. Ορισμένες εφαρμογές ενδέχεται να αντιμετωπίζουν τις Επαφές ως ισχυρές οντότητες, ανεξάρτητα από τη Διεύθυνση, αλλά Διευθύνσεις ως αδύναμες οντότητες, που εξαρτώνται από μια Επαφή για ύπαρξη. Σε αυτήν την περίπτωση, μία επαφή μπορεί να έχει πολλές διευθύνσεις και κάθε διεύθυνση αναφέρεται σε μια επαφή, όπως αυτή:

Υπάρχει μια πιθανή ανωμαλία δεδομένων: εάν αλλάξετε τη διεύθυνση για μία επαφή, δεν αλλάζετε την ίδια διεύθυνση για όλες τις επαφές. Εάν η επαφή είναι η κύρια πηγή αναφοράς σας, τότε αυτή μπορεί να είναι η επιθυμητή συμπεριφορά: η επαφή σας μετακινείται (σε ​​άλλον οργανισμό, ας πούμε) και οι υπόλοιπες επαφές παραμένουν στη θέση τους.

3NF: Χωρίς εξαρτήσεις από μη βασικά χαρακτηριστικά

Κοιτάζοντας ξανά τη διεύθυνση, ενδέχεται να εντοπίσετε τα δύο εξαρτώμενα πεδία, την περιοχή και τη χώρα. Μια χώρα μπορεί να έχει ή όχι περιοχές, αλλά μια περιοχή έχει μια χώρα: δεν θέλετε να τις συνδυάσετε.

Ένας τρόπος για να διασφαλίσετε ότι η περιοχή ανήκει στη σωστή χώρα είναι να δημιουργήσετε ένα αναγνωριστικό για κάθε ζεύγος (χώρα, περιοχή) και, στη συνέχεια, να αναφέρετε τη διεύθυνση στο αναγνωριστικό και όχι σε περιοχή και χώρα ανεξάρτητα:

Μια λέξη σχετικά με τα δημιουργημένα αναγνωριστικά

Κατά τη γνώμη μου, τα δημιουργημένα αναγνωριστικά είναι μια λεπτομέρεια εφαρμογής και χρειάζονται πραγματικά μόνο από τον κωδικό πελάτη κατά την τροποποίηση ή τη διαγραφή μιας εγγραφής back-end (όπως μια σειρά σε μια βάση δεδομένων), αλλά ποτέ ως μέρος ενός ερωτήματος μόνο για ανάγνωση. Επίσης, δεν πρέπει ποτέ να τα βλέπει ο χρήστης του συστήματος, επειδή δεν έχει νόημα.

Πίνακας ανά τύπο, Πίνακας ανά τύπο ιεραρχίας

Το καλό πράγμα για τους κανονικοποιημένους τύπους αντικειμένων είναι ότι χαρτογραφούνται εύκολα σε σχεσιακούς πίνακες βάσεων δεδομένων. Για μια σχεσιακή εφαρμογή βάσης δεδομένων, οι πίνακες αντικατοπτρίζουν τους τύπους αντικειμένων (Πίνακας ανά τύπο) ή τουλάχιστον περιέχουν πληροφορίες για πολλαπλούς τύπους που προέρχονται από έναν βασικό τύπο (Πίνακας ανά τύπο Ιεραρχία). Αυτό μπορεί να ακούγεται σαν να είμαι υποστηρίζει Object-Relational Mapping, αλλά όχι ... είμαι απλώς λέγοντας ότι είναι ευεργετικό να έχουμε Λογική μερίδιο μοντέλο σας τα ίδια χαρακτηριστικά του φυσικού μοντέλου σε μια εννοιολογικήεπίπεδο. Η εφαρμογή είναι ένα άλλο θέμα εντελώς.

βιβλιογραφικές αναφορές

Υπάρχουν άφθονοι πόροι για την ομαλοποίηση των σχημάτων βάσης δεδομένων σχέσεων:

Ομαλοποίηση βάσης δεδομένων: Πρώτη, δεύτερη και τρίτη κανονική φόρμα - Andrew Rollins

Διάβασα μια εξαιρετική εξήγηση της πρώτης, δεύτερης και τρίτης κανονικής φόρμας πριν από μερικές εβδομάδες. Για όσους γνωρίζουν ποια βάση δεδομένων…

www.andrewrollins.com

Η δεύτερη κανονική μορφή της βάσης δεδομένων εξηγείται στα απλά αγγλικά

Η δεύτερη ανάρτηση επικεντρώθηκε στην πρώτη κανονική φόρμα, τον ορισμό της και τα παραδείγματα για να την σφυρίξει στο σπίτι. Τώρα είναι ώρα να…

www.essentialsql.com

Τι είναι η δεύτερη κανονική μορφή (2NF); - Ορισμός από την Techopedia

Δεύτερη κανονική μορφή 2NF Ορισμός - Η δεύτερη κανονική μορφή (2NF) είναι το δεύτερο βήμα για την ομαλοποίηση μιας βάσης δεδομένων. Το 2NF χτίζει…

www.techopedia.com

Η τρίτη κανονική μορφή βάσης δεδομένων εξηγείται στα απλά αγγλικά

Η τρίτη ανάρτηση επικεντρώθηκε στη δεύτερη κανονική φόρμα, τον ορισμό της και τα παραδείγματα για να την σφυρίξει σπίτι. Μόλις ένα τραπέζι είναι…

www.essentialsql.com

Επίσης, κατά την έρευνα αυτής της ανάρτησης, συνάντησα μια κάπως διαφορετική ιδέα για τον τρόπο εφαρμογής κανόνων κανονικοποίησης σε τύπους αντικειμένων.

Εισαγωγή στην κανονικοποίηση τάξης

www.agiledata.org