Κατανόηση των βασικών στοιχείων του Ruby on Rails: Βάσεις δεδομένων SQL και πώς λειτουργούν

Αφού μάθαμε για τον Ruby, το πρώτο βήμα που κάναμε ήταν να καταλάβουμε πώς λειτουργούν ο ιστός και ο κύκλος αιτήσεων-απόκρισης Ruby on Rails.

Τώρα ήρθε η ώρα να μάθετε για τις βάσεις δεδομένων και πώς συνδέονται με το Ruby on Rails. Βασικά, η απάντηση είναι το Μοντέλο: το Mαπό MVC, όπως μάθαμε εδώ.

Πριν μάθετε την ανάπτυξη ιστού με το Rails, προτείνω να μάθετε πρώτα για την Ruby .

Ας ξεκινήσουμε!

Τι είναι μια βάση δεδομένων;

Χμμμ… Η πρώτη σκέψη που έρχεται στο μυαλό μου είναι κάτι που αποθηκεύει δεδομένα.

Αλλά αυτός ο ορισμός είναι αρκετά ανακριβής! Ένας πίνακας, ένας κατακερματισμός, μια συνδεδεμένη λίστα ή οποιαδήποτε δομή δεδομένων μπορεί να είναι κάτι που μπορεί να αποθηκεύσει δεδομένα.

Όταν απενεργοποιείτε τον υπολογιστή, χάνετε όλες τις τιμές δεδομένων που είχαν αποθηκευτεί σε αυτόν τον πίνακα (το ίδιο με όλες τις δομές δεδομένων). Επομένως, δεν είναι καλή ιδέα να αποθηκεύσετε όλα μου precious data.

Πρέπει να λύσουμε δύο προβλήματα εδώ:

  1. Αποθηκεύστε δεδομένα και λάβετε τα όποτε θέλουμε.
  2. Αποθηκεύστε δεδομένα με οργανωμένο και δομημένο τρόπο, ώστε να μπορούμε να τα αποκτήσουμε εύκολα.

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

Λύσαμε αυτό το πρόβλημα, αλλά χάσαμε το άλλο. Τώρα όλα τα δεδομένα αποθηκεύονται και δεν θα τα χάσουμε. Αλλά δεν είναι καλά δομημένο στο αρχείο. Χρειαζόμαστε τον κανόνα για αποθήκευση και λήψη δεδομένων σε οργανωμένη και καλά δομημένη μορφή.

Ας σκεφτούμε πώς μπορούμε να οργανώσουμε τα δεδομένα με καλά δομημένο τρόπο.

Τι γίνεται με την οργάνωση όλων των δεδομένων σε πίνακες;

Λοιπόν, εδώ έχουμε: την κεφαλίδα του πίνακα ( όνομα στηλών: Όνομα, Επώνυμο, Διεύθυνση κ.λπ. ) που περιέχει τιμές που θα αποθηκεύσουμε. Για παράδειγμα, εάν θέλουμε να αποθηκεύσουμε τη συμβολοσειρά "Mickey" (η τιμή) , θα αποθηκευτεί στη στήλη "Όνομα" .

  • Πίνακας : ας πούμε Άνθρωποι
  • Στήλες : Όνομα , Επώνυμο , Διεύθυνση κ.λπ.
  • Σειρές : σε αυτήν την περίπτωση, μπορούμε να πούμε ότι μια σειρά μπορεί να είναι ένα άτομο με, για παράδειγμα, το όνομα " Mickey " και το επώνυμο " Mouse, " διεύθυνση "123 Fantasy Way " κ.λπ.
  • Πεδία : όλα τα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων.

Και τώρα έχουμε έναν καλά δομημένο τρόπο αποθήκευσης δεδομένων : σε έναν πίνακα!

Τι γίνεται με τη λήψη, διαγραφή, εισαγωγή και ενημέρωση δεδομένων;

