Razumijevanje osnova Ruby on Rails: SQL baze podataka i njihov rad

Nakon što smo naučili o Ruby, prvi korak koji smo poduzeli bilo je shvatiti kako funkcioniraju web i ciklus zahtjeva i odgovora Ruby on Rails.

Sada je vrijeme da naučimo o bazama podataka i kako se povezuju s Ruby on Rails. U osnovi, odgovor je Model: the Mfrom MVC, kao što smo ovdje naučili.

Prije nego što naučim web razvoj s Railsom, stvarno preporučujem da prvo naučim o Ruby .

Započnimo!

Što je baza podataka?

Hmmm ... Prva misao koja mi padne na pamet nešto je što pohranjuje podatke.

Ali ova je definicija prilično neprecizna! Niz, hash, povezani popis ili bilo koja struktura podataka može biti nešto što može pohraniti podatke.

Kad isključite računalo, gubite sve vrijednosti podataka pohranjene u tom nizu (iste kao i sve podatkovne strukture). Stoga nije dobra ideja pohraniti sve svoje precious data.

Ovdje moramo riješiti dva problema:

  1. Pohranite podatke i pribavite ih kad god poželimo.
  2. Pohranite podatke organizirano i strukturirano, tako da ih možemo lako dobiti.

Trebam li pohraniti sve podatke u bilježnicu? Samo unutar njega stavite sve podatke odvojene zarezima, spremite txt filei gotovo. Sada ga mogu otvoriti i dobiti sve podatke koje želim. Podatke možemo pohraniti i dobiti u bilo kojem trenutku ... problem riješen!

Riješili smo ovaj problem, ali smo propustili drugi. Sada su svi podaci pohranjeni i nećemo ih izgubiti. Ali to nije dobro strukturirano u datoteci. Pravilo nam je potrebno za pohranu i dobivanje podataka u organiziranom i dobro strukturiranom obliku.

Razmislimo o tome kako možemo organizirati podatke na dobro strukturiran način.

Što je s organiziranjem svih podataka u tablice?

Dakle, evo nas: zaglavlje tablice ( naziv stupca: Ime, Prezime, Adresa itd. ) Sadrži vrijednosti koje ćemo pohraniti. Na primjer, ako želimo pohraniti niz "Mickey" (vrijednost) , on će biti pohranjen u stupac "Ime" .

  • Tablica : recimo Ljudi
  • Stupci : Ime , Prezime , Adresa itd
  • Redovi : u ovom slučaju možemo reći da red može biti osoba s, na primjer, imenom " Mickey " i prezimenom " Mouse ", adresom "123 Fantasy Way " itd.
  • Polja : svi podaci pohranjeni u bazi podataka.

A sada imamo dobro strukturiran način za pohranu podataka : u tablicu!

Što kažete na to da preuzmete, izbrišete, umetnete i ažurirate podatke?

Upotrijebit ćemo SQL jezik ( neću spominjati NoSQL svijet! ) Za manipulaciju podacima. Upoznajmo osnove.

  1. GET: ako želimo dobiti sve podatke ( osobu ) iz tablice People , moramo ih odabrati iz te tablice.

Simbol ( *) znači da će odabrati sve stupce iz tablice Osobe . Ako možemo dobiti sve stupce, možemo odrediti koje stupce trebamo za ovaj odabir.

2. IZBRIŠI: želimo izbrisati sve podatke iz naše tablice Ljudi .

Ali nije uobičajeno brisanje svih podataka iz tablice. Obično koristimo uvjet za brisanje, poput "Želim izbrisati sve osobe mlađe od 21 godine." Kako ćemo saznati kasnije u ovom postu!

3. INSERT: umetnut ćemo / pohraniti podatke u tablicu.

ili možemo odrediti u koje stupce želimo umetnuti podatke.

4. AŽURIRANJE: pohranili smo podatke, ali ih želimo ažurirati.

Korištenje uvjeta u našim upitima

Sada možemo koristiti SQL jezik za traženje (odabir, brisanje, umetanje, ažuriranje) podataka.

  • Ali što ako želimo izbrisati samo zapise s prezimenom Kinoshita ?
  • Ili ako želimo ažurirati određenu osobu s imenom Leandro i prezimenom Kinoshita ?
  • Ili jednostavno odaberite sve podatke iz tablice ljudi i razvrstajte ih prema dobi od mlađeg do starijeg?

Da, koristimo uvjete kao što su gdje se i kako bi tako, i operaterima kao i i i . Pogledajmo nekoliko primjera:

  • Brisanje svih zapisa iz tablice ljudi s prezimenom Kinoshita .
  • Ažuriranje svih zapisa iz tablice ljudi s imenom Leandro i prezimenom Kinoshita .
  • Odabir svih zapisa iz tablice ljudi, ali poredak prema dobi (u rastućem redoslijedu → ASC).

Odnos između tablica

