Forstå det grundlæggende i Ruby on Rails: SQL-databaser, og hvordan de fungerer

Efter at have lært om Ruby, var det første skridt, vi tog, at forstå, hvordan internettet og Ruby on Rails-anmodnings-svar-cyklus fungerer.

Nu er det tid til at lære om databaser, og hvordan de forbinder med Ruby on Rails. Dybest set er svaret modellen: Mfra MVC, som vi lærte her.

Før jeg lærer webudvikling med Rails, anbefaler jeg virkelig at lære om Ruby først .

Lad os begynde!

Hvad er en database?

Hmmm ... Den første tanke, der kommer til mig, er noget, der gemmer data.

Men denne definition er ret upræcis! Et array, en hash, en sammenkædet liste eller en hvilken som helst datastruktur kan være noget, der er i stand til at gemme data.

Når du slukker for computeren, mister du alle dataværdier, der blev gemt i det array (det samme som alle datastrukturer). Så det er ikke en god ide at gemme alle mine precious data.

Vi skal løse to problemer her:

  1. Gem data, og få det når som helst vi ønsker det.
  2. Gem data på en organiseret og struktureret måde, så vi nemt kan få det.

Skal jeg gemme alle data i et notesblok? Sæt bare al information inde i den adskilt med kommaer, gem txt fileog gjort. Nu kan jeg åbne den og få alle de data, jeg ønsker. Vi kan gemme data og få det når som helst ... problem løst!

Vi løste dette problem, men vi savnede det andet. Nu er alle data gemt, og vi mister dem ikke. Men det er ikke velstruktureret i filen. Vi har brug for reglen til at gemme og få data i en organiseret og velstruktureret form.

Lad os overveje, hvordan vi kan organisere dataene på en velstruktureret måde.

Hvad med at organisere alle data i tabeller?

Så her har vi: tabellens overskrift ( kolonnenavn: Fornavn, Efternavn, Adresse osv. ), Der indeholder værdier, som vi gemmer. For eksempel, hvis vi vil gemme strengen "Mickey" (værdien) , gemmes den i kolonnen "Fornavn" .

  • Tabel : Lad os sige Folk
  • Kolonner : Fornavn , Efternavn , Adresse osv
  • Rækker : i dette tilfælde kan vi sige, at en række kan være en person med for eksempel fornavn " Mickey " og efternavn " Mus ", adresse "123 Fantasy Way " osv.
  • Felter : alle data gemt i databasen.

Og nu har vi en velstruktureret måde at gemme data på : i en tabel!

Hvad med at hente, slette, indsætte og opdatere data?

Vi bruger SQL-sprog ( jeg nævner ikke NoSQL-verdenen! ) Til at manipulere dataene. Lad os få det grundlæggende.

  1. FÅ: Hvis vi vil hente alle data ( person ) fra People- tabellen, skal vi vælge det fra den pågældende tabel.

Symbolet ( *) betyder, at det vil vælge alle kolonner fra tabellen Personer . Hvis vi kan få alle kolonner, kan vi specificere, hvilke kolonner vi har brug for til dette valg.

2. SLET: vi ønsker at slette alle data fra vores People- tabel.

Men det er ikke almindeligt at slette alle data fra en tabel. Vi bruger normalt en betingelse til at slette, som "Jeg vil slette alle personer under 21 år." Vi vil lære hvordan senere i dette indlæg!

3. INDSÆT: vi indsætter / gemmer data i tabellen.

eller vi kan specificere, i hvilke kolonner vi vil indsætte data.

4. OPDATERING: vi har gemt dataene, men vi vil opdatere dem.

Brug af betingelser i vores forespørgsler

Nu kan vi bruge SQL-sprog til at forespørge (vælge, slette, indsætte, opdatere) data.

  • Men hvad hvis vi bare vil slette poster med efternavnet Kinoshita ?
  • Eller hvis vi vil opdatere en bestemt person med fornavn Leandro og efternavn Kinoshita ?
  • Eller bare vælg alle data fra folketabellen og sorter dem efter alder fra yngre til ældre?

Ja, vi bruger betingelser som hvor og rækkefølge efter, og operatører som eller og og . Lad os se nogle eksempler:

  • Sletning af alle poster fra folketabellen med efternavn Kinoshita .
  • Opdatering af alle poster fra folketabellen med fornavn Leandro og efternavn Kinoshita .
  • Valg af alle poster fra folketabellen, men ordning efter alder (i stigende rækkefølge → ASC).

Forholdet mellem tabeller

