Разбиране на основите на Ruby on Rails: SQL бази данни и как те работят

След като научихме за Ruby, първата стъпка, която направихме, беше да разберем как работят мрежата и Ruby on Rails цикъл на заявка-отговор.

Сега е време да научите за базите данни и как те се свързват с Ruby on Rails. По принцип отговорът е Модел: Mот MVC, както научихме тук.

Преди да науча уеб разработка с Rails, наистина препоръчвам първо да научите за Ruby .

Нека да започнем!

Какво представлява базата данни?

Хммм ... Първата мисъл, която ми идва на ум, е нещо, което съхранява данни.

Но това определение е доста неточно! Масив, хеш, свързан списък или всякаква структура от данни може да бъде нещо, което може да съхранява данни.

Когато изключите компютъра, губите всички стойности на данните, които са били съхранени в този масив (същите като всички структури от данни). Така че не е добра идея да съхранявате всичките си precious data.

Тук трябва да решим два проблема:

  1. Съхранявайте данни и ги получавайте по всяко време, когато пожелаем.
  2. Съхранявайте данните по организиран и структуриран начин, за да можем лесно да ги получим.

Трябва ли да съхранявам всички данни в бележник? Просто поставете цялата информация в нея, разделена със запетаи, запазете txt fileи готово. Сега мога да го отворя и да получа всички данни, които искам. Можем да съхраняваме данни и да ги получаваме по всяко време ... проблемът е решен!

Решихме този проблем, но пропуснахме другия. Сега всички данни се съхраняват и няма да ги загубим. Но това не е добре структурирано във файла. Имаме нужда от правилото, за да съхраняваме и получаваме данни в организирана и добре структурирана форма.

Нека помислим как можем да организираме данните по добре структуриран начин.

Какво ще кажете за организиране на всички данни в таблици?

И така, тук имаме: заглавката на таблицата ( име на колони: Име, Фамилия, Адрес и т.н. ), съдържаща стойности, които ще съхраняваме. Например, ако искаме да съхраним низа “Mickey” (стойността) , той ще се съхранява в колоната “First Name” .

  • Таблица : да речем Хора
  • Колони : собствено име , Фамилия , Адрес , и т.н.
  • Редове : в този случай можем да кажем, че ред може да бъде човек с например име „ Мики “ и фамилия „ Мишка “, адрес „123 Fantasy Way “ и т.н.
  • Полета : всички данни, съхранявани в базата данни.

И сега имаме добре структуриран начин за съхраняване на данни : в таблица!

Какво ще кажете за получаване, изтриване, вмъкване и актуализиране на данни?

Ще използваме SQL език ( няма да споменавам света NoSQL! ), За да манипулираме данните. Нека вземем основите.

  1. ВЗЕМЕТЕ: ако искаме да получим всички данни ( човек ) от таблицата Хора , трябва да ги изберем от тази таблица.

Символът ( *) означава, че ще избере всички колони от таблицата Хора . Ако можем да получим всички колони, можем да посочим кои колони са ни необходими за този избор.

2. ИЗТРИВАНЕ: искаме да изтрием всички данни от нашата таблица Хора .

Но не е обичайно изтриването на всички данни от таблица. Обикновено използваме условие за изтриване, като „Искам да изтрия всички хора под 21-годишна възраст“. Ще научим как по-късно в тази публикация!

3. INSERT: ще вмъкнем / съхраним данни в таблицата.

или можем да посочим в кои колони искаме да вмъкнем данни.

4. АКТУАЛИЗАЦИЯ: съхранихме данните, но искаме да ги актуализираме.

Използване на условия в нашите запитвания

Сега можем да използваме SQL език за заявка (избор, изтриване, вмъкване, актуализиране) на данни.

  • Но какво, ако искаме да изтрием само записи с фамилното име Киношита ?
  • Или ако искаме да актуализираме конкретно лице с име Леандро и фамилия Киношита ?
  • Или просто изберете всички данни от таблицата с хора и ги сортирайте по възраст от по-млади на по-големи?

Да, използваме условия като къде и как да поръчаме, а оператори като или и и . Нека да видим няколко примера:

  • Изтриване на всички записи от таблицата с хора с фамилно име Киношита .
  • Актуализиране на всички записи от таблицата с хора с име Леандро и фамилия Киношита .
  • Избиране на всички записи от таблицата с хора, но подреждането им по възраст (във възходящ ред → ASC).

