Πίνακας περιεχομένων:
Βίντεο: Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ - ΕΦΑΡΜΟΓΗ 4 2024
Υπάρχουν τρεις πηγές τροποποιητικών ανωμαλιών στο SQL Αυτές ορίζονται ως πρώτη, δεύτερη και τρίτη κανονικές μορφές (1NF, 2NF, 3NF). Αυτές οι κανονικές μορφές λειτουργούν ως διορθωτικά μέτρα για τις τροποποιήσεις των τροποποιήσεων.
Πρώτη κανονική φόρμα
Για να είναι σε πρώτη κανονική μορφή (1NF), ένας πίνακας πρέπει να έχει τις ακόλουθες ιδιότητες:
-
Ο πίνακας είναι διδιάστατος με σειρές και στήλες.
-
Κάθε σειρά περιέχει δεδομένα που σχετίζονται με κάποιο πράγμα ή μερίδιο ενός αντικειμένου.
-
Κάθε στήλη περιέχει δεδομένα για ένα μόνο χαρακτηριστικό του αντικειμένου που περιγράφει.
-
Κάθε στοιχείο (τομή μιας γραμμής και μια στήλη) του πίνακα πρέπει να έχει μόνο μία τιμή.
-
Οι καταχωρίσεις σε οποιαδήποτε στήλη πρέπει να είναι όλες του ίδιου είδους. Εάν, για παράδειγμα, η καταχώρηση σε μια σειρά μιας στήλης περιέχει όνομα υπαλλήλου, όλες οι άλλες σειρές πρέπει να περιέχουν ονόματα εργαζομένων και σε αυτήν τη στήλη.
-
Κάθε στήλη πρέπει να έχει ένα μοναδικό όνομα.
-
Δεν υπάρχουν δύο σειρές μπορεί να είναι ίδιες (δηλαδή, κάθε σειρά πρέπει να είναι μοναδική).
-
Η σειρά των στηλών και η σειρά των σειρών δεν είναι σημαντικές.
Ένας πίνακας (σχέση) στην πρώτη κανονική μορφή είναι ανοσοποιημένος σε κάποια είδη ανωμαλιών τροποποίησης αλλά εξακολουθεί να υπόκειται σε άλλους. Ο πίνακας ΠΩΛΗΣΕΙΣ είναι στην πρώτη κανονική μορφή και ο πίνακας υπόκειται σε ανωμαλίες διαγραφής και εισαγωγής. Η πρώτη κανονική μορφή μπορεί να αποδειχθεί χρήσιμη σε ορισμένες εφαρμογές, αλλά δεν είναι αξιόπιστη σε άλλες.
Δεύτερη κανονική μορφή
Για να εκτιμήσετε τη δεύτερη φυσιολογική μορφή, πρέπει να καταλάβετε την ιδέα της λειτουργικής εξάρτησης. Μια λειτουργική εξάρτηση είναι μια σχέση μεταξύ ή μεταξύ χαρακτηριστικών. Ένα γνώρισμα εξαρτάται λειτουργικά από το άλλο εάν η τιμή του δεύτερου χαρακτηριστικού προσδιορίζει την τιμή του πρώτου χαρακτηριστικού. Εάν γνωρίζετε την τιμή του δεύτερου χαρακτηριστικού, μπορείτε να προσδιορίσετε την τιμή του πρώτου χαρακτηριστικού.
Υποθέστε, για παράδειγμα, ότι ένας πίνακας έχει ιδιότητες (στήλες) StandardCharge, NumberOfTests και TotalCharge που σχετίζονται με την ακόλουθη εξίσωση:
TotalCharge = StandardCharge * NumberOfTests
TotalCharge εξαρτάται λειτουργικά τόσο από StandardCharge όσο και από NumberOfTests. Εάν γνωρίζετε τις τιμές των StandardCharge και NumberOfTests, μπορείτε να καθορίσετε την τιμή του TotalCharge.
Κάθε τραπέζι στην πρώτη κανονική μορφή πρέπει να έχει ένα μοναδικό πρωτεύον κλειδί. Το κλειδί αυτό μπορεί να αποτελείται από μία ή περισσότερες από μία στήλες. Ένα κλειδί που αποτελείται από περισσότερες από μία στήλες ονομάζεται σύνθετο κλειδί . Για να είναι σε δεύτερη κανονική μορφή (2NF), όλα τα μη βασικά χαρακτηριστικά πρέπει να εξαρτώνται από ολόκληρο το κλειδί. Επομένως, κάθε σχέση που είναι σε 1NF με ένα πλήκτρο χαρακτηριστικών είναι αυτόματα σε δεύτερη κανονική μορφή.
Αν μια σχέση έχει σύνθετο κλειδί, όλα τα μη βασικά χαρακτηριστικά πρέπει να εξαρτώνται από όλα τα στοιχεία του κλειδιού. Εάν έχετε έναν πίνακα όπου κάποια μη βασικά χαρακτηριστικά δεν εξαρτώνται από όλα τα στοιχεία του κλειδιού, σπάστε τον πίνακα σε δύο ή περισσότερους πίνακες έτσι ώστε - σε κάθε νέο πίνακα - όλα τα μη βασικά χαρακτηριστικά να εξαρτώνται από όλα τα στοιχεία του πρωτεύοντος κλειδιού.
Ο ήχος συγχέει; Κοιτάξτε ένα παράδειγμα για να διευκρινίσετε τα θέματα. Σκεφτείτε τον πίνακα ΠΩΛΗΣΕΩΝ. Αντί να καταγράφετε μόνο μία αγορά για κάθε πελάτη, προσθέτετε μια σειρά κάθε φορά που ένας πελάτης αγοράζει ένα στοιχείο για πρώτη φορά. Μια επιπλέον διαφορά είναι ότι οι πελάτες ναυλωμένων πτήσεων (εκείνοι με τιμές Customer_ID 1001 έως 1007) λαμβάνουν έκπτωση από την κανονική τιμή.
Το αναγνωριστικό πελάτη δεν αναγνωρίζει μονοσήμαντα μια σειρά. Σε δύο σειρές, το Πελάτης_ID είναι 1001. Σε δύο άλλες σειρές, το Πελάτης_ID είναι 1010. Ο συνδυασμός της στήλης Πελάτης και της στήλης Προϊόν προσδιορίζει με μοναδικό τρόπο μια σειρά. Αυτές οι δύο στήλες μαζί είναι ένα σύνθετο κλειδί.
Αν όχι για το γεγονός ότι ορισμένοι πελάτες δικαιούνται έκπτωση και άλλοι όχι, ο πίνακας δεν θα είναι σε δεύτερη κανονική μορφή, επειδή η Τιμή (ένα χαρακτηριστικό που δεν είναι βασικό) εξαρτάται μόνο από ένα μέρος του κλειδιού (Προϊόν). Επειδή ορισμένοι πελάτες πληρούν τις προϋποθέσεις για έκπτωση, η τιμή εξαρτάται τόσο από τον Κωδικό Πελάτη όσο και από το Προϊόν και ο πίνακας βρίσκεται στη δεύτερη κανονική μορφή.
Τρίτη συνήθης μορφή
Οι πίνακες σε δεύτερη κανονική μορφή είναι ιδιαίτερα ευάλωτοι σε ορισμένους τύπους ανωμαλιών τροποποίησης - ιδιαίτερα σε εκείνες που προέρχονται από μεταβατικές εξαρτήσεις.
Μια μεταβατική εξάρτηση εμφανίζεται όταν ένα χαρακτηριστικό εξαρτάται από ένα δεύτερο χαρακτηριστικό, το οποίο εξαρτάται από ένα τρίτο χαρακτηριστικό. Οι διαγραφές σε έναν πίνακα με μια τέτοια εξάρτηση μπορεί να προκαλέσουν ανεπιθύμητη απώλεια πληροφοριών. Μια σχέση στην τρίτη κανονική μορφή είναι μια σχέση στη δεύτερη κανονική μορφή χωρίς μεταβατικές εξαρτήσεις.
Κοιτάξτε ξανά στον Πίνακα ΠΩΛΗΣΕΩΝ, που γνωρίζετε ότι είναι στην πρώτη κανονική μορφή. Όσο περιορίζετε καταχωρήσεις για να επιτρέπετε μόνο μία γραμμή για κάθε πελάτη, έχετε ένα πρωτεύον κλειδί με ένα χαρακτηριστικό και ο πίνακας βρίσκεται σε δεύτερη κανονική μορφή. Ωστόσο, ο πίνακας εξακολουθεί να υπόκειται σε ανωμαλίες. Τι γίνεται αν ο πελάτης 1010 δεν είναι ευχαριστημένος με το χλωρίνη, για παράδειγμα, και επιστρέφει το στοιχείο για επιστροφή χρημάτων;
Θέλετε να αφαιρέσετε την τρίτη γραμμή από τον πίνακα, η οποία καταγράφει το γεγονός ότι ο πελάτης 1010 αγόρασε χλωρίνη χλωρίνη. Έχετε κάποιο πρόβλημα: εάν καταργήσετε τη σειρά, χάνετε επίσης το γεγονός ότι το χλωρίνη έχει τιμή 4 $. Αυτή η κατάσταση είναι ένα παράδειγμα μεταβατικής εξάρτησης. Η τιμή εξαρτάται από το Προϊόν, το οποίο, με τη σειρά του, εξαρτάται από το πρωτεύον κλειδί Customer_ID.
Το σπάσιμο του πίνακα SALES σε δύο πίνακες επιλύει το πρόβλημα της μεταβατικής εξάρτησης. Οι δύο πίνακες αποτελούν μια βάση δεδομένων που βρίσκεται σε τρίτη κανονική μορφή.