Θα χρησιμοποιήσουμε τη γλώσσα SQL ( δεν θα αναφέρω τον κόσμο της NoSQL! ) Για να χειριστούμε τα δεδομένα. Ας πάρουμε τα βασικά.

  1. GET: εάν θέλουμε να λάβουμε όλα τα δεδομένα ( άτομο ) από τον πίνακα " Άτομα" , πρέπει να τα επιλέξουμε από αυτόν τον πίνακα.

Το σύμβολο ( *) σημαίνει ότι θα επιλέξει όλες τις στήλες από τον πίνακα " Άτομα" . Εάν μπορούμε να πάρουμε όλες τις στήλες, μπορούμε να καθορίσουμε ποιες στήλες χρειαζόμαστε για αυτήν την επιλογή.

2. ΔΙΑΓΡΑΦΗ: θέλουμε να διαγράψουμε όλα τα δεδομένα από τον πίνακα " Άτομα" .

Αλλά δεν είναι συνηθισμένο να διαγράφονται όλα τα δεδομένα από έναν πίνακα. Συνήθως χρησιμοποιούμε μια συνθήκη για διαγραφή, όπως "Θέλω να διαγράψω όλα τα άτομα κάτω των 21 ετών". Θα μάθουμε πώς αργότερα σε αυτήν την ανάρτηση!

3. ΕΙΣΑΓΩΓΗ: θα εισαγάγουμε / αποθηκεύσουμε δεδομένα στον πίνακα.

ή μπορούμε να καθορίσουμε σε ποιες στήλες θέλουμε να εισαγάγουμε δεδομένα.

4. ΕΝΗΜΕΡΩΣΗ: έχουμε αποθηκεύσει τα δεδομένα, αλλά θέλουμε να τα ενημερώσουμε.

Χρήση συνθηκών στα ερωτήματά μας

Τώρα μπορούμε να χρησιμοποιήσουμε τη γλώσσα SQL για την αναζήτηση δεδομένων (επιλογή, διαγραφή, εισαγωγή, ενημέρωση).

  • Τι γίνεται όμως αν θέλουμε να διαγράψουμε μόνο εγγραφές με το επώνυμο Kinoshita ;
  • Ή αν θέλουμε να ενημερώσουμε ένα συγκεκριμένο άτομο με το όνομα Leandro και το επώνυμο Kinoshita ;
  • Ή απλώς επιλέξτε όλα τα δεδομένα από τον πίνακα ατόμων και ταξινομήστε τα ανά ηλικία από νεότερους σε μεγαλύτερους;

Ναι, χρησιμοποιούμε όρους όπως , όπου και σειρά από, και φορείς όπως ή και και . Ας δούμε μερικά παραδείγματα:

  • Διαγραφή όλων των εγγραφών από τον πίνακα ατόμων με το επώνυμο Kinoshita .
  • Ενημέρωση όλων των εγγραφών από τον πίνακα ατόμων με το όνομα Leandro και το επώνυμο Kinoshita .
  • Επιλογή όλων των εγγραφών από τον πίνακα ατόμων αλλά παραγγελία ανά ηλικία (σε αύξουσα σειρά → ASC).

Σχέση μεταξύ πινάκων

