>> Εντάξει.
Έτσι, χωρίς άλλη καθυστέρηση, SQL, Structured Query Language.
Έτσι, θα χρησιμοποιήσει κατά πάσα πιθανότητα αυτό σε τουλάχιστον σε CS50, ίσως στο CS165,
ίσως στο δικό σας προσωπικά projects.
Και τι SQL σας επιτρέπουν να κάνετε, σε SQL Server γενικότερα;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Εντάξει, αυτό ήταν πολύ ασφαλή τρόπο να το πει.
Ναι. Έτσι ώστε να επιτρέπει μπορείτε να αποθηκεύσετε τα δεδομένα
και το πιο σημαντικό επιτρέπει μπορείτε να υποβάλετε ερώτημα για τα δεδομένα.
Και αυτό είναι ένα βήμα προς τα εμπρός
από τη χρήση κάτι απλούστερη σαν CSV, δεξιά.
Διαχωρισμένες με κόμμα μεταβλητές.
Παρόμοιες τιμές.
Παρομοίως σας επιτρέψει να αποθηκεύσετε Πληροφορίες μία σειρά
σε ένα αρχείο κειμένου.
Αλλά αυτό είναι το μειονέκτημα του ενός CSV αρχείο για την αποθήκευση των δεδομένων σας,
ακόμα κι αν αποτελεσματικά πάρει γραμμές και στήλες από αυτό;
Ναι.
>> Δεν «έχουν η ίδια οργάνωση
αποτελεσματικότητας [δεν ακούγεται].
>> Δεν έχουν την ίδια αποδοτικότητα οργάνωση.
Τι εννοείς;
>> Λοιπόν, όπως [δεν ακούγεται] έχουν σαν πρωταρχική [δεν ακούγεται].
>> OK. Ναι.
>> Είναι μια σχεσιακή βάση δεδομένων μπορείτε να έχετε πολλαπλές βάσεις δεδομένων
συνδέονται μεταξύ τους με πολύ συγκεκριμένους τρόπους.
>> OK. Καλή.
Είναι >> [δεν ακούγεται] να ορίσετε ένα CSV.
>> Και επιτρέψτε μου να το τσίμπημα μια μικρή ορολογία.
Έτσι, πολλούς πίνακες σε μια βάση δεδομένων, σίγουρα,
και που πηγαίνει πέρα ​​από ό, τι μπορείτε να κάνετε με ένα μόνο CSV.
Αλλά πραγματικά ο περιορισμός με CSV θα έλεγα είναι
ότι η αναποτελεσματικότητα του όλα.
Είναι πολύ εύκολο να διάταξη.
Αλλά αν θέλετε να κάνετε ένα ερώτημα, τι είναι ο χρόνος εκτέλεσης
οποιουδήποτε ερωτήματος επιλογής σε ένα αρχείο CSV;
Θέλω να πω ότι είναι μεγάλο παλιό [δεν ακούγεται], σωστά, γιατί στη χειρότερη περίπτωση,
αυξήθηκαν στο κάτω μέρος.
Ακόμα κι αν είχε ταξινομημένο το σύνολο CSV αρχείο, αν δεν ξέρετε
ότι η εκ των προτέρων, και, είστε ακόμα πρόκειται να έχουν
για να αναζητήσετε το όλο θέμα.
Έτσι, ανάμεσα στα πράγματα θα πάμε για να πάρει
από τη χρήση ενός πραγματικού βάση δεδομένων χρησιμοποιώντας μια γλώσσα
όπως SQL είναι ότι μπορεί να ρωτήσει αυτό και μπορούμε εκ των προτέρων
ως σχεδιαστές βάσεων δεδομένων προσδιορίζει ποια είναι τα πεδία
που πιθανόν θα έχει ερωτήσεις σχετικά με έτσι ώστε οι άνθρωποι
σε MySQL ή Microsoft ή η Oracle,
όποιος έχει κάνει τη βάση δεδομένων που χρησιμοποιείτε μπορεί να κάνει όλα
από τη σκληρή δουλειά του υπολογίζοντας, OK,
δίνεται ένα εκατομμύριο από αυτούς IDS.
Πώς μπορούμε να σχεδιάγραμμα - τους έξω στη μνήμη;
Κάποιο είδος δέντρου δομή ίσως,
έτσι ώστε όταν κάνετε στην πραγματικότητα εκτελούν Επιλογή,
αυτό είναι κάτι που είναι λογαριθμική ή λογαριθμική
λογαριθμικής στο χρόνο και όχι από ό, τι στην πραγματικότητα αποκέντρωση
σε κάτι γραμμικό.
Έτσι πήραμε πολλά απόδοση με αυτόν τον τρόπο.
Και μπορούμε επίσης να αποθηκεύσει πολύ περισσότερα δεδομένα πιο εύκολα »να προκαλέσει την SQL
Server είναι συνήθως αποθηκεύονται στη μνήμη RAM, ακόμη και αν τα μέρη
του θα μπορούσε να αποθηκευτεί στο δίσκο και ίσως γνωρίζετε από τώρα
ότι η μνήμη RAM είναι γενικά γρηγορότερα από δίσκους,
έτσι ώστε να είναι ένα καλό πράγμα.
Και μπορούμε επίσης να χειριστεί συγχρονισμός πολύ καλύτερα.
Αν έχετε πάρει 165 ή 161, Ξέρετε ότι αν δύο άνθρωποι προσπαθούν
να κάνουν το ίδιο πράγμα ταυτόχρονα σε ένα σύστημα,
κακά πράγματα μπορούν να συμβούν γενικά.
Έτσι μεταξύ των άλλων χαρακτηριστικών που μπορείτε να πάρετε αν σχεδιάζουμε τραπέζια μας
κατά το σωστό τρόπο είναι καλύτερη υποστήριξη και την ασφάλεια
όταν πρόκειται για την συνταύτιση.
Έτσι, δύο άτομα σε δύο μέρη
του κόσμου χρησιμοποιώντας το ίδιο ιστοσελίδα, αν και οι δύο προσπαθούν
να αγοράσει κάτι με την ίδια φορά, η απόφαση αυτή δεν πρόκειται
να πάει σε ταυτόχρονα.
Κάπως θα είναι σε συνέχειες από κάποιον εκτός από τη δική μας -
κάποιον άλλο από τους εαυτούς μας.
Η βούληση της βάσης δεδομένων κάνει αυτό για εμάς.
Έτσι, όταν ήρθε η απλούστερη μορφή,
SQL μας επιτρέπει ερώτημα α σχεσιακή βάση δεδομένων.
Μια σχεσιακή βάση δεδομένων είναι ένα που έχει ένα
ή περισσότερους πίνακες σε τυπικά.
Και, εάν αυτό είναι ένα λίγο άγνωστο,
μπορείτε πραγματικά να σκεφτείτε αυτό, όπως το Excel ή αριθμούς
ή υπολογιστικά φύλλα Google.
Έχει μόλις γραμμές και στήλες και τυπικά η κορυφή του καθενός
των εν λόγω σειρών έχει ένα όνομα για αυτό.
Έτσι, αυτό μπορεί να είναι το ID στήλη, η στήλη το όνομα,
Η στήλη διεύθυνση και ούτω καθεξής.
Και τότε μπορείτε να έχετε πολλαπλές αυτούς τους πίνακες, αν θέλετε
να ξεκινήσει τον έξω διαφορετικούς τύπους δεδομένων.
Αλλά ίσως θυμάστε τουλάχιστον από CS50 που προσπαθήσαμε
για να σας δώσει ένα GUI-based εργαλείο [δεν ακούγεται]
για τη διαχείριση της βάσης δεδομένων σας.
Ονομαζόταν phpMyAdmin.
Γι 'αυτό είναι απλά μια σύμπτωση που ήταν γραμμένο σε PHP, πραγματικά,
αλλά ήταν απλά μια web-based εμπρόσθιο άκρο σε μια βάση δεδομένων.
Και μέσω των διαφόρων καρτέλες και τις συνδέσεις, θα μπορούσατε να αρχίσετε
για να ρυθμίσετε μια βάση δεδομένων για τον εαυτό σας.
Αλλά ένα καλό εργαλείο για να αρχίσει να πάρετε μια λίγο πιο άνετα
με είναι επίσης η πελάτη της γραμμής εντολών.
Έτσι, εάν χρησιμοποιείτε τη συσκευή CS50 πραγματικά ή χρησιμοποιώντας οποιοδήποτε PC macro
ότι έχει μια γραμμή εντολών της MySQL client, μπορείτε επίσης να κάνετε το είδος
της παλιάς σχολής, όπως αυτό.
Ως μέρος του σχεδίου MySQL, τουλάχιστον η ανοικτή έκδοση πηγής
από αυτό που καλείται τώρα MariaDB για διάφορους λόγους μπορείτε να διαβάσετε
στη Wikipedia, αλλά είναι το ίδιο λογισμικό,
Είναι η ίδια σύνταξη και ούτω καθεξής,
λίγο πολύ η ίδια βάση κώδικα.
Και έτσι όταν είμαι σε αυτό προτρέψει μπορώ τώρα να αλληλεπιδράσουν
με τη βάση δεδομένων μου πολύ περισσότερο με το χέρι.
Έτσι προκειμένη περίπτωση, επιτρέψτε μου να προχωρήσει
και μόλις ανοίξει ένα παράθυρο τερματικού.
Έτυχε να είμαι χρησιμοποιώντας το CS50 Συσκευή, αλλά μπορείτε να το κάνετε αυτό
σε πιο οποιοδήποτε σύστημα το οποίο έχεις το δικαίωμα
εγκατεστημένο λογισμικό.
Και Πάω να κάνω MySQL-u για το όνομα χρήστη John Harvard
σε αυτό το συγκεκριμένο σύστημα,-ρ για έναν κωδικό πρόσβασης που θα πληκτρολογήσετε
σε λίγο περισσότερο ασφάλεια πατώντας Enter.
Τώρα είμαι ζητηθεί.
Πάω να πληκτρολογήσετε βυσσινί στη συσκευή CS50
και τώρα βλέπω ουσιαστικά ότι η ίδια οθόνη.
Αλλά υπάρχει εντολές τώρα ότι μπορούμε να αρχίσουμε την πληκτρολόγηση
όπως δείχνουν οι βάσεις δεδομένων, και ότι πρόκειται να μου δείξει όλα
από τις βάσεις δεδομένων που έχω ήδη δημιουργηθεί στο σύστημα,
λίγο πολύ η ίδια λίστα θα δείτε στο phpMyAdmin.
Υπάρχει ένα ζευγάρι των άλλων, όπως σχήματος πληροφοριών και τη δοκιμή,
το οποίο αν σακί γύρω από το CS50 Appliance, έχουμε κρύψει μερικά
από αυτούς τους πίνακες χαμηλότερο επίπεδο
αλλά έχουν πάει υπάρχει όλο αυτό το διάστημα.
MySQL έχει πράγματι χαμηλό επίπεδο ιδιότητες, όπως usernames
και τους κωδικούς πρόσβασης για τη βάση δεδομένων η ίδια, όχι για την εφαρμογή σας
ότι μπορεί να τρέχει πάνω σε αυτό.
Έτσι, εκ των προτέρων, σήμερα, δημιούργησε ένα ζευγάρι βάσεων δεδομένων,
ένα από τα οποία ονομάζεται courses50.
Οι πιθανότητες είναι μερικοί από εσάς έχουν χρησιμοποιήσει Εργαλείο για ψώνια φυσικά CS50,
η οποία είναι μια μεγάλη διεπαφή για Κατάλογος πορεία του καταχωρητή.
Και αυτό είναι πραγματικά ένα ωραίο δέσμη για να μιλήσουμε για «αιτία,
ένα, είμαστε το είδος του συνόλου προφανώς εξοικειωμένοι με τα μαθήματα
και τους εκπαιδευτές και συνάντηση περιοχές και όλα το είδος
των απλών πραγμάτων του πανεπιστημίου,
αλλά είναι επίσης πήρα κάποια ενδιαφέρουσες ευκαιρίες
για το σχεδιασμό.
Έτσι σκεφτήκαμε να χρησιμοποιήσετε το έννοια ενός καταλόγου φυσικά
και ένα εργαλείο για ψώνια ως παράδειγμα σε όλη την σήμερα για να ταξινομήσετε
του σκελετού μερικά του σχεδιασμού αποφάσεις που πρέπει να κάνουμε.
Οπότε ας ξεκινήσουμε από εκεί.
Ας υποθέσουμε ότι εγώ πραγματικά ήθελε να εκπροσωπεί το σούπερ απλούστερη
Φυσικά ψώνια εργαλείων.
Και το πιο απλό κόσμο Μπορώ να φανταστώ και το ένα είναι
στην οποία υπάρχουν μαθήματα και υπάρχουν εκπαιδευτές.
Και ας υποθέσουμε ότι για να η χάρη της συζήτησης
ότι κάθε μάθημα έχει τουλάχιστον ένα όνομα.
Οπότε ας αρχίσουμε να σκίτσο αυτό έξω.
Πάω να χρησιμοποιήσετε το phpMyAdmin μόνο ως ευκολία,
έτσι δεν έχουμε να πληκτρολογήσετε όλα τα ερωτήματα χειροκίνητα.
Αλλά εδώ είμαι μου βάση δεδομένων courses50.
Aν δεν είστε εξοικειωμένοι με αυτό, θα είναι πολύ εύκολο, αφού έχετε βουτήξει
στο δικό σας έργο αν θέλετε να το χρησιμοποιήσετε.
Πάω να δημιουργήσει ένα πίνακα που ονομάζεται Μαθήματα
και δεν μπορώ παρά να σκεφτώ ενός πεδίου
Προς το παρόν, το όνομα του μαθήματος.
Πάω να προχωρήσει και ας πούμε να μου δώσει μία στήλη.
Τώρα, όπως θα θυμάστε μπορείτε να πάρετε μια διεπαφή που είναι ένα κομμάτι
όπως αυτό.
Και η άλλη ανάποδα ειλικρινά του phpMyAdmin είναι ότι το είδος
της αυτο-εντολέα και ότι μέσω των dropdowns, μπορείτε να ταξινομήσετε
της δούμε ποια είναι τα πιθανά σας σχεδιαστικές αποφάσεις είναι.
Έτσι, Πάω να δώσει κάθε μάθημα ένα όνομα.
Αυτό είναι το όνομα αυτής της στήλης.
Και τι γίνεται με τον τύπο δεδομένων του;
Οι περισσότεροι από εσάς θα πρέπει να γνωρίζουν σε τουλάχιστον μερικά από αυτούς τους τύπους δεδομένων
από την προηγούμενη εμπειρία.
Ποιο είναι το κατάλληλο για όνομα του μαθήματος;
Sharon;
>> Varchar.
>> OK, varchar που είναι Μεταβλητό Χαρ.
Και τι κάνει η σημαίνει πιο τεχνικά;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
OK. Γι 'αυτό είναι ένα string.
Και η πτυχή var από ό, τι αυτό συνεπάγεται;
Μεταβλητή. Αλλά τι σημαίνει αυτό;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ακριβώς. Γι 'αυτό είναι μια μεταβλητή αριθμό των χαρακτήρων
στη σειρά μέχρι σε κάποιο μέγιστο.
Έτσι, εδώ είναι το πρώτο μας απόφαση του σχεδιασμού.
Στην πραγματικότητα έχουμε να αποφασίσουν πόσα bytes μέγιστο
να διαθέσει σε κάθε τέτοια σειρά.
Σε γενικές γραμμές, που θέλετε να είδος δεν είναι πάρα πολύ μικρό,
Δεν το κάνετε μεγάλο «Προκαλεί εμφανή
αν είναι πολύ μικρό είσαι απλά πρόκειται να αρχίσει περικοπή των δεδομένων
και θα χάσετε τις πληροφορίες.
Και αν είναι πολύ μεγάλη, είστε ακριβώς το είδος της αφήγησης της βάσης δεδομένων
να περιμένουμε και να βελτιστοποιηθεί για περισσότερα στοιχεία
από ό, τι θα μπορούσε ποτέ να πάρει πραγματικά.
Έτσι τι είναι ένα λογικό συναίσθημα αριθμό για το όνομα του μαθήματος;
60; ΕΝΤΑΞΕΙ, έτσι 60.
Αυτό μου φαίνεται πολύ λογικό
για όσο διάστημα είναι ότι δεν υπάρχει εξαιρέσεις σε αυτό.
Πραγματικά δεν υπάρχει σκληρά, απαράβατο κανόνα.
Για να είμαι ειλικρινής, για ιστορικούς λόγους, ένα πολύ
των ανθρώπων που θα επιλέξουν 255 «Προκαλέσει εδώ και χρόνια ότι ήταν το είδος
από την προεπιλεγμένη μέγιστη χρήση 8 bytes - 8 bits ως μετρητή σας.
Είχα περισσότερα [δεν ακούγεται] μπορεί να κάνει χρήση των εξουσιών 2
αλλά είναι το είδος άσχετο.
Έτσι, μπορούμε να πάμε με 60.
Αυτό φαίνεται λογικό, εφόσον
όπως εμείς τελικά δεν το μετανιώνω «Προκαλέσει αυτό είναι ένα άνω φράγμα.
Τώρα, ας υποθέσουμε το αντίθετο είχε ληφθεί απόφαση,
Δεν μεταβλητή χαρακτήρες, αλλά μόνο το πεδίο char.
Έτσι, σε αντίθεση με C και C + +, char δεν σημαίνει ότι κάποιος char
και βάσεις δεδομένων που γενικά σημαίνει ένα σταθερό αριθμό
των χαρακτήρων σε μια συμβολοσειρά.
Ποιο θα ήταν το ανάποδα ή / και μειονέκτημα επιλογή μου 60
για ένα πεδίο char, αντί varchar;
Αυτό ακριβώς είναι το πρώτο είδος της απόφασης θα πρέπει να κάνουν
όταν επιθεωρούν [φωνητικά] από της έργο με τους συνεργάτες σας.
Ναι, ο Σαρόν και πάλι.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Καλή. Έτσι, αν το όνομα είναι λιγότερες
από 60 τότε είστε σπατάλη όποια και αν είναι η δέλτα
μεταξύ 60 και η πραγματικό μήκος.
Έτσι ώστε μόλις αισθάνεται σπάταλη, περισσότερα bytes ό, τι χρειάζεστε.
Αλλά γιατί υπάρχει;
Σίγουρα υπάρχει κάποια ανάποδα.
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Σίγουρα. Έτσι, μερικές φορές θα μπορούσε να γνωρίζει τον προκαθορισμένο αριθμό
χαρακτήρων όπως 10 ψηφία για έναν αριθμό τηλεφώνου για παράδειγμα.
Αλλά ποιος νοιάζεται, όπως το γιατί δεν το λέμε απλώς 11 ούτως ή άλλως
ή γιατί να μην πω 60 ούτως ή άλλως με το varchar;
Τι πλεονέκτημα παίρνουμε με τη γνώση και το σχεδιασμό
για ένα σταθερό αριθμό των χαρακτήρων;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Είσαι στο σωστό δρόμο.
Έτσι είναι βελτιστοποίησης, αλλά είναι πραγματικά από - ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
OK. Καλή. Ας εστίαση για το τελευταίο μέρος.
Έτσι, ευρετηρίαση.
Έτσι αποδεικνύεται αν γνωρίζουν εκ των προτέρων ότι όλα
τα πεδία σας θα να είναι 60 χαρακτήρες,
μπορείτε πραγματικά να σκεφτείτε αυτό στήλη στη βάση δεδομένων του Excel
ότι έχει πολύ ευθεία, αριστερά δικαιολογείται
και δεξιά άκρα αιτιολογημένες
γιατί κάθε στήλη είναι 60 χαρακτήρες ευρύ.
Αυτό σημαίνει ότι η string είναι 60 χαρακτήρες μακριά
από αυτή τη σειρά, 60 χαρακτήρες μακριά από αυτό
και αυτό και αυτό.
Έτσι, όπως ακριβώς πίσω όταν μάθει C, είχατε τυχαίας προσπέλασης
στον κόσμο των πινάκων, ίδια ιδέα εδώ.
Αν η στήλη σας αντιπροσωπεύεται χρησιμοποιώντας μόνο σταθερό χαρακτήρες μήκος,
μπορείτε αποτελεσματικά δείκτη τυχαία σε 60 ή 120 ή 180
και μπορείτε να πάρετε σε μεμονωμένα χορδές πολύ πιο γρήγορα.
Στη συνέχεια, αν αντί στήλη σας είχε μια ευθεία αριστερό άκρο, ώστε να μιλήσει
αλλά μια πολύ τραχιά δικαίωμα άκρη στη στήλη
επειδή ίσως έχει 10 χαρακτήρες,
15 χαρακτήρες, 5 χαρακτήρες.
Έτσι, αυτό είναι πάρα πολύ μια ανταλλαγή.
Και μερικές φορές μόνο μέσω της δοκιμής και του λάθους
και τον πειραματισμό μπορείτε να υπολογίσετε
τι πραγματικά η σωστή κλήση είναι όμως αυτά είναι τα είδη
ερωτήσεων που πρέπει να πηγαίνει
μέσα από το μυαλό σας ή / και πίνακες, όταν έρχεται η ώρα
για το σχεδιασμό της βάσης δεδομένων σας.
Έτσι, δεν είναι απαραίτητα σωστό απαντήσω, αλλά θα πρέπει να
τουλάχιστον έχουν κάποια φράση ή δύο στο μυαλό
να κάνετε backup ανεξαρτήτως απόφαση που κάνετε.
Εντάξει.
Οπότε ας κρατήσει κύλιση στις προτροπές εδώ
που είναι UI του phpMyAdmin.
Έτσι, η προεπιλεγμένη τιμή για ένα όνομα, θα πρέπει να καθορίσετε
ότι θα πρέπει να έχουν μια προκαθορισμένη τιμή null;
Τι νομίζετε;
Μπορεί μια σειρά μαθημάτων έχουν μηδενική όνομα;
Μόλις αισθάνεται περίεργα, έτσι δεν είναι;
Δεν μπορώ να σκεφτώ κανένα απροσδιόριστος μαθήματα στο Χάρβαρντ.
Και ίσως υπάρχει κάποια σκοτεινή υπόθεση γωνία
όταν ένα μάθημα αυτό δίνεται ένας αριθμός
και ο καθηγητής δεν έχει επιλέξει ένα όνομα για αυτό, αλλά -
Θέλω να πω, σε καλό με αυτό,
όπως ας μην ενοχλεί υποστηρίζοντας ότι.
Θα ήθελα να πω προς το συμφέρον του ένα ωραίο καθαρή βάση δεδομένων,
ας διευκρινίσει ότι δεν μπορείτε έχουν μια προκαθορισμένη τιμή null.
Εναλλακτικά, θα μπορούσαμε να κάνουμε κάτι σαν άτιτλο μάθημα
η οποία δεν είναι σε αντίθεση με την Mac OS και Windows κάνουν
όταν δημιουργείτε μια φάκελο, για παράδειγμα,
αλλά εκεί που κάνει λίγο περισσότερο νόημα
έτσι ώστε το ανθρώπινο δείτε κάτι.
Μιλάμε για ένα back-end βάση δεδομένων προφανώς
για τον κατάλογο μαθημάτων.
Έτσι ώστε να κάνω πραγματικότητα δεν είναι καν όπως και η ιδέα της δίνει
στο άτιτλο ονόματα μαθήματος
δεδομένου ότι δεν είναι πραγματικά πρόκειται να βοηθήσει κανέναν.
Ας αφήσουμε αυτό ως καθόλου, πράγμα που σημαίνει ότι όταν εισάγετε
σε αυτή τη βάση δεδομένων, θα πρέπει να δοθεί σε κάθε μάθημα ένα όνομα
η οποία αισθάνεται λίγο καθαριστικό για μένα.
Εντάξει.
Έτσι κύλιση περαιτέρω, αντιπαραβολή.
Αυτό έχει απλά να κάνει με σύνολα χαρακτήρων και εταζέρα
αν έχετε δει ποτέ αναφορές της σουηδικής
στο phpMyAdmin που είναι «Προκαλούν το λαό
ο οποίος έγραψε phpMyAdmin ήταν σουηδική.
Είναι ότι η PHP ή είναι MySQL;
Ένα από τα δύο, Ι Ξέχασα αυτοσχέδιος.
Αλλά είναι για ιστορικούς λόγους
αλλά μπορείτε να εκφράσετε κάθε χαρακτήρα στην αγγλική
ότι θα μπορούσατε να με σουηδική γι 'αυτό είναι σε μεγάλο βαθμό ένα μη-ζήτημα.
Το CS50 Appliance αν είναι χρησιμοποιείται - ρυθμιστεί ώστε να χρησιμοποιεί UTF-8,
έτσι ώστε σε γενικές γραμμές θα πρέπει να δεν εμφανιστεί για εσάς.
Χαρακτηριστικά.
Έτσι κανένα από αυτά είναι πραγματικά σχετικό εδώ.
Βλέπω Binary, Ανυπόγραφο, Ανυπόγραφο zerofill,
και για την ενημέρωση τρέχουσα χρονική σήμανση.
Το πεδίο αυτό ισχύει μόνο για κάποιο αριθμητικό πεδίο
ή ορισμένα πεδία του χρόνου.
Έτσι θα υπερπηδήσει ότι εντελώς.
Null. Μπορεί αυτό το πεδίο είναι άκυρη;
Έτσι, δεν έχει. Έχουμε ήδη αυτό το είδος των συνομιλιών.
Έτσι, δεν θέλουμε μια προκαθορισμένη τιμή.
Δεν θέλουμε να είναι null.
Τι γίνεται με δείκτη;
Υπάρχουν τέσσερις επιλογές εδώ.
Τι σημαίνει αυτό αν εμείς καθορίζουμε
ότι αυτή η σειρά θα να είναι ένα πρωτεύον κλειδί;
Ανακαλώντας στη μνήμη CS50 ή CS165 αν το έχετε λάβει.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ακριβώς. Έτσι, ένα πρωτεύον κλειδί εξ ορισμού είναι το πεδίο
ότι προσδιορίζει μοναδικά κάθε γραμμή του πίνακα αυτού.
Και μπορείτε να βασιστείτε πάνω του για να κάνει ότι η μοναδική ταυτοποίηση.
Λοιπόν, τι σημαίνει αυτό Στη συνέχεια απλά να είναι μοναδικό;
Λοιπόν, το είδος αυτών των δύο έχει το είδος
κάτω των επιπτώσεων κάτω από το καπό.
Αλλά γενικά, το πρωτεύον κλειδί είδος της σύμβασης που έχετε κάνει
με το θέμα της βάσης δεδομένων.
Όταν κάνω ερωτήσεις ψάχνει για ένα μάθημα,
Πάω να χρησιμοποιήσετε αυτό συγκεκριμένο τομέα.
Και θα επανέλθουμε γιατί μπορεί να έχουμε δύο
αυτές τις επιλογές εδώ, πρωτεύον ή μοναδικό.
Μοναδικό ακριβώς λέει, αυτό πεδίο πρόκειται να είναι το μοναδικό
αλλά δεν είμαι πραγματικά κάνει οποιαδήποτε το είδος της προφορικής δέσμευσης εδώ
να χρησιμοποιείτε αυτό το πεδίο να κάνουν αναζητήσεις μου
για λόγους που θα δείτε ακριβώς σε μια στιγμή.
Εάν καθορίζετε δείκτη, τι σημαίνει να καθορίσετε
ότι ένα πεδίο έχει ένα ευρετήριο για αυτό;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ακριβώς. Ήταν βελτιστοποιημένη για το ερώτημα.
Έτσι - server της βάσης δεδομένων, Oracle, MySQL, οτιδήποτε,
θα λειτουργήσει σε γενικές γραμμές τα μαγικά του πίσω από τα παρασκήνια μόλις κάνετε κλικ
ότι η επιλογή και στη συνέχεια κάντε κλικ στο κουμπί Αποθηκεύστε και θα βασιστεί
up συνήθως μια δομή δέντρου, B-trees αν έχετε δει
ή ακούσει off το οποίο είναι ένα πολύ σύντομο μέλλον δέντρο
που σας δίνει πολύ ωραία λογαριθμική ιδιότητες
όταν ψάχνουν για τα στοιχεία.
Εάν δεν καθορίσετε ένα ευρετήριο σε ένα πεδίο, τι συμβαίνει
να είναι το τρέξιμο χρόνο της έρευνας
για μια αυθαίρετη [Φωνητική] όνομα μαθήματος;
Τι είναι αυτό;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ω, [δεν ακούγεται], γραμμική, σωστά;
Εάν δεν υπάρχει καμία βελτιστοποιήσεις παρέχεται στη βάση δεδομένων
και δεν έχετε σκεφτεί η βάση δεδομένων τι είδους
των δεδομένων να περιμένουμε.
Το καλύτερο που μπορείτε να κάνετε είναι να ελέγξετε πάντα, όταν ψάχνετε
για κάποια αξία, ιδίως αν υπάρχει θα μπορούσε να
στην πραγματικότητα να είναι εις διπλούν.
Πλήρες κείμενο εν τω μεταξύ, θα κύμα χέρια μας τώρα.
Αλλά γενικά, αυτή είναι μια τον τύπο του ευρετηρίου που επιτρέπει
να βελτιστοποιηθεί για τη λέξη κλειδί ψάχνει για ένα πεδίο.
Έτσι, αυτό μπορεί να είναι ένας καλός υποψήφιος
για σαν μια περιγραφή του μαθήματος όπου μπορείτε να έχετε ένα ζευγάρι
των παραγράφων και ίσως θέλουν να κάνουν αγώνες συμβολοσειράς.
Πλήρες κείμενο θα αφήσει γενικά το κάνετε αυτό αρκετά αποτελεσματικά.
AI, αυτό είναι ένα φρικτό είδος του εξήγηση, αλλά αν αιωρούνται
πάνω από αυτό θα δείτε Auto Προσαύξηση.
Δεν ισχύει τόσο εδώ αλλά αυτόματη αύξηση είναι χρήσιμο
για τον τομέα, όπως ενός int επειδή η βάση δεδομένων θα φροντίσει
της διαδικασίας συν plusing κάθε φορά που κάνετε ένα ένθετο.
Έτσι ώστε, ακόμη και αν δύο άνθρωποι κυριολεκτικά κάντε κλικ στο Υποβολή
ταυτόχρονα και να προσπαθήσουμε να δημιουργήσει μια σειρά με κάποιο τρόπο
στη βάση δεδομένων, μία από τις τους θα πάρει τον αριθμό I,
ο άλλος θα πάρει ο αριθμός Ι συν 1.
Δεν χρειάζεται να ανησυχείτε
περίπου δύο αριθμοί είναι αποδίδεται με τον ίδιο τρόπο, αν ήταν
να το κάνετε αυτό στον εαυτό σας σε κώδικα.
Εντάξει.
Γι 'αυτό το είδος του αρέσει εκεί έχουμε ένα όνομα για να είναι.
Οπότε ας κλικ στο κουμπί Αποθήκευση.
Είναι αυτό ένα καλό σχέδιο για έναν πίνακα βάσης δεδομένων;
Και ως μέρος αν σκουριασμένο για SQL ή μπορείτε να ταξινομήσετε
μόλις γυρίσει πάντα τα στραβά μάτι για το τι συνέβαινε,
Θα μπορούσα να έχω πληκτρολογήσει ακριβώς αυτό -
οι τρεις αυτές γραμμές σε ότι μαύρο και άσπρο προτροπή
στη γραμμή εντολών πελάτη ή θα μπορούσε να γίνει
ότι στον κώδικα προγραμματισμού.
Έτσι, όλα phpMyAdmin κάνει για μου, είναι ακριβώς μου σώζει την προσπάθεια
θυμόμαστε μερικές φορές η σύνταξη και δακτυλογράφηση για
όπως κουραστική εντολές.
Εντάξει.
Έτσι, αυτό δεν αισθάνονται σαν το καλύτερο σχεδιασμό, ένα ένα πεδίο πίνακα.
Τώρα θα μπορούσαμε να έχουμε πράγματα όπως καθηγητές
και τις θέσεις και τις περιγραφές.
Αλλά ακόμα και τότε, χρησιμοποιώντας μόνο το όνομα
να εντοπίσει τα μαθήματα δεν αισθάνεται ιδανικό.
Τι έχουν γενικά έχουμε κάνει στο παρελθόν
αν έχετε χρησιμοποιήσει τις βάσεις δεδομένων με μοναδικά σειρές;
Η μη χρησιμοποίηση varchars συνήθως.
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ναι. Έτσι, συνήθως ένα αναγνωριστικό μάθημα.
Έτσι, η πιο κοινή προσεγγίσει εδώ ειδικά
κατά τη χρήση ενός πλαισίου είναι στην πραγματικότητα απλά
να χρησιμοποιούν μια σειρά σαν ένα ακέραιο.
Επιτρέψτε μου λοιπόν να προχωρήσει και να το κάνουμε αυτό.
Και μπορούμε να το κάνουμε αυτό σε λίγα τρόπους, αλλά ειδοποίηση αν μεγέθυνση
στο στο κάτω μέρος εδώ.
Πάω να πω προσθέσετε ένα στήλες στο τέλος του πίνακα,
γενικά μόνο για την οπτική ευκολία βάζετε ταυτότητες
στην αρχή του πίνακα ακόμα κι αν αυτό δεν έχει πραγματική
λειτουργικές επιπτώσεις.
Έτσι, Πάω να πω προσθέσετε ένα στήλες
στην αρχή του πίνακα.
Πάω να κάνετε κλικ Go, ότι μου δίνει πίσω αυτό το UI εδώ.
Ας το ονομάσουμε αυτό το ID.
Αν νομίζουμε ότι πρόκειται να έχουμε όχι περισσότερο γίνεται 4 εκατομμύρια μαθήματα
πεδίο ενός int είναι μια χαρά.
Θα μπορούσαμε να συρρικνωθεί ακόμη και κάτω
αλλά ο χώρος είναι φθηνή έτσι που πραγματικά νοιάζεται.
Όμως, προσπαθούμε να γράφουν στο Facebook τώρα,
δεν μπορεί να είναι ένα κακό πράγμα για την πρόβλεψη μεγάλων ints
η οποία θα μας δώσει ints 64-bit
αλλά τότε είστε κυριολεκτικά διπλασιάζοντας τον αριθμό των bits
ότι είστε με τη χρήση, τόσο ασήμαντο δίλημμα
αλλά κάτι που εξετάζει.
Τώρα, αυτό είναι μια σύγχυση κληρονομιά πράγμα.
Μπορείτε να ανακαλέσετε από τη χρήση της MySQL
ότι ανά πάσα στιγμή θα κηρύξουν int τομέα θα δείτε συχνά μια σειρά
δίπλα σε αυτό, όπως τον αριθμό 10.
Δεν έχει τίποτε να κάνει με το μέγεθος του αριθμού
ή ο αριθμός των bits.
Αυτό έχει να κάνει με τον αριθμό των χαρακτήρων που χρησιμοποιούνται
Για την οπτική απεικόνιση ότι το πεδίο int
όταν χρησιμοποιείται ένα παράθυρο τερματικού.
Έτσι μπορούμε να δούμε ότι σε μια στιγμή.
Έτσι, δεν πρέπει να παραπλανηθούν πληκτρολογώντας αριθμούς
εκεί ακόμα κι αν είναι αποτελεσματικά ζητώντας μας
για ένα εδώ.
Πάνω από εδώ, πάω να προχωρήσει και να πω ανυπόγραφο.
Δεν υπάρχει κανένας λόγος να τα απόβλητα το σύνολο των αρνητικών αριθμών μας
δεδομένου ότι η βάση δεδομένων γενικά θα
να αναλάβει θετική αξίες ή null.
Το αναγνωριστικό σίγουρα δεν θα πρέπει να είναι μηδενική.
Και τι πιστεύετε για ο δείκτης για αυτόν τον τομέα ID;
Ας το κάνουμε πρωτογενή.
Έτσι, ό, τι και αν, όμως, όπως μπορώ σκεφτούμε μόνο ένα μάθημα CS164
στο Χάρβαρντ και μόνο μία Φυσικά CS50 στο Χάρβαρντ
και αυτό είναι αρκετά πολύ πραγματική συνολική
ότι υπάρχει ίσως εξαιρέσεις [Δεν ακούγεται] και τα δύο εξάμηνα
ή κάτι παράξενο σαν αυτό.
Αλλά πιο ουσιαστικά, γιατί είναι καλύτερο
να χρησιμοποιήσετε ένα αριθμητικό αναπόσπαστο ταυτότητας σε προσδιορίζουν με μοναδικό τρόπο τα μαθήματα και όχι
όχι μόνο μια μοναδική σειρά;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
OK, ενδιαφέρουσα.
Έτσι, αν είχαμε το είδος της cross-εισηγμένες μαθήματα.
Έτσι, αυτό είναι ένα καλό παράδειγμα.
Δεν είμαι σίγουρος ότι θα επίλυση αυτού του αν
δίνοντάς τους την ίδια Αριθμός αναγνώρισης, αν αυτό είναι
όπου θα πήγαιναν με αυτό.
Όχι; OK. Αλλά σίγουρα μια γωνιά προκειμένω να εξεταστεί.
Αν υπάρχει είδος - χρειαζόμαστε κάποιου είδους
aliasing των δυνητικά.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Σίγουρα.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Αυτό είναι ένα καλό παράδειγμα.
Το όνομα μπορεί να αλλάξει με την πάροδο ώρα, εντελώς λογικό.
Τι άλλο;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Λυπούμαστε, ξαναπώ.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ναι, ακριβώς.
Έτσι, πραγματικά, αυτό είναι η πραγματική αποφασιστικός παράγοντας είναι
ότι η χρησιμοποίηση ενός int 32-bit είναι κατά πάσα πιθανότητα θα είναι ταχύτερη
από κάποια μεταβλητή το μήκος του πεδίου char.
Στην πρώτη περίπτωση, το δοχείο κυριολεκτικά χωράει σε ένα μητρώο,
για να μην αναφέρουμε πολύ μικρότερο αποτύπωμα μνήμης.
Στην τελευταία περίπτωση, θα πάμε να πρέπει να κάνουμε θέρετρο [φωνητικά]
σε συγκρίσεις συμβολοσειρών που καθαυτά με το γραμμικό
στο μέγεθος της κορδόνι δυνητικά.
Έτσι, είναι απλά ένα ωραίο βελτιστοποίηση,
και ιδίως ότι πρόκειται
να μας κάνει ό, τι είναι που ονομάζεται Ενώνει πιο αποτελεσματικά
ακριβώς σε μια στιγμή.
Οπότε ας το κάνουμε αυτό.
Θα διευκρινιστεί ότι αυτή είναι η κύρια
γιατί δεν μου αρέσουν ιδιαίτερα θέλετε να φροντίζετε ή νομίζετε
για το τι είναι ο αριθμός είναι ένα μάθημα.
Ας τους αφήσουμε να πάρει για ό, τι οι τιμές που θέλουν.
Πάω να πω την αυτόματη αύξηση ώστε να μπορώ να αναθέτουν αυτή τη λεπτομέρεια.
Όπως και στην άκρη ίσως γνωρίζουμε ότι το Χάρβαρντ
τουλάχιστον δεν έχουν μοναδικές αριθμοί για τα μαθήματα.
Δεν έχω καμία ανάμνηση τι αυτό είναι μαθήματα.
Ξέρω ότι CS50 του αριθμός καταλόγου είναι 4949,
εντελώς αυθαίρετη.
Αλλά υπάρχει παράξενο περιπτώσεις γωνιά στο ότι ακόμη και
στο registrarial χωματερή Φυσικά τα δεδομένα καταλόγου,
Μερικές φορές τα μαθήματα, παλιά μαθήματα έχουν έναν αριθμό σαν 4.
Αλλά τεχνικά ότι πεδίο είναι ένα πεδίο char
ότι απλά ξεκινάει με 0004.
Έτσι κι εδώ, θα πρέπει να είναι προσεκτικοί σχετικά με τη διάκριση
μεταξύ των πραγμάτων, όπως ένα Φυσικά αριθμός καταλόγου
που θα μπορούσαν να έχουν κάποια ανθρώπινα έννοια σταθερού μήκους, 0004,
και δεν πρέπει να αποθηκεύσετε ότι, για παράδειγμα σε ένα ints.
Αυτό το είδος του πεδίου πρέπει να να αποθηκεύονται αλλού.
Έτσι, στο Χάρβαρντ, αν ήμασταν στην πραγματικότητα κάνοντας μια πορεία
εργαλείο για ψώνια, είναι μάλλον δεν επαρκεί
στα μαθήματα αριθμό με μόλις 1, 2, 3, 4.
Εμείς πρόκειται πιθανώς να έχουν
να έχουν ένα άλλο πεδίο που ονομάζεται αριθμός καταλόγου,
ότι είναι, επίσης, υποτίθεται ότι να είναι μοναδικό βασισμένη
σχετικά με τα ανθρώπινα συμβάσεις εδώ αλλά δεν είναι η καλύτερη επιλογή
για ένα μοναδικό αναγνωριστικό, επειδή θα μπορούσε να είναι μεταβλητού μήκους.
Μπορεί να μην είναι τέσσερις χαρακτήρες, θα μπορούσε να είναι πέντε.
Στην πραγματικότητα, νομίζω ότι μερικές χρόνια κινούνται
με την αιτία πέντε χαρακτήρες 'εκεί ήταν πάνω από 999 μαθήματα
στο σύνολο ή κάτι τέτοιο ότι, ή 9.999 μαθήματα.
Έτσι, αυτό θα μπορούσε να είναι ένα παράδειγμα όπου το πεδίο δεν είναι ο πρωταρχικός
αλλά θα πρέπει να είναι μοναδικό.
Και διεύθυνση ηλεκτρονικού ταχυδρομείου είναι ένα άλλο.
Μπορεί να θέλετε να είναι το μοναδικό
αλλά όχι απαραίτητα πρωτεύον κλειδί σας.
Εντάξει.
Επιτρέψτε μου λοιπόν να κτυπήσει έξω μια άλλη τραπέζι πολύ πιο γρήγορα από ό, τι αυτό.
Έτσι, Πάω να καλέσετε αυτό ένα εκπαιδευτές και θα πάω
να δώσει σε αυτό μια συνολική αριθμό των στηλών των δύο.
Πάω να μάθω μου μάθημα από την τελευταία φορά.
Πάω να καλέσετε το πρώτο αναγνωριστικό στήλη.
Πάω να καλέσετε το δεύτερη στήλη Όνομα.
Είμαι, επίσης, πρόκειται να κάνει Varchar.
Πάω να αναλάβει καμία καθηγητής έχει ένα όνομα πλέον
από 60 χαρακτήρες, αν και τώρα αυτό μπορεί να το πιέζει
με μερικά μεγάλα ονόματα, ειδικά άτομα με μεσαία ονόματα.
Αυτό είναι εντάξει για σήμερα.
Οπότε ας μετακινηθείτε εδώ.
Ας κάνουμε αυτό το ανυπόγραφο και πάλι.
Ας κάνουν αυτό το πρωταρχικό.
Και εμείς θα σας επιτρέψει διπλών ονομάτων
σε περίπτωση που υπάρχουν δύο John Σμιθ ή κάτι τέτοιο.
Και τώρα έχουμε δύο πίνακες.
Μέχρι τώρα, αυτό εγείρει το ερώτημα πώς μπορώ να συνδέσει
στον εκπαιδευτή του μαθήματος;
Νιώθω σαν το είδος της πήρε μπροστά από τον εαυτό μου
γιατί αν ένας εκπαιδευτής διδάσκει ένα μάθημα,
η πρώτη μου σκέψη θα πραγματικά να πάει πίσω
στα μαθήματα συνειδητοποιούν, αυτό Δεν ήταν μια καλή ιδέα.
Επιτρέψτε μου να προσθέσω στην πραγματικότητα μία στήλη στο τέλος του πίνακα,
κάντε κλικ στην επιλογή Go, και εγώ θα καλέσετε αυτό το διδάσκοντα.
Και θα κάνω αυτό varchar και θα κάνω αυτό 60.
Και ίσως θα το αφήσει null τώρα
σε περίπτωση που το μάθημα δεν έχει έχουν ανυπόγραφο σε εκπαιδευτή
το οποίο συμβαίνει μερικές φορές πριν όρος ξεκινά και κάντε κλικ στο κουμπί Αποθήκευση.
Ποια από αυτά τα σχέδια προτιμάτε;
Πρώτη όπου έχουμε ένα ξεχωριστό πίνακα εκπαιδευτή
ή το δεύτερο, όπου απλά προσθέσετε ένα πεδίο στο μάθημα;
Έτσι είναι μια στενή σύνδεση εκπαιδευτής πορεία.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
OK. Καλή. Αλλά επιτρέψτε μου να σπρώξετε προς τα πίσω.
Είναι τόσο απλό όπως μπορώ Απλά πληκτρολογήστε το όνομα του ατόμου
σε αυτό τον πίνακα, όπως σίγουρα ότι έχει κάποια αξία ή -;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Εντάξει.
Λοιπόν, επιτρέψτε μου να είναι δύσκολο για μένα εδώ.
Έτσι, επιτρέψτε μου να πω ότι αυτό το μάθημα είναι CS51
και ξέρω ότι διδάσκεται φέτος από δύο άτομα.
Έτσι, Henry Leitner και Jesse Tov, αλλά -
γι 'αυτό θα τεθεί μόνο ένα κόμμα μεταξύ των δύο, δεξιά.
Είμαι πολύ καλός στο CSV από χτες.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ακριβώς, ακριβώς.
Μόλις καταφεύγουν για κάτι τέτοιο,
η οποία μπορεί να αισθάνονται λογικές και να αισθανθείτε
όπως αυτό είναι το είδος της έξυπνης.
Είμαι το είδος του δανεισμού ενός ιδέα που είναι να λειτουργεί καλά,
δανειστώ μια νέα ιδέα και είδος συνδυάζουν τους.
Είστε το είδος του να νικήσει εντελώς το σημείο χρησιμοποιώντας τη βάση δεδομένων
στην αιτία του πρώτη θέση » εάν μια από τις τιμές
από τη χρήση είναι πιο γρήγορα αναζητήσεις λόγω των διαφόρων δεικτών
και οι πίνακες που μπορούν να να δημιουργήσει για εσάς
από την ίδια την μηχανή βάσης δεδομένων.
Τώρα, αν θέλετε να αναζητήσετε για όλα τα μαθήματα
ότι Jesse διδάσκει, τώρα έχετε να μην substring που ταιριάζουν σε όλα τα
από τα πεδία εκπαιδευτή,
το οποίο ουσιαστικά σημαίνει γραμμική αναζήτηση και πάλι γιατί έχετε
να βρείτε αυτό το αυθαίρετο σύνολο από τρεις χαρακτήρες οπουδήποτε
στον τομέα εκπαιδευτή προηγείται
μέσα ίσως ακολούθησε από ένα κόμμα.
Έτσι, αυτό σίγουρα δεν αποτελεί καλό οιωνό.
Έτσι, επιτρέψτε μου να πάω πίσω στο τραπέζι.
Επιτρέψτε μου να προχωρήσει σε μαθήματα, να αναιρέσετε αυτό.
Πάω να πάει μόνο μπροστά και αφήστε αυτό το πεδίο.
Και αν θέλετε να να το κάνετε αυτό με το χέρι,
η σύνταξη είναι ALTER TABLE μαθήματα DROP εκπαιδευτή.
Οπότε ας πάμε μπροστά και να πω ναι σε αυτό.
Και πάμε πίσω σε αυτή την ιδέα νωρίτερα
όπου έχω μια ξεχωριστή τραπέζι για τους εκπαιδευτές.
Τώρα, όμως, αυτό το αισθάνεται λίγο όπως μπορώ να βάλω ένα μάθημα
στον πίνακα του μαθήματος και εκπαιδευτής
στον πίνακα του εκπαιδευτή, αλλά εγώ κάπως χρειάζεται να συνδέσει το δύο.
Και πώς θα σας Προτείνω να το κάνουμε αυτό;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Καλή. Οπότε ας το κάνουμε αυτό.
Και θα μπορούσαμε να ονομάσουμε αυτό πίνακα στη θεωρία τίποτα.
Πάω να σκόπιμα ονομάσουμε ό, τι πολλά
των πλαισίων θα αποκαλούν, μεταξύ αυτών,
Laravel όπως θα δείτε σε λίγο.
Πάω να το ονομάσουμε πορεία υπογραμμίζουν εκπαιδευτή.
Χρησιμοποιώντας ενικό σε αυτή περίπτωση για κάθε μία από τις λέξεις
και όλα τα πεζά πάλι, και επίσης με την -
Στη συνέχεια αλφαβητικά ταξινομούνται από αριστερά προς τα δεξιά.
Αυτό είναι εντελώς αυθαίρετη, αλλά τείνει να είναι μια σύμβαση
σε πολλά από αυτά τα πλαίσια σε PHP και σε άλλες γλώσσες.
Πόσες στήλες χρειάζομαι αυτό που αποκαλούμε ένα σύνδεσμο πίνακα,
για να ενώσει δύο άλλα τραπέζια μαζί;
Τρεις στήλες;
Ποιο από τα δύο - ποια θα ήταν αυτά;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
OK. Καλή. Αυτό λειτουργεί.
Και θα μπορούσαμε τεχνικά κόψει μια γωνιά εδώ, αλλά πολλά
των πλαισίων, ιδίως θα εξακολουθούν να δίνουν ακόμη και σε αυτές τις σειρές
μοναδικά αναγνωριστικά, ακόμη και αν σημασιολογικά η σειρά
ότι ενδιαφερόμαστε πραγματικά για την ή οι στήλες που πραγματικά νοιάζονται
περίπου είναι οι δύο τελευταίες αυτό που είπατε, ID το μάθημα
και το αναγνωριστικό του εκπαιδευτή.
Έτσι, ας το κάνουμε.
Θα πάρω αυτή τη σειρά μόνο μία ταυτότητα, ακριβώς όπως κάναμε πριν.
Αλλά ένα αυτό Πάω να καλέσει πορεία ID.
Αυτός Πάω να καλέστε εκπαιδευτή ID.
Και Πάω να ορίζει ότι όλα
από αυτά είναι ανυπόγραφα «Θέλω να προκαλέσει
να μεγιστοποιηθεί 4 μου δισ. εύρος int.
Κανένας από αυτούς δεν θα πρέπει να είναι μηδενική.
Πάω να διευκρινίσει ότι ID θα πρέπει να εξακολουθεί να είναι πρωταρχικός.
Και πάλι, αυτό είναι απλά μια σύμβαση,
πολλά πλαισίων ακόμη και αν δεν λύσουμε
ριζικά χρειάζονται μοναδικό αναγνωριστικό για τη γραμμή,
αποδεικνύεται ότι είναι βολικό για ο κώδικας, ο SQL που πρόκειται
να είναι αυτόματα παράγονται για εμάς.
Γι 'αυτό το αφήνω ως πρωταρχικό.
Αλλά τώρα, εγώ το είδος έχουν μια σχεδιαστική απόφαση,
Φυσικά ID και εκπαιδευτής ID.
Τι ευρετήρια εάν υπάρχουν θα πρέπει να παίρνουν;
Αν θα αφήσω κανένα ευρετήρια, ποια είναι η επίπτωση;
Τι είναι η επίπτωση;
Επιδόσεις όπως και πριν, έτσι δεν είναι;
Εάν δεν υπάρχει δείκτης, ο καλύτερο που μπορείτε να κάνετε είναι το είδος
του [δεν ακούγεται] μέσω της όλο θέμα ψάχνει για αριθμούς.
Έτσι ώστε δεν νιώθω έξυπνος.
Σε περίπτωση που είναι το κυριότερο;
Γιατί λοιπόν να μην;
Γιατί δεν είναι το κυριότερο;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Τέλεια. Γι 'αυτό και κυλήστε έξω [φωνητική] πρωτοβάθμια.
Έχουμε ήδη επέλεξαν αυτό.
Έτσι, θα πρέπει να είναι μοναδικό;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Καλή. Έτσι, αν υποθέσουμε ένας εκπαιδευτικός ανά μάθημα,
εντελώς καλά.
Και αυτό είναι σίγουρα η συνηθισμένη περίπτωση
αλλά έχουμε ήδη αναβληθεί μία ίσως γνωστό παράδειγμα.
CS51 πήρε δύο εκπαιδευτές έτσι είμαστε είδος
από τώρα βιδωθεί σε αυτήν την περίπτωση.
Αν κάναμε επιτρέπουν μόνο ένα εκπαιδευτή,
θα μπορούσαμε να κάνουμε πραγματικά έναν τρόπο με τον πίνακα ενταχθούν συνολικά,
να επιστρέψετε στην προηγούμενη προσέγγιση
και να μην τεθεί το όνομα του ατόμου ίσως όμως ID του εκπαιδευτή.
Εάν γνωρίζετε κάθε μάθημα, όπως ακριβώς ένα εκπαιδευτή μπορείτε να έχετε μόνο
μία στήλη.
Όμως, η μεταβλητότητα είναι τι μας πήρε στο πρόβλημα.
Εντάξει.
Έτσι, θα πρέπει να είναι μοναδικό;
Όχι Πλήρες κείμενο δεν αισθάνονται ισχύει.
Όπως είπαμε και πριν αυτό είναι
για ομοειδή υποσυμβολοσειρά ταιριάζουν για περιγραφές.
Έτσι τι γίνεται με δείκτη;
Λοιπόν, ο δείκτης είναι κατά πάσα πιθανότητα καλύτερος υποψήφιος μας
που λέει MySQL βελτιστοποίηση για τις αναζητήσεις σε αυτό
ή επιτρέψτε μου να επεξεργαστεί, βελτιστοποίηση για τις αναζητήσεις και ενώνει
όπως θα δούμε σε λίγο
έτσι ώστε να είστε λίγο πιο αποτελεσματική
από οτιδήποτε καθαρά γραμμική.
Θέλω να auto αυξάνει αυτό το πεδίο;
Οπότε όχι, διότι η αλήθεια υπάρχει γονικό στοιχείο
στον πίνακα των μαθημάτων.
Αυτός είναι όπου αυτό είναι πρόκειται να πάρει συν,
συν, όταν στην πραγματικότητα είναι εισαχθεί.
Εδώ, αυτό είναι όλο πρόκειται να εισάγεται χειροκίνητα
από εμάς προφανώς στον κώδικα.
Οπότε ας απλά δηλώστε ότι τόσο η πορεία ID
και εκπαιδευτής ID έχουν ευρετήρια.
Τώρα θα πάμε μπροστά και να σώσει.
Και τώρα, μόνο και μόνο για να δείξει Σας την αλληλογραφία
μεταξύ του τι είναι ένα ωραίο GUI φιλική προς το περιβάλλον
και το περιβάλλον γραμμής εντολών.
Επιτρέψτε μου να πάει μπροστά και να κάνουμε το ακόλουθα σε αυτή την ερώτηση MySQL.
Πάω να πω χρήση courses50
που είναι το αυθαίρετο όνομα Έδωσα σε αυτή τη βάση δεδομένων.
Και τώρα, εγώ δεν χρειάζεται καν θυμηθείτε τι κάναμε.
Επιτρέψτε μου λοιπόν να πληκτρολογείτε δείτε τους πίνακες
και γενικά ερωτηματικά θα είναι ο φίλος σας εδώ
για να τελειώσει το ερώτημα.
Και εκεί είναι.
Έτσι, εδώ είναι οι σειρές ή μάλλον οι πίνακες που έχουμε εδώ.
Τώρα, έχω ξεχάσει τι ένα μάθημα μοιάζει,
οπότε επιτρέψτε μου να περιγράφουν τα μαθήματα και τώρα βλέπω το είδος της ένα ASCII
ή μια εκδοχή του τι phpMyAdmin είχε κάνει
και βλέπω ότι ID είναι ένα int.
Υπάρχει το 10.
Τι σημαίνει αυτό;
Αυτό σημαίνει απλά ότι όταν είναι Εμφανίζεται πρόκειται να λάβει
μέχρι 10 χαρακτήρες σε το παράθυρο τερματικού.
Είναι nullable;
Όχι Αυτό είναι το πρωτεύον κλειδί.
Μπορεί να έχει μια προκαθορισμένη τιμή;
Όχι Και επιπλέον η οποία είναι ειδική σημαίες όπως η αυτόματη αύξηση.
Ας κάνουμε απλά ένα ζευγάρι γρήγορη προσθήκες εδώ.
Πάω να ανεβεί να - ας πούμε.
Ας αλλάξουμε την πολιτεία σε μια διαφάνεια
όπου το είδος της προ-προετοιμασία αυτό.
Αυτό είναι μια περίληψη τότε και οι τρεις από αυτούς τους πίνακες.
Έχω ήδη μόνο με το χέρι πληκτρολογήσει την πρώτη εντολή.
Και εδώ, πήγα μπροστά και να πληκτρολογήστε τους άλλους για εσάς.
Αυτή είναι μόνο η υφολογική πράγμα.
Σε γενικές γραμμές, πολλοί άνθρωποι πληκτρολογήστε δηλώσεων SQL σε όλα τα καλύμματα
και στη συνέχεια τα ονόματα του πίνακα και ονόματα τομέα σε πεζά,
έστω και μόνο επειδή το είδος των περιπτέρων
τι είναι η ορολογία σας και ποια είναι η σύνταξη της βάσης δεδομένων.
Έτσι, εδώ έχουμε τρεις πίνακες, τα μαθήματα, εκπαιδευτές,
και τα μαθήματα εκπαιδευτές.
Στη διαφάνεια που θα γίνουν εκ των προτέρων, Δεν είχα το πεδίο ID
αλλά αυτό δεν είναι πραγματικότητα ένα κακό πράγμα καθόλου.
Θα δούμε μόνο ένα τρίτη στήλη εκεί.
Αν είχα κάνει αυτό εδώ;
Έτσι, τώρα επιτρέψτε μου να προτείνω κάνουμε ένα σωρό προσθήκες.
Έτσι, εδώ είναι μερικά στοιχεία, Θα μεγεθύνετε μέσα
Έτσι, Πάω να προτείνει ότι στα μαθήματα,
ασχολούμαστε μόνο με τρεις σειρές.
Και επέλεξα αυτά τα τρία «Αιτία που είναι αντιπροσωπευτικά
κάποια ωραία - έχουν μερικά ωραία ιδιότητες.
CS1, CS50, CS51, που έχουν αύξηση αναγνωριστικά
αλλά τι είναι αυτό που ID είναι εντελώς άσχετο.
Αυτό είναι μόνο η σειρά με την οποία είχαν αυτόματη εισάγεται από εμένα.
Πώς σχετικά με τους δασκάλους;
Έτσι τώρα, επειδή Henry Leitner διδάσκει τόσο CS1 και CS51,
αυτό είναι το είδος της μια κατάλληλη επιπτώσεις για το σχεδιασμό μας.
Και Jesse διδάσκει CS51 και Malan διδάσκει CS50.
Έτσι τώρα - ή μάλλον αυτά είναι απλά μοναδικά αναγνωριστικά αυτών των ανθρώπων.
Και τα μαθήματα και εκπαιδευτές, - εκπαιδευτές, παρατηρούμε εδώ.
Ι.Δ.1 Course, το οποίο ήταν CS1 διδάσκεται
από εκπαιδευτή Ι.Δ.1 που είναι ο Χένρυ.
ID2 Course, το οποίο θα να σκεφτώ ήταν CS50 διδάσκεται
από εκπαιδευτή ID2, η οποία είναι Malan.
Και στη συνέχεια, τέλος, CS51, και παρατηρήσετε έχουμε δύο σειρές.
Και τώρα αυτός είναι ο λόγος για το σύνδεσμο πίνακας είναι ισχυρό διδάσκεται
τόσο από Henry και Jesse.
Έτσι, αυτό είναι όλα ωραία και καλά,
αλλά μπορώ μετά βίας θυμάστε από την κορυφή
από το κεφάλι μου, ποιος είναι ποιος εδώ.
Πώς μπορεί να σας ενδεχομένως ασχοληθεί με αυτό στον κώδικα,
χωρίς να χρειάζεται να σκληρά πράγματα κώδικα;
Λοιπόν, αυτό είναι όπου το ίδιο SQL αρχίζει να γίνεται φίλος μας.
Και Πάω να προτείνω μπορούμε να πληκτρολογήστε τα εξής.
Θα κάνω αυτό σε σε πραγματική προτροπή.
Επιτρέψτε μου να προχωρήσει και τοποθετήστε αυτά τα πράγματα.
Έτσι, στον πίνακα μαθημάτων ας κάνουμε ακριβώς ό, τι είχαμε
μόλις πριν από λίγο.
Πάω να προχωρήσουμε και να πούμε, ας προσθέσουμε CS1 και CS50.
Ας προστεθεί μερικά περισσότερα σειρές ταυτόχρονα, CS51.
Τώρα, επιτρέψτε μου να πάει μπροστά και να σώσει.
Εντάξει, έτσι είμαι απλά εκ νέου το συντομότερο
όπως μπορώ τις σχέσεις μόλις είδαμε στην οθόνη.
Και έτσι έχουμε εδώ Leitner, εδώ έχουμε Malan.
Ας δώσουμε στον εαυτό μας άλλη σειρά, και Tov.
Τώρα, επιτρέψτε μου να αποθηκεύσετε αυτή.
Και τα κάνω εσκεμμένα στην ίδια σειρά.
Όχι, έχω ξεχάσει να δώσει αυτή η αυτόματη αύξηση.
Επιτρέψτε μου να το διορθώσουμε γρήγορα αυτό.
Θα το διορθώσω αυτό η σε απευθείας σύνδεση κώδικα.
Αυτό απέτυχε ως άκρη.
Το γεγονός ότι δεν μπορούσα εισάγετε Leitner και Malan
Tov και απέτυχε, επειδή δεν είχα καθορίστε έναν αριθμό ταυτότητας, ακόμη και αν
είναι αναμένει ένα και ξέχασε να ελέγξει την αυτόματη αύξηση,
πράγμα που σημαίνει ότι ήταν όλοι από προεπιλογή πάρει το μηδέν.
Αλλά αυτό έρχεται σε αντίθεση με τότε που ιδιοκτησίας που έχουμε καθορίσει.
Το πρωτεύον κλειδί παραβιάστηκε γι 'αυτό δεν είχε καν επιτρέψτε μου να το κάνω.
Έτσι, επιτρέψτε μου να το διορθώσω αυτό.
Τώρα, επιτρέψτε μου να πάω πίσω στο Εισάγετε καρτέλα εδώ και καθορίστε
ότι θέλω Leitner, Malan και μία ακόμη σειρά, Tov.
Και τώρα, τέλος, το μόνο μια που είναι λίγο δύσκολο
πρέπει να θυμόμαστε είναι φυσικά εκπαιδευτή.
Ας προστεθεί ότι τώρα Φυσικά Ι.Δ.1 είναι εκπαιδευτής ID1
έτσι ώστε να είναι CS1 και Henry.
ID2 μαθήματος είναι εκπαιδευτής ID2 που είναι CS50 και Malan.
Και τότε οι τελευταίοι που έχουμε να ανησυχείς είναι φυσικά ID3
η οποία είναι CS51, διδάσκεται
από τη σειρά μαθημάτων εκπαιδευτή 1, η οποία είναι ο Χένρυ.
Και τρεις, όπως επίσης διδάσκεται με 3, η οποία είναι Tov.
Έτσι, ελπίζουμε ότι τώρα έχουμε ανασυνταχθεί αυτό -
γαμώτο, έκανα το ίδιο πράγμα.
Εκπαιδευτή του μαθήματος χρειάζεται auto αύξηση.
Εντάξει.
Θα κάνω αυτό πιο γρήγορα αυτή τη φορά, Φυσικά 1, πορεία 1, 2, 2.
Και τώρα, τέλος, κάνουμε CS51 η οποία έχει φυσικά ID3 και Henry.
Και φυσικά ID3 και Jesse.
Αυτό φαίνεται καλό.
OK. Έτσι τώρα, ας πάμε πίσω στο παράθυρο τερματικού.
Έτσι, αν έχω περιγράψει μαθήματα θα δούμε αυτό.
Αν θέλω να δω τα μαθήματα που μπορώ τώρα κάνουν επιλέξτε αστέρι από τα μαθήματα,
ημι παχέος εντέρου, και τώρα βλέπουμε αυτές τις αξίες.
Και τώρα, τι άλλο Δεν θέλω να κάνω;
Επιλέξτε αστέρι από τους εκπαιδευτές, αυτό είναι όπως περίμενα,
και επιλέξτε το αστέρι από τα μαθήματα - Φυσικά εκπαιδευτή υπογράμμισης.
Λοιπόν, πώς μπορώ να ενταχθούν τώρα αυτοί οι πίνακες;
Έτσι, η ομορφιά της έχουν επιλέξει οι τιμές Ιϋ τον τρόπο αυτό είναι
ότι, αν σκεφτούμε λαμβάνοντας τον πίνακα πορεία
και ο εκπαιδευτής τραπέζι και στη συνέχεια εισάγοντας
ανάμεσα σε αυτά τα δύο σε σας μυαλά ο εκπαιδευτής πορεία
πίνακα μπορείτε να το είδος της γραμμής όλες αυτές οι στήλες ID
έτσι ώστε να μπορούν να συμπεριληφθούν σε μια τεράστια στήλη που έχει όλα
των πληροφοριών νοιαζόμαστε για.
Η σύνταξη SQL για αυτό δεν είναι απαραιτήτως προφανές,
αλλά ας δούμε αν μπορούμε να το κάνουμε.
Έτσι, επιλέξτε αστέρι από τα μαθήματα,
και υπάρχει μερικές τρόπο όπως μπορούμε να το κάνουμε αυτό.
Πάω να πατήσετε Enter μόνο για να το είδος των πραγμάτων μορφή όμορφα,
αλλά αυτό βέλος είναι απλά μια σύμπτωμα της πλευρά του πελάτη εργαλείου,
δεν έχει τίποτα να κάνει με την ίδια SQL.
Έτσι, επιλέξτε αστέρι από τα μαθήματα.
Πάω να ενταχθούν τώρα ο πίνακας μαθήματα
στο τραπέζι σειρά μαθημάτων εκπαιδευτή.
Πώς; Στο πεδίο που ονομάζεται courses.id ισούται πορεία
υπογραμμίζουν εκπαιδευτή dot ποιο είναι το όνομα
του αντίστοιχου πεδίου εδώ ότι θέλω ένα ζευγάρι.
Δεν είναι αναγνωριστικό.
Ειναι για - τι, συγνώμη;
>> ID μαθήματος.
Εντάξει, επιτρέψτε μου να σμίκρυνση.
Αλλά θέλω να πάρω αυτό το ένα βήμα παραπέρα.
Έχω κάνει τώρα αυτό τραπέζι και αυτό.
Τώρα θέλω να τραβήξει αυτός ο τύπος σε επίσης.
Έτσι, επιτρέψτε μου περαιτέρω ενταχθούν όλο αυτό το πράγμα
σχετικά με τον εκπαιδευτή του πίνακα για τι;
Υπογράμμισης μαθήματος id instructor.instructor
ισούται instructors.id.
Έτσι, θα μπορούσαμε να είχαμε γράψει αυτό το ερώτημα σε λίγους τρόπους.
Η σειρά με την οποία έκανα αυτό Δεν είναι όλα αυτά σημαντικά.
Έχω ακριβώς το είδος του έκανε το το μυαλό μου από αριστερά προς τα δεξιά.
Θα μπορούσαμε να είχαμε κάνει αυτό σε λίγες διαφορετικούς τρόπους
αλλά αν έχω τώρα το ημι παχέος εντέρου και να πατήσετε το Enter,
παρατηρήσετε πάρω πίσω ένα νέο προσωρινό πίνακα, ένα σύνολο αποτελεσμάτων
έτσι ώστε να μιλήσει στον μιλούν δεδομένων.
Και τι έχω σε αυτό το πράγμα;
Έχω για αναγνώριση, ένα όνομα, ένα άλλο ID, το οποίο είναι το είδος της σύγχυσης
για μένα αυτή τη στιγμή, ένα αναγνωριστικό μάθημα,
ένας εκπαιδευτής, η ταυτότητα και όνομα.
Έτσι, στο τέλος της ημέρας έχουμε τα σωστά δεδομένα τώρα.
Βλέπω ότι CS1 διδάσκεται by Leitner, CS51 διδάσκεται
by Leitner και Tov, και CS50 διδάσκεται από Malan.
Αλλά είμαι λίγο νευρικός για αυτή η ασάφεια που έχω δημιουργήσει.
Ποια είναι η ασάφεια Είμαι υπαινίσσεται;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Υπάρχουν τρεις στήλες ID.
Έτσι, μπορούμε να διορθώσουμε πραγματικά αυτό και θα πάμε να πραγματικά συμβαίνει
να αναβάλει πλαίσιο μας τελικά να μας βοηθήσει με αυτό,
αλλά αποδεικνύεται ότι υπάρχει μια λέξη-κλειδί στο SQL ονομάζεται S,
όπου μπορείτε να καθορίσετε μια ψευδώνυμο, ένα νέο όνομα για ένα πεδίο
έτσι ώστε να μπορούμε να το αποφύγετε αυτό ασάφεια συνολικά.
Αλλά συνειδητοποίησα ότι αν δεν το κάνουμε αντιμετωπίσει με κάποιο τρόπο και με
ότι η λέξη-κλειδί ή ένα πλαίσιο,
υπάρχει δυνητικά αυτό ασάφεια αν προσπαθήσετε
πρόσβασης στο πεδίο ID γιατί είναι προφανές ότι υπάρχουν και αυτοί
με διπλότυπα ονόματα εκεί.
Έτσι, αυτό είναι μια ενταχθούν και νομίζω στο μάτι του μυαλού σας είναι ο καλύτερος τρόπος
να το σκεφτώ πραγματικά είναι να πάρει τους δύο πίνακες,
γραμμή τους επάνω στο τον τρόπο που θέλετε.
Και αυτό είναι ένα λεγόμενο εσωτερικός σύνδεσμος με την έννοια
ότι είμαστε συνδυάζοντας οι πίνακες εδώ.
Υπάρχουν άλλοι τύποι ενώνει ότι ενδέχεται να συναντήσουν
πάροδο του χρόνου, όπως εξωτερικές συνδέσεις,
αλλά για το μεγαλύτερο μέρος αυτής της είναι ίσως η πιο κοινή
για την ανακατασκευή δεδομένων.
Τι έχουμε κάνει τώρα είναι γενικά ό, τι λέγεται
κανονικοποίηση των δεδομένων σας, έτσι ώστε να δεν υπάρχει επικάλυψη πουθενά
στους πίνακές σας.
Και από την αναπαραγωγή, θα ήθελα σήμαινε ότι η πρώτη προσέγγιση.
Αν είχαμε αναφέρει Leitner και Tov σε πολλαπλές θέσεις
στη βάση δεδομένων σας, αυτό δεν είναι γενικά η καλύτερη απόφαση
ειδικά αν το όνομα δυνάμεις τους αλλάξετε τις υπερωρίες ή, στην περίπτωση
του γάμου, το πατρικό όνομα θα μπορούσε να αλλάξει το ίδιο απλά θέλετε ένα
κανονική θέση για μερικά τιμή δεδομένων όπως όνομα.
Εντάξει.
Έτσι, για να ανακεφαλαιώσουμε, είχαμε μια μερικές σχεδιαστικές αποφάσεις για να κάνουν
και οι πιο σημαντικές πιθανότατα μειώθηκε σε ορισμένες
από αυτές τις επιλογές των δεικτών.
Αλλά επιτρέψτε μου να επισημάνω ένα άλλο πράγμα, καθώς και.
Αν πάω πίσω στο phpMyAdmin,
ένα χαρακτηριστικό που μπορεί να μην έχουν συναντήσει πριν είναι
η ακόλουθη.
Αν πάω στο γήπεδο εκπαιδευτή, Έκανα ήδη διευκρινίσει ότι ορισμένες
από αυτά τα πράγματα έχουν ευρετήρια.
Αλλά επιτρέψτε μου να πάω στη δομή καρτέλα των μαθημάτων εκπαιδευτή.
Επιτρέψτε μου τώρα, κάντε κλικ στο Ευρετήρια και να παρατηρήσετε τα ακόλουθα.
Έχω καθορίζεται εδώ ότι υπάρχει ένα πρωτεύον κλειδί
επί της στήλης που ονομάζεται αναγνωριστικό.
Αυτή είναι μια κάπως περίπλοκη τρόπος προσδιορισμού cardinality
και ούτω καθεξής ως αναφερόμενος σε το μέγεθος του πεδίου σε bytes.
Αλλά τώρα έχω και ένα άλλο τομέα, φυσικά ταυτότητας, η οποία είναι -
Φυσικά ID οποία γίνεται εκ των προτέρων και μοναδικό, OK.
Έκανα αυτό το ένα στο εκ των προτέρων για μας.
Έτσι, γιατί είναι αυτό - επιτρέψτε μου να πέσει αυτό για χάρη της συζήτησης.
Ξέρεις τι έκανα;
OK. Έτσι, νωρίτερα, ένα από τα κινδύνους από τη χρήση ενός εργαλείου GUI
όπως αυτό, όταν ήμασταν Η δημιουργία αυτού του πίνακα ενταχθούν,
ο πίνακας διδάσκοντα του μαθήματος, Υπενθυμίζω ότι έχω καθορίσει
ότι θέλω ένα δείκτη σε αυτό το πεδίο
και ένας δείκτης για το θέμα αυτό άλλο τομέα.
Η παρενέργεια της τον έλεγχο και των δύο αυτών κουτιά
στην ίδια οθόνη είναι ότι phpMyAdmin συναχθεί από αυτό,
ότι δεν θέλω δύο ξεχωριστά ευρετήρια,
ότι θέλω ένα ενταχθούν δείκτη που είναι γενικά μόνο χρήσιμο
ή πιο χρήσιμο όταν είστε Δεν ψάχνουν για ένα πεδίο
αλλά και οι δύο από αυτούς τους τομείς.
Και γι 'αυτό είχαμε τα συνδέω εκεί
γι 'αυτό έπεσε «αιτία που Δεν ήταν αυτό που προορίζεται.
Αντίθετα, Πάω να ξανακάνει αυτό εδώ.
Πάω να πάει στο γήπεδο ID
και κάτω από πιο Είμαι απλά πρόκειται να πω προσθήκη δείκτη.
Και Πάω να πάει κάτω εκπαιδευτή ID και να πω προσθήκη δείκτη.
Και τώρα, αν κάνουμε κλικ εδώ, παρατηρήσετε έχουμε τρεις δείκτες,
ένα βασικό και όπως προορίζονται ένα για κάθε
των ξένων κλειδιών.
Και καλώ ξένες επειδή Φυσικά ID σε αυτό το τραπέζι χάρτες
στην οποία τομέα, ακριβώς για να είναι εκκαθάριση, σε έναν άλλο πίνακα.
Το πρωτεύον κλειδί που ονομάζεται ID, στον πίνακα που ονομάζεται μαθήματα,
και ίδια αντιμετώπιση για τον άλλο.
Αλλά τώρα, είναι μια ενδιαφέρουσα τέχνασμα και πραγματικά τεχνική.
Πήγα μπροστά και επιτρέψτε μου να κάνει ότι λίγο πιο αργά.
Στην ίδια οθόνη, ειδοποίηση λέει την άποψη συσχέτιση εδώ.
I κλικ σε αυτό και τώρα πρόσεξα ότι έχετε να κάνετε μερικά περιορισμούς.
Έτσι, ένα από τα upsides επίσης
από τη χρήση όχι μόνο εννοιολογικά ξένα κλειδιά και άλλους πίνακες
όπως έχουμε ακριβώς για είναι ότι με τον καθορισμό ενός δείκτη
σε αυτά που μπορείτε να έχετε το βοήθεια της βάσης δεδομένων σας ακόμα περισσότερο
εξασφαλίσει την ακεραιότητα αυτού του πεδίου.
Συγκεκριμένα, μπορώ τώρα προσδιορίζουν μέσω αυτής της πτώσης
προβλέπουν ότι το πεδίο course ID
σε αυτόν τον πίνακα πραγματικότητα χάρτες για να courses.id.
Ομοίως, εκπαιδευτής υπογράμμισης ID αντιστοιχίζονται με instructors.id.
Τώρα, γιατί είναι αυτό χρήσιμο;
Λοιπόν, ανακοίνωση, σχετικά με το δικαίωμα πλευρά ό, τι φαίνεται τώρα.
Μπορώ τώρα να διδάξει ο δεδομένων ότι εάν Henry
για παράδειγμα αποσύρεται ποτέ και σειρά του εξαφανίζεται
από τον πίνακα του εκπαιδευτή εντελώς και έτσι είναι
διαγραφεί, μπορώ μέσω αυτής υπερχείλιση προσέγγιση εξασφαλίζουν
ότι τα μαθήματα που διδάσκει είναι δεν συνδέονται με αυτόν.
Μπορώ να διδάξω τη βάση δεδομένων για να διαγράψετε τις γραμμές
σε αυτό το λεγόμενο ενταχθούν πίνακα αυτόματα εάν Henry ή εάν ένα
μαθημάτων του εξαφανίζεται.
Τώρα, γιατί αυτό είναι συναρπαστικό;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Το μόνο που πρέπει να το κάνουμε μια φορά και μακροπρόθεσμα, σωστά;
Είναι πολύ εύκολο, αν το είδος του οι άνθρωποι έρχονται και παρέρχονται, τα μαθήματα έρχονται
και να πάει, η βάση δεδομένων σας θα μπορούσε να απλά να ρυπαίνεται με τα μαθήματα
και με την σχολή που δεν είναι πλέον σχετικές με το σύνολο δεδομένων.
Και τα δεδομένα σας αρχίζει να παίρνει πολύ ακατάστατη και βρώμικη και μπαγιάτικο,
και έτσι και εδώ μπορούμε να ταξινομήσουμε
της επέβαλαν ορισμένες από οι περιορισμοί αυτοί.
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Γνωρίζει μέσω αυτού.
Αυτή είναι η οθόνη όπου καθορίζουμε μια σύνδεση
μεταξύ ξένο κλειδί και πρωτεύον κλειδί.
Έτσι, το σύνολο της ονομασίας συμβάσεις αναφέρθηκα
με τις προηγούμενες είναι μόνο συμβάσεις.
Δεν υπάρχει καμία εγγενή έννοια.
Αυτή είναι η οθόνη το οποίο είναι χρήσιμο μόνο
αφού ορίζεται ευρετήρια καθένα από αυτά τα πεδία, όπως κάναμε.
Και για αυτό το αναπτυσσόμενο έχουμε μερικά πράγματα, για παράδειγμα,
εάν ένα μάθημα διαγράφονται μπορείτε να πραγματικά να αποτρέψει ότι η διαγραφή
από το να συμβεί, αν υπάρχει είναι μια σειρά σε αυτόν τον πίνακα
με απλά λέγοντας, Περιορισμός.
Με άλλα λόγια Henry δεν μπορεί να συνταξιοδοτηθεί
μέχρι να τον αποσυνδέσουμε από CS51 και CS1.
Έτσι, αυτό είναι ένα καλό πράγμα.
Αλλά θα μπορούσε να προκαλέσει σφάλματα στον κώδικά σας
αν δεν αναμένουμε ότι, ή μπορούμε να έχουμε έναν καταρράκτη,
ένας καταρράκτης παρόμοια με τα επικαλυπτόμενα φύλλα στυλ
και ο καταρράκτης καταρράκτη σημαίνει ότι εάν ένα -
αν Henry συνταξιοδοτείται έτσι - με το να διαγραφούν
έτσι θα σειρά του εδώ να διαγραφεί.
Καμία ενέργεια δεν σημαίνει τίποτα ή null είναι το είδος των χρήσιμο εάν το είδος
της θέλουν κάποια ιστορική καταγραφή του Ερρίκου έχοντας διδάξει CS51,
αλλά απλά θέλετε αυτό το πεδίο για να είναι άκυρη, έτσι ώστε οι γραμμές εκεί
αλλά δεν είναι πια που συνδέονται με αυτόν.
Έτσι, αυτά είναι πολύ ισχυρό τεχνικές που μπορείτε να
και θα πρέπει να χρησιμοποιούν ακόμη και αν προς το συμφέρον ιδίως
από γλιτώνοντάς σας από τον εαυτό σας.
Έτσι, επιτρέψτε μου να κάνω μια αναφορά δύο τελικές λεπτομέρειες εδώ,
συστατικά με τα οποία που μπορεί να είναι χρήσιμη
καθώς σχεδιάζουμε για το σχεδιασμό της βάσης δεδομένων.
Έχετε επίσης την επιλογή πάνω από το μηχανισμό διαχείρισης βάσεων δεδομένων
ότι θα χρησιμοποιήσετε στον κώδικά σας.
Εάν είστε εξοικειωμένοι του CS161 ίσως -
ή ακόμα και 61, ίσως γενικά να είναι εξοικειωμένοι με τα συστήματα αρχείων.
Και υπάρχουν πράγματα όπως, NTFS και HFS +
και X2FS4 [φωνητική] και 3 και ούτω καθεξής.
Υπάρχουν διάφοροι τρόποι την αποθήκευση των δεδομένων στο γραφείο.
Ομοίως, υπάρχουν διαφορετικούς τρόπους για την αποθήκευση δεδομένων
σε μια βάση δεδομένων από προεπιλογή τουλάχιστον στην συσκευή
με την τελευταία έκδοση της MySQL.
Έχουμε χρησιμοποιήσει την κινητήρα βάση δεδομένων που ονομάζεται, NoDB,
το οποίο υποστηρίζει ένα μερικά ωραία χαρακτηριστικά.
Όμως, μια άλλη διαδεδομένη είναι επίσης ονομάζεται MyISAM και ένα ακόμη
που μπορεί να χρησιμοποιηθεί είναι η μνήμη, πράγμα που σημαίνει ότι δεν βάζουν τίποτα
στο δίσκο, απλά συνεχίστε πράγματα στη μνήμη.
Για το μεγαλύτερο μέρος ίσως δεν θα πάει στραβά μόλις αρχίζει
με NoDB, αλλά για τα σχέδια που τείνουν να περιλαμβάνουν υψηλά ποσοστά
της εισαγωγής, για παράδειγμα, όπως πολλοί ταχεία υλοτομίας,
εκατοντάδες πράγματα ανά δευτερόλεπτο ή χιλιάδες πράγματα.
Οποτεδήποτε έχετε ένα πολλά πράγματα θα
σχετικά στη βάση δεδομένων τότε αυτό το είδος
αποφάσεις του χαμηλότερου επιπέδου αρχίσετε να συμμετάσχουν.
Το πλήρες κείμενο χαρακτηριστικό για παράδειγμα, λειτουργεί μόνο σε MyISAM
έτσι ώστε να έχει συνέπειες.
Αλλά ίσως θυμάστε αυτό, ας τουλάχιστον παρακινήσει τους οποίους νοιαζόμαστε
για NoDB ειδικότερα.
A συνθήκες του αγώνα αναφέρεται γενικά σε ό, τι;
Εντάξει, αυτό είναι ένα νύξη για παράδειγμα κάποια
από εσάς μπορεί να έχετε ακούσει στην προηγούμενα χρόνια είτε 161 ή 50
όπου έχετε έναν συγκάτοικο, και οι δύο σας αρέσει το γάλα,
ένας από σας παίρνει το σπίτι ανοίγει πρώτα το ψυγείο δεν υπάρχει γάλα,
κλείστε το ψυγείο με τα πόδια σε όλη την δρόμους για να CVS και να πάρει
στη γραμμή για να αγοράσουν λίγο γάλα.
Εν τω μεταξύ, ο συγκάτοικός σας έρχεται πίσω εδώ.
Της αρέσει επίσης το γάλα.
Ανοίξτε το ψυγείο και συνειδητοποιεί γάλα.
Εδώ που στη συνέχεια πηγαίνει στο αποθηκεύουν, ίσως την άλλη CVS.
Fast forward μερικά λεπτά αργότερα θα έρθει πίσω και τώρα και οι δύο
από εσάς έχετε αγοράσει γάλα.
Ένας από αυτούς βρίσκεται τώρα σε εξέλιξη να χαλάσει γιατί δεν το κάνετε
όπως το γάλα τόσο πολύ και Αυτό είναι ένα πρόβλημα, σωστά;
Επειδή και οι δύο από σας επιθεωρούνται η κατάσταση κάποιας μεταβλητής
και έκανε μια απόφαση που βασίζεται σε αυτό, ακόμη και αν το κράτος
αυτής της μεταβλητής ήταν ουσιαστικά στη διαδικασία να αλλάξει,
όλα θα είναι αργά πάνω από το ποσότητα του χρόνου που χρειάζεται
για να πάρει από και προς το CVS.
Έτσι τι είναι ένα είδος ηλίθιο πραγματική παγκόσμια λύση σε αυτό το πρόβλημα;
Αφήστε μια σημείωση, έτσι δεν είναι;
Έχει συμβεί την τελευταία φορά.
Πάντα να αφήνετε μια σημείωση ή λουκέτο το πράγμα κυριολεκτικά.
Και λέω λουκέτο, επειδή αν το κάνετε πάρετε ή έλαβε CS161,
κλειδώματος είναι ένα θεμελιώδες ιδέα σε αυτό το είδος του κόσμου.
Έτσι, μπορεί να προκύψουν συνθήκες του αγώνα και στον κόσμο της βάσης δεδομένων
και ίσως θυμάστε ίσως από CS50 χρηματοδότηση αν πήρε 50,
αυτός ο κώδικας που έδωσε πραγματικά εσείς στην προδιαγραφή
κατά το χρόνο έτσι ώστε να σας λειτουργία λεγόμενη ατομική.
Αν ήθελε, σε αυτό το περίπτωση, να αγοράσει ένα μερίδιο των μετοχών
και ότι το απόθεμα έχει κάποιο συγκεκριμένο σύμβολο.
Είπαμε να χρησιμοποιήσετε κώδικα, όπως αυτό, διότι με τον τρόπο αυτό
σε δύο αντίτυπα κλειδί ενημέρωση σύνταξη, η οποία είναι χτισμένη
σε MySQL είστε αποτελεσματικά κάνει είτε στο ένθετο
ή στην ενημέρωση μετά την κάνει μια επιλογή για να δείτε
αν ένα απόθεμα είναι ήδη εκεί.
Με άλλα λόγια, το ανάλογο σε ο κόσμος της αγοράς ενός αποθέματος
του γάλακτος και το ψυγείο θα μπορούσε να είναι, πρώτον,
πριν από την αγορά ένα μερίδιο της Google ίσως να θέλετε να επιλέξετε
από τη βάση δεδομένων όλα τα μετοχές της Google που κατέχει ο David
για να δούμε αν κατέχει μηδέν ή περισσότερα.
Μόλις δείτε αν κατέχει μηδέν ή περισσότερα έχετε
στη συνέχεια να κάνετε τα εξής.
Μπορείτε είτε να κάνετε ένα ένθετο
αν το δικό αιτία μηδέν » δεν υπάρχει γραμμή για τον David ακόμα,
ή θα πρέπει να κάνετε μια ενημέρωση εάν τουλάχιστον θεωρητικά θέλετε
να έχουν μία σειρά ανά χρήστη.
Το πρόβλημα είναι η επιλογή ότι ο αριθμός των μετοχών
και, στη συνέχεια, την ενημέρωση ή εισαγωγής θα μπορούσε να διακοπεί
από κάποιον άλλο σε ένα άλλο τερματικό υπολογιστή που προσπαθεί να αγοράσει
ή να πουλήσει κάποια από του Δαβίδ μετοχές των αποθεμάτων κατά πόσον
για καλό σκοπό ή είδος από κακόβουλους σκοπούς.
Είναι σαν να πηγαίνεις στο κατάστημα όταν ο συγκάτοικός σας παίρνει πίσω
και ελέγχει το κράτος της μεταβλητής.
Έτσι ώστε αυτή η σύνταξη κατά τη στιγμή που ήταν το είδος των κατάλληλων
για CS50, αποτρέπει τη πρόβλημα συνολικά.
Και κάνει ακριβώς όλα αυτά μαγεία της ασφάλισης για σας,
αλλά τώρα με αυτά τα είδη των σχεδίων για αυτό το μάθημα
η οποία πιθανότατα θα συνεπάγεται πιο σύνθετων συνόλων δεδομένων,
δεν μπορεί να επιτευχθεί πάντα αυτό ατομικότητα.
Όλα συμβαίνουν με τη μία ή και καθόλου
χωρίς διακοπή τόσο κομψά.
Και έτσι MySQL, ένα άλλο μηχανισμό διαχείρισης βάσεων δεδομένων,
στήριξη πράγματα που ονομάζεται κλειδαριές,
σύμφωνα με την οποία μπορείτε να πείτε αυτό το κλείδωμα τραπέζι, έτσι ώστε μόνο μία απόλαυση
και γενικά μόνο ένας χρήστης μπορεί να αγγίζετε σε οποιαδήποτε χρονική στιγμή
να διαβάσει ή να γράψει και τότε μπορείτε να το ξεκλειδώσετε.
Αυτό είναι ένα παράδειγμα από μια των ιδίων αναφορών της MySQL,
όπου αν έχετε σαν μια τράπεζα λογαριασμό που προσπαθείτε
να αφαιρέσει χρήματα από και στη συνέχεια να προσθέσετε χρήματα.
Μπορεί να θέλετε να βεβαιωθείτε ότι και οι δύο
αυτά τα πράγματα συμβαίνουν μαζί
έτσι ώστε δεν υπάρχει καμία μαθηματικά λάθη
και δεν υπήρξαν απώλειες ενός χρήματα, με κάποιο τρόπο.
Το πρόβλημα με τις κλειδαριές αν και σε μια βάση δεδομένων είναι
ότι αυτό σημαίνει γενικά ολόκληρος ο πίνακας είναι κλειδωμένο,
το οποίο σημαίνει ότι αν έχετε εκατό ανθρώπους που προσπαθούν
να συναλλάσσονται με την τράπεζά σας στο διαδίκτυο την ίδια ποσότητα
του χρόνου μόνο μία από τους μπορεί να πάει σε μια στιγμή.
Ποια είναι ηλίθιο, ιδιαίτερα σε διακομιστές στις μέρες μας
που έχουν οκτώ φυσικά, 16 Φυσικά, έχουν ένα τεράστιο ποσό
της μνήμης, δεν υπάρχει λόγος για συνέχειες όλα
των συναλλαγών σας αν αυτοί Οι πελάτες μόνο θα
να αλληλεπιδρούν με τις δικές τους σειρές.
Έτσι NoDB σας επιτρέπει να κάνετε τα πράγματα πιο έξυπνο
και αυτό θα είναι γενικά η προσέγγιση που θα λάβει κωδικό,
όπως μπορείτε να χρησιμοποιήσετε κάτι ονομάζεται συναλλαγή.
Και μπορείτε να το κάνετε αυτό σε γενικές γραμμές σε κώδικα PHP,
Κώδικα Ruby, Python, οτιδήποτε.
Αλλά ο κώδικας SQL που είναι χρησιμοποιείται τελικά είναι αυτό,
συνήθως.
Ξεκινήστε συναλλαγή, τότε καθορίσετε δύο ή περισσότερα ερωτήματα
που θέλετε να εκτελέσει συνολικά
χωρίς διακοπή ή καθόλου.
Μπορεί ακόμη να υπάρχει κάποια επιλέξτε δηλώσεις
ή κάποιες διαγραφές ή ενημερώσεις.
Αλλά το ωραίο είναι ότι η βάση δεδομένων θα είναι αρκετά έξυπνος
για να βεβαιωθείτε ότι το μόνο που θα κλειδώσετε τις σειρές που είστε πραγματικά
συμμετέχουν σε αυτό ενημερώσεις ή επιλέγει ή διαγραφές.
Έτσι, αν έχεις χιλιάδες σειρές και είστε μόνο αγγίζοντας τρεις
από αυτά, μόνο ότι το υποσύνολο του πίνακα θα κλειδωθεί
πράγμα που σημαίνει ότι αυτές άλλων 99 οι πελάτες μπορούν να αγγίξουν τις γραμμές τους
χωρίς να συνέχειες και επιβραδύνεται από εσάς.
Εν τω μεταξύ, αυτό είναι το ωραιότερο πτυχή στις συναλλαγές.
Πρόκειται για συναλλαγές σε μια αίσθηση σαν 161 σε ένα σύστημα αρχείων,
από όπου και αν συναλλαγής
το οποίο σημαίνει ότι μπορείτε να κυλήσει τους πίσω, μπορείτε να τις αναιρέσετε.
Αυτό είναι σαν την εντολή ή τον έλεγχο F βάσεων δεδομένων.
Αν ανακαλύψετε μέρος τρόπο και με όλα
λειτουργίας των διαφόρων δεδομένων σας, πυροβολήσει, κάτι δεν πάει καλά.
Μπορείτε κυριολεκτικά να εκτελέσει μια διαφορετικά roll ερώτημα SQL πίσω
και όλα αυτά τάση - όλα από τις δηλώσεις που εκτελούνται
μετά λέγοντας έναρξη συναλλαγή εξαφανίζονται
σαν να μην υπήρξαν ποτέ,
το οποίο είναι ένα εκπληκτικά ισχυρό πράγμα.
Και αυτά είναι τα είδη των τα πράγματα σίγουρα σε 50 εμείς είδος
του κρύβει κάτω από το χαλί και σας ακριβώς το είδος του να αναλάβει
ότι όλα θα πάνε καλά.
Αλλά τη στιγμή που θα ξεκινήσετε σκεφτόμαστε πραγματικά έργα
και πραγματικούς χρήστες και το ακεραιότητα της βάσης δεδομένων σας,
αυτά είναι τα είδη σχεδιαστικές αποφάσεις
που πρόκειται να είναι σημαντική.