Vi ved, hvordan vi udfører forespørgsler (med eller uden betingelser). Lad os forstå, hvordan tabellenes forhold fungerer.

  • Én til én (1–1) : det handler om et forhold mellem to tabeller, hvor den ene kun kan høre til den anden. F.eks. har en person et pas, og det pas tilhører den pågældende person. Så i dette eksempel har vi tabel Mennesker, tabelpas og et forhold mellem 1 og 1.
  • Én til mange (1-n) : det handler om et forhold mellem to tabeller, hvor en post fra en tabel kan henvise til mange poster fra en anden. Forestil dig f.eks. en e-handelsplatform: brugere, ordrer, produkter, betalinger osv. En bruger kan have mange ordrer, og hver ordre tilhører den specifikke bruger. Så i dette eksempel har vi tabelbrugere, tabelordrer og en 1-n-relation.
  • Mange til mange (nn) : det handler om et forhold mellem to tabeller, hvor en post fra en tabel kan henvise til mange poster fra en anden. Og en post fra en anden kan også referere til mange poster fra den ene. F.eks. har vi igen e-handelsplatformen: vi deler produkter i kategorier. En kategori har mange produkter (kategori Teknologi har mange produkter som mobiltelefoner, notesbøger osv.), Og et produkt kan tilhøre mange kategorier (produkt Mobiltelefon tilhører kategorierne teknologi og elektronik). Så i dette eksempel har vi tabel Produkter, tabelkategorier og et nn-forhold.

Skinnetilstand TIL

Vi forstår nu betydningen af ​​databaser, vi har prøvet nogle grundlæggende forespørgsler og har talt om forholdet mellem tabeller. Men hvordan kan vi bruge den viden i Ruby on Rails og webudviklingsverdenen ?

Først og fremmest: Rails er Rails . Den Database er Database . Er det indlysende? Men folk bliver normalt forvirrede over det.

En Bruger model kan repræsentere en Brugere bord. Men modellen er ikke bordet.

  • I databasen har vi tabeller og rækker.
  • skinner har vi modeller (klasser) og objekter.

Forestil dig et blog-site. Bloggen har brug for en forfatter til hvert indlæg. Så vi opretter en forfattertabel med nogle kolonner (fornavn, efternavn osv.):

I migration, vi tilføjer kolonner first_name, last_name, email, birthday, created_at, og updated_at. ( created_atog updated_atoprettes af t.timestampskoden).

Så vi skabe en migration (Ruby kode), skal du køre rake db:migratekommandoen i terminalen, og det genererer en tabel Authorsmed first_name, last_name, email, birthday, created_at, og updated_atkolonner.

Tilbage til skinner - vi kan oprette en Authormodel:

Så nu har vi en Authorstabel med nogle kolonner og en Authormodel.

Brug af skinnekonsollen

Åbn terminalen og skriv bundle exec rails c. Husk, vi er i RAILS- konsollen, så vi har klasser, objekter, attributter osv.

Forhold på skinner

Vi oprettede en Authorstabel / model. Hvad vi har brug for nu er en Poststabel / model. En forfatter har mange indlæg, og et indlæg tilhører en bestemt forfatter. Forholdet her er en for mange ( 1-n ). Husk?

Så når vi opretter en Poststabel, er vi nødt til at gemme en reference til indlæggets forfatter (kolonne author_id i Indlæg tabellen). Det er kendt som Foreign Key.

Og hvordan relaterer vi modellerne?

forfatter has_manyindlæg

indlæg tilhører_ til en forfatter

Brug af skinnekonsollen

* Hurtig forklaring om has_manyog belongs_to. Begge codeser metoder defineret på ActiveRecordklassen. Du kan se, at vi opretter vores modeller, der arver fra ActiveRecord::Base.

Husk i min Ruby Foundation-artikel, at vi lærte om objektorienteret programmering, arvsdelen? Dette er grunden til, at vi kan bruge has_manyog belongs_tometoder uden at definere det overalt i vores applikation. Rails håndterer det for os.

Hvis du vil forstå dette koncept dybt, skal du klone Rails-repoen eller tjekke bag kulisserne i 'Har mange' Active Record Association.

Forespørgsler på skinner

Vi kan spørge ved hjælp af ActiveRecord-metoder:

  • alle : Få alle objekter fra en bestemt model.

Bag kulisserne udfører den SELECT * FROM postsforespørgslen.

  • find : Ved hjælp af find kan vi få objektet ved id (primær nøgle).

Bag kulisserne udfører den SELECT * FROM posts WHERE id = 1forespørgsel.

  • hvor : Få de genstande, der overholder betingelserne.

Bag kulisserne udfører den SELECT * FROM posts WHERE title = 'Database & Rails'forespørgsel.

  • rækkefølge : Sorter alle objekter baseret på en kolonne.

Bag kulisserne udfører den SELECT * FROM posts ORDER BY created_at DESCforespørgsel.

Det er alt!

Vi lærte meget her. Jeg håber, I sætter pris på indholdet og lærer mere om, hvordan databaser og rails-modeller fungerer.

Dette er endnu et skridt fremad på min rejse til at lære og mestre Rails og webudvikling. Du kan se dokumentationen for min komplette rejse her på min Renaissance Developer-publikation .

Hvis du vil have et komplet Ruby and Rails-kursus, lære rigtige kodningsfærdigheder og opbygge projekter, prøv One Month Ruby Bootcampog Rails Bootcamp . Vi ses der ☺

Hav det sjovt, og bliv ved med at lære og kode.

Min Twitter & Github. ☺