Γνωρίζουμε πώς να εκτελέσουμε ερωτήματα (με ή χωρίς όρους). Ας καταλάβουμε πώς λειτουργούν οι σχέσεις των πινάκων.

  • One to One (1-1) : πρόκειται για μια σχέση μεταξύ δύο πινάκων στους οποίους ο ένας μπορεί να ανήκει μόνο στον άλλο. π.χ. ένα άτομο έχει ένα διαβατήριο και αυτό το διαβατήριο ανήκει σε αυτό το συγκεκριμένο άτομο. Έτσι σε αυτό το παράδειγμα, έχουμε πίνακες People, table Passports και 1-1 σχέση.
  • One to Many (1-n) : πρόκειται για μια σχέση μεταξύ δύο πινάκων όπου μια εγγραφή από έναν πίνακα μπορεί να αναφέρει πολλές εγγραφές από έναν άλλο. π.χ. Φανταστείτε μια πλατφόρμα ηλεκτρονικού εμπορίου: χρήστες, παραγγελίες, προϊόντα, πληρωμές κ.λπ. Ένας χρήστης μπορεί να έχει πολλές παραγγελίες και κάθε παραγγελία ανήκει σε αυτόν τον συγκεκριμένο χρήστη. Έτσι σε αυτό το παράδειγμα, έχουμε πίνακες Χρήστες, παραγγελίες πίνακα και σχέση 1-ν.
  • Many to Many (nn) : πρόκειται για μια σχέση μεταξύ δύο πινάκων όπου μια εγγραφή από έναν πίνακα μπορεί να αναφέρει πολλές εγγραφές από έναν άλλο. Και μια εγγραφή από άλλη μπορεί επίσης να αναφέρει πολλές εγγραφές από αυτήν. π.χ. έχουμε και πάλι την πλατφόρμα ηλεκτρονικού εμπορίου: χωρίζουμε τα προϊόντα σε κατηγορίες. Μια κατηγορία έχει πολλά προϊόντα (κατηγορία Η τεχνολογία έχει πολλά προϊόντα όπως κινητά τηλέφωνα, φορητούς υπολογιστές, κ.λπ.) και ένα προϊόν μπορεί να ανήκει σε πολλές κατηγορίες (το προϊόν Το κινητό τηλέφωνο ανήκει στις κατηγορίες τεχνολογίας και ηλεκτρονικών) Έτσι, σε αυτό το παράδειγμα, έχουμε προϊόντα πίνακα, κατηγορίες πίνακα και μια σχέση nn.

Λειτουργία Rails ON

Καταλαβαίνουμε τώρα το νόημα των βάσεων δεδομένων, δοκιμάσαμε ορισμένα βασικά ερωτήματα και μιλήσαμε για τη σχέση μεταξύ πινάκων. Αλλά πώς μπορούμε να χρησιμοποιήσουμε αυτήν τη γνώση στον κόσμο του Ruby on Rails και του διαδικτύου ;

Πρώτα απ 'όλα: Rails είναι Rails . Η βάση δεδομένων είναι βάση δεδομένων . Είναι προφανές; Αλλά οι άνθρωποι συνήθως μπερδεύονται για αυτό.

Ένα μοντέλο χρήστη μπορεί να αντιπροσωπεύει έναν πίνακα χρηστών . Αλλά το μοντέλο δεν είναι το τραπέζι.

  • Στη βάση δεδομένων , έχουμε πίνακες και σειρές.
  • Στις ράγες , έχουμε μοντέλα (τάξεις) και αντικείμενα.

Φανταστείτε έναν ιστότοπο ιστολογίου. Το blog χρειάζεται έναν συντάκτη για κάθε ανάρτηση. Δημιουργούμε λοιπόν έναν πίνακα συγγραφέων με μερικές στήλες (όνομα_συνόλου, επώνυμο κ.λπ.):

Στη μετανάστευση, προσθέτουμε στήλες first_name, last_name, email, birthday, created_at, και updated_at. ( created_atκαι updated_atδημιουργούνται από τον t.timestampsκωδικό).

Έτσι δημιουργούμε μια μετανάστευσης (κωδικός Ruby), εκτελέστε την rake db:migrateεντολή στο τερματικό, και δημιουργεί έναν πίνακα Authorsμε first_name, last_name, email, birthday, created_at, και updated_atστήλες.

Επιστροφή στο Rails - μπορούμε να δημιουργήσουμε ένα Authorμοντέλο:

Τώρα έχουμε έναν Authorsπίνακα με μερικές στήλες και ένα Authorμοντέλο.

Χρήση της κονσόλας Rails

Ανοίξτε το τερματικό και πληκτρολογήστε bundle exec rails c. Θυμηθείτε, είμαστε στην κονσόλα RAILS , οπότε έχουμε τάξεις, αντικείμενα, χαρακτηριστικά κ.λπ.