Znamo izvršavati upite (sa ili bez uvjeta). Razumijemo kako funkcioniraju odnosi tablica.

  • Jedan prema jedan (1–1) : radi se o odnosu dviju tablica u kojem jedna može pripadati samo drugoj. npr . Osoba ima jednu putovnicu i ta putovnica pripada toj određenoj osobi. Dakle, u ovom primjeru imamo tablicu Ljudi, tablicu putovnica i odnos 1–1.
  • Jedan prema mnogima (1-n) : riječ je o odnosu dviju tablica u kojem se zapis iz jedne tablice može pozivati ​​na mnoge zapise iz druge. npr. Zamislite platformu e-trgovine: korisnici, narudžbe, proizvodi, plaćanja itd. Korisnik može imati mnogo narudžbi, a svaka narudžba pripada tom određenom korisniku. Dakle, u ovom primjeru imamo tablicu Korisnici, Nalozi tablica i odnos 1-n.
  • Many to Many (nn) : radi se o odnosu između dvije tablice u kojem se zapis iz jedne tablice može pozivati ​​na mnoge zapise iz druge. A zapis drugog može također upućivati ​​na mnoge zapise jednog. npr. Opet imamo platformu za e-trgovinu: proizvode dijelimo u kategorije. Kategorija ima mnogo proizvoda (kategorija Tehnologija ima mnogo proizvoda poput mobitela, prijenosnih računala itd.), A proizvod može pripadati mnogim kategorijama (proizvod Cellphone pripada kategorijama tehnologije i elektronike). Dakle, u ovom primjeru imamo tablične proizvode, kategorije tablice i odnos nn.

Način tračnica UKLJUČEN

Sada razumijemo značenje baza podataka, isprobali smo neke osnovne upite i razgovarali o odnosu između tablica. Ali kako to znanje možemo koristiti u Ruby on Rails i svijetu web razvoja ?

Prije svega: Rails je Rails . Baza podataka je baza podataka . Je li očito? Ali ljudi se oko toga obično zbune.

Korisnik modela može predstavljati korisnici stol. Ali model nije stol.

  • U bazi podataka imamo tablice i retke.
  • Na tračnicama imamo modele (klase) i predmete.

Zamislite stranicu na blogu. Za svaki post blog treba autora. Tako kreiramo tablicu Autori s nekoliko stupaca (ime, prezime itd.):

U migracije, dodamo stupce first_name, last_name, email, birthday, created_at, i updated_at. ( created_ata updated_atkreira ih t.timestampskod).

Tako smo stvorili migracije (Ruby kod), pokrenite rake db:migratenaredbu u terminal, a to stvara tablicu Authorss first_name, last_name, email, birthday, created_at, i updated_atstupaca.

Povratak na tračnice - možemo stvoriti Authormodel:

Tako sada imamo Authorstablicu s nekoliko stupaca i Authormodel.

Korištenje konzole Rails

Otvorite terminal i upišite bundle exec rails c. Zapamtite, nalazimo se u RAILS konzoli, tako da imamo klase, objekte, atribute itd.

Odnosi na tračnicama

Stvorili smo Authorstablicu / model. Ono što nam sada treba je Poststablica / model. Autor ima mnogo postova, a post pripada određenom autoru. Ovdje je odnos jedan prema mnogima ( 1-n ). Zapamtiti?

Dakle, kada kreiramo Poststablicu, trebamo pohraniti referencu na autora posta (stupac author_id u tablici Posts ). Poznat je kao Foreign Key.

I kako možemo povezati modele?

autorski has_manypostovi

post pripada_autoru

Korištenje konzole Rails

* Brzo objašnjenje o has_manyi belongs_to. Obje codessu metode definirane na ActiveRecordklasi. Možete vidjeti da svoje modele stvaramo nasljeđujući od ActiveRecord::Base.

Sjećate li se u mom članku o Ruby Foundationu da smo saznali o objektno orijentiranom programiranju, dijelu nasljeđivanja? Zbog toga možemo koristiti metode has_manyi belongs_tometode bez da ih definiramo bilo gdje u našoj aplikaciji. Tračnice to rješavaju umjesto nas.

Ako želite duboko razumjeti ovaj koncept, klonirajte repos Rails ili provjerite iza kulisa udruge Active Has 'Has Many'.

Upiti o tračnicama

Možemo postavljati upite pomoću metoda ActiveRecord:

  • svi : Nabavite sve objekte iz određenog modela.

Iza kulisa izvršava SELECT * FROM postsupit.

  • pronađi : Korištenjem nalaza objekt možemo dobiti pomoću id-a (primarni ključ).

Iza kulisa izvršava SELECT * FROM posts WHERE id = 1upit.

  • gdje : Nabavite predmete koji zadovoljavaju uvjete.

Iza kulisa izvršava SELECT * FROM posts WHERE title = 'Database & Rails'upit.

  • redoslijed : Poredaj sve objekte na temelju stupca.

Iza kulisa izvršava SELECT * FROM posts ORDER BY created_at DESCupit.

To je sve!

Ovdje smo puno naučili. Nadam se da ćete cijeniti sadržaj i naučiti više o tome kako rade baze podataka i šine.

Ovo je još jedan korak naprijed na mom putu ka učenju i svladavanju Railsa i web razvoja. Dokumentaciju mog cijelog putovanja možete pogledati ovdje u mojoj publikaciji Renaissance Developer .

Ako želite cjeloviti tečaj za Ruby and Rails, naučite stvarne vještine kodiranja i gradite projekte, isprobajte Jednomjesečni Ruby Bootcampi Rails Bootcamp . Vidimo se tamo ☺

Zabavite se i nastavite učiti i kodirati.

Moj Twitter i Github. ☺