Връзка между таблици

Ние знаем как да изпълняваме заявки (със или без условия). Нека разберем как работят взаимоотношенията на таблиците.

  • Едно към едно (1–1) : става дума за връзка между две таблици, в която едната може да принадлежи само на другата. например човек има един паспорт и този паспорт принадлежи на това конкретно лице. Така че в този пример имаме таблица Хора, Таблици за паспорти и връзка 1–1.
  • Един към много (1-n) : става дума за връзка между две таблици, в която запис от една таблица може да препраща към много записи от друга. например Представете си платформа за електронна търговия: потребители, поръчки, продукти, плащания и др. Потребителят може да има много поръчки и всяка поръчка принадлежи на конкретния потребител. Така че в този пример имаме таблица Потребители, Поръчки на таблици и 1-n връзка.
  • Много към много (nn) : става дума за връзка между две таблици, в която запис от една таблица може да препраща към много записи от друга. И запис от друг може също да препраща към много записи от този. напр. Имаме отново платформата за електронна търговия: ние разделяме продуктите по категории. Категорията има много продукти (категорията Технология има много продукти като мобилни телефони, преносими компютри и т.н.) и продукт може да принадлежи към много категории (продукт Мобилен телефон принадлежи към категориите Технологии и електроника). Така че в този пример имаме таблица Продукти, Категории таблици и връзка nn.

Включен режим на релси

Сега разбираме значението на базите данни, опитахме някои основни заявки и говорихме за връзката между таблиците. Но как можем да използваме тези знания в Ruby on Rails и в уеб разработката ?

На първо място: Rails е Rails . Базата данни е база данни . Очевидно ли е? Но хората обикновено се объркват за това.

А Потребителят модел може да представлява Потребители маса. Но моделът не е масата.

  • В базата данни имаме таблици и редове.
  • На релсите имаме модели (класове) и обекти.

Представете си сайт за блог. Блогът се нуждае от автор за всяка публикация. Така че ние създаваме таблица Authors с някои колони (first_name, last_name и т.н.):

В миграцията, ние добавяме колони 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 в таблицата Posts ). Известно е като Foreign Key.

И как да свържем моделите?

has_manyпубликации на автора

публикация принадлежи_ на автор

Използване на конзолата Rails

* Бързо обяснение за has_manyи belongs_to. И двата codesметода са дефинирани за ActiveRecordклас. Можете да видите, че ние създаваме нашите модели, наследяващи от ActiveRecord::Base.

Спомняте ли си в статията ми за Ruby Foundation, че научихме за обектно-ориентираното програмиране, частта за наследяване? Ето защо можем да използваме has_manyи belongs_toметоди, без да ги дефинираме никъде в нашето приложение. Rails се справя с нас.

Ако искате да разберете дълбоко тази концепция, клонирайте репото на Rails или проверете зад кулисите на асоциацията за активни записи „Има много“.

Заявки за релси

Можем да правим заявки, използвайки методите на ActiveRecord:

  • всички : Вземете всички обекти от определен модел.

Зад кулисите тя изпълнява SELECT * FROM postsзаявката.

  • find : Използвайки find, можем да получим обекта по id (първичен ключ).

Зад кулисите тя изпълнява SELECT * FROM posts WHERE id = 1заявка.

  • къде : Вземете обектите, които преминават условията.

Зад кулисите тя изпълнява SELECT * FROM posts WHERE title = 'Database & Rails'заявка.

  • ред : Сортиране на всички обекти въз основа на колона.

Зад кулисите тя изпълнява SELECT * FROM posts ORDER BY created_at DESCзаявка.

Това е всичко!

Тук научихме много. Надявам се вие ​​да оцените съдържанието и да научите повече за това как работят базите данни и моделите Rails.

Това е още една стъпка напред в моето пътуване към обучение и овладяване на Rails и уеб разработка. Можете да видите документацията за пълното ми пътуване тук в моята публикация на Renaissance Developer .

Ако искате пълен курс по Ruby and Rails, научете реални умения за кодиране и изграждайте проекти, опитайте One Month Ruby Bootcampи Rails Bootcamp . Ще се видим там ☺

Забавлявайте се и продължете да учите и кодирате.

Моят Twitter & Github. ☺