Σχέσεις στις ράγες

Δημιουργήσαμε έναν Authorsπίνακα / μοντέλο. Αυτό που χρειαζόμαστε τώρα είναι ένας Postsπίνακας / μοντέλο. Ένας συγγραφέας έχει πολλές δημοσιεύσεις και μια ανάρτηση ανήκει σε συγκεκριμένο συγγραφέα. Η σχέση εδώ είναι μια προς πολλές ( 1-n ). Θυμάμαι?

Έτσι, όταν δημιουργούμε έναν Postsπίνακα, πρέπει να αποθηκεύσουμε μια αναφορά στον συντάκτη της ανάρτησης (στήλη author_id στον πίνακα Δημοσιεύσεις ). Είναι γνωστό ως το Foreign Key.

Και πώς συσχετίζουμε τα μοντέλα;

has_manyδημοσιεύσεις συγγραφέα

η ανάρτηση ανήκει σε συγγραφέα

Χρήση της κονσόλας Rails

* Γρήγορη εξήγηση για has_manyκαι belongs_to. Και codesοι δύο είναι μέθοδοι που ορίζονται στην ActiveRecordτάξη. Μπορείτε να δείτε ότι δημιουργούμε τα μοντέλα μας που προέρχονται από ActiveRecord::Base.

Θυμάστε στο άρθρο μου Ruby Foundation ότι μάθαμε για τον Προγραμματισμένο Προγραμματισμό Αντικειμένου, το μέρος Κληρονομιάς; Γι 'αυτό μπορούμε να χρησιμοποιήσουμε has_manyκαι belongs_toμεθόδους χωρίς να το ορίσουμε οπουδήποτε στην εφαρμογή μας. Το Rails το χειρίζεται για εμάς.

Εάν θέλετε να καταλάβετε αυτήν την ιδέα βαθιά, κλωνοποιήστε το ρεπό ρελά ή δείτε το Behind the Scenes του «Has Many» Active Record Association.

Ερωτήματα στο Rails

Μπορούμε να υποβάλουμε ερώτημα χρησιμοποιώντας τις μεθόδους ActiveRecord:

  • όλα : Λάβετε όλα τα αντικείμενα από ένα συγκεκριμένο μοντέλο.

Πίσω από τα παρασκήνια, εκτελεί το SELECT * FROM postsερώτημα.

  • find : Χρησιμοποιώντας το find μπορούμε να πάρουμε το αντικείμενο με το αναγνωριστικό (πρωτεύον κλειδί).

Πίσω από τα παρασκήνια, εκτελεί SELECT * FROM posts WHERE id = 1ερώτημα.

  • όπου : Λάβετε τα αντικείμενα που πληρούν τις συνθήκες.

Πίσω από τα παρασκήνια, εκτελεί SELECT * FROM posts WHERE title = 'Database & Rails'ερώτημα.

  • σειρά : Ταξινόμηση όλων των αντικειμένων με βάση μια στήλη.

Πίσω από τα παρασκήνια, εκτελεί SELECT * FROM posts ORDER BY created_at DESCερώτημα.

Αυτό είναι όλο!

Μάθαμε πολλά εδώ. Ελπίζω να εκτιμήσετε το περιεχόμενο και να μάθετε περισσότερα σχετικά με τον τρόπο λειτουργίας των μοντέλων βάσεων δεδομένων και σιδηροτροχιών.

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

Αν θέλετε ένα πλήρες μάθημα Ruby and Rails, μάθετε δεξιότητες κωδικοποίησης πραγματικού κόσμου και δημιουργήστε έργα, δοκιμάστε ένα μήνα Ruby Bootcampκαι Rails Bootcamp . Τα λέμε εκεί ☺

Διασκεδάστε και συνεχίστε να μαθαίνετε και να κωδικοποιείτε.

Το Twitter και το Github. ☺