Forked from oliviergodement/Quizz 3 - SQL et Active Record
Created
April 30, 2014 19:15
-
-
Save Sbfrr/60cad7356ba6757d04ca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Quizz 3 - SQL et Active Record | |
| _ _______ _______ _________ _______ _______ ______ | |
| ( \ ( ____ \ ( ___ )|\ /|\__ __// ___ )/ ___ ) / ___ \ | |
| | ( | ( \/ | ( ) || ) ( | ) ( \/ ) |\/ ) | \/ \ \ | |
| | | | (__ | | | || | | | | | / ) / ) ___) / | |
| | | | __) | | | || | | | | | / / / / (___ ( | |
| | | | ( | | /\| || | | | | | / / / / ) \ | |
| | (____/\| (____/\ | (_\ \ || (___) |___) (___ / (_/\ / (_/\ /\___/ / | |
| (_______/(_______/ (____\/_)(_______)\_______/(_______/(_______/ \______/ | |
| ______ | |
| .-"""".._'. _,## | |
| _..__ |.-"""-.| | _,##'`-._ | |
| (_____)||_____|| |_,##'`-._,##'` | |
| _| |.;-""-. | |#'`-._,##'` | |
| _.;_ `--' `\ \ |.'`\._,##'` | |
| /.-.\ `\ |.-";.`_, |##'` | |
| |\__/ | _..;__ |'-' / | |
| '.____.'_.-`)\--' /'-'` | |
| //||\\(_.-'_,'-'` | |
| (`-...-')_,##'` | |
| _,##`-..,-;##` | |
| _,##'`-._,##'` | |
| _,##'`-._,##'` | |
| `-._,##'` | |
| ----- | |
| 1. Une BDD relationnelle est un ensemble de tables où les relations entre tables se font avec des clés étrangères qui mappent vers des clés primaires d'autres tables. | |
| ----- | |
| 2. Les différents types de relation : | |
| - one_to_one | |
| - one_to_many | |
| - many_to_many | |
| ----- | |
| 3.1 | |
| Deux tables : "authors" et "books" (écrites en minuscules et au pluriel pour que ça fonctionne bien avec Active Record) | |
| Relation : authors one_to_many books | |
| Schéma des tables : | |
| authors ==> id, name | |
| books ==> id, title, year, author_id | |
| 3.2 | |
| Clés primaires : les "id" des deux tables | |
| Clé étrangère : "author_id" dans la table "books" | |
| Le mapping entre les deux tables se fait avec la clé étrangère "author_id". | |
| ----- | |
| 4. | |
| Schéma des tables : | |
| books ==> id, title, year, author_id | |
| authors ==> id, name | |
| users ==> id, email | |
| readings ==> id, date, book_id, user_id : c'est la table de jointure. | |
| Relations entre tables : | |
| - users many_to_many books : puisque c'est une relation many_to_many, il faudra une table de jointure pour stocker tous les couples | |
| ----- | |
| 5.1 Le langage SQL permet d'interroger une BDD. | |
| 5.2 Requête simple pour trouver les livres écrits avant 1985 : | |
| SELECT * FROM books WHERE 'year < 1985' | |
| 5.3 Requête jointe pour trouver les 3 derniers livres de Jules Verne : | |
| SELECT title FROM books | |
| INNER JOIN authors | |
| ON authors.id = books.author_id | |
| WHERE authors.name = 'Jules Verne' | |
| ORDER BY books.year DESC | |
| LIMIT 3 | |
| ----- | |
| 6.1 Une migration modifie la structure de la BDD (création d'une nouvelle table, modification d'une table en ajoutant/supprimant une colonne). Elle modifie le schéma de la table sans avoir besoin de supprimer et recréer les données. | |
| 6.2 On exécute des tâches rake qui effectuent toutes les migrations qui n'ont pas encore été effectuées. C'est pourquoi il faut qu'il y ait un timestamp dans le nom du fichier migrate. | |
| ----- | |
| 7 | |
| Notes sur les migrations : | |
| - la méthode "change" sert à la fois à faire des migrations "up" et "down" | |
| - les relations ("belongs_to", "has_many") se font dans les modèles | |
| - les clés étrangères doivent être présentes dès les migrations | |
| class CreateBooks < ActiveRecord::Migration | |
| def change | |
| create_table :books do |t| | |
| t.string :title | |
| t.integer :year | |
| t.integer :author_id | |
| end | |
| end | |
| end | |
| Même syntaxe pour CreateAuthors et CreateUsers | |
| Table de jointure : | |
| class CreateReadings < ActiveRecord::Migration | |
| def change | |
| create_table :readings do |t| | |
| t.integer :book_id | |
| t.integer :user_id | |
| t.datetime :date | |
| end | |
| end | |
| end | |
| ----- | |
| 8. Pour rajouter une colonne catégorie à la table books : | |
| class AddCategoryToBooks < ActiveRecord::Migration | |
| def change | |
| add_column :books, :category, :string | |
| end | |
| end | |
| ----- | |
| 9. Le mapping entre un modèle Active Record et une table de la BDD repose sur des conventions d'écriture des noms de table et des modèles. | |
| | | |
| BDD | ActiveRecord | |
| | | |
| table books | class Book < ActiveRecord::Base | |
| | end | |
| | | |
| ----- | |
| 10. Il s'agit des basic queries qui permettent de faire du CRUD (Create, Read, Update, Delete) | |
| - Pour ajouter un auteur : Author.create({name:"Kundera"}) | |
| On aurait pu supprimer les accolades car elles sont facultatives lorsque le hash est le dernier paramètre de la méthode : Author.create( name:"Kundera" ) | |
| - Pour chercher tous les auteurs de la BDD : Author.all | |
| - Pour trouver l'auteur à l'id 8 : Author.find(8) | |
| ActiveRecord est smart. Il crée automatiquement des méthodes à partir des colonnes des tables : Author.find_by_id(8) | |
| ----- | |
| 11.1 La brique "validation" permet d'éviter de corrompre notre BDD avec des données incorrectes. Il faut les inclure dans la définition des modèles. Elles peuvent vérifier plusieurs choses : que le format d'un mail est respecté, qu'une valeur est unique. | |
| 11.2 Pour que les noms d'auteur soient uniques, il faut inclure dans le fichier author.rb : | |
| Class Author <ActiveRecord::Base | |
| valides :name, uniqueness: true | |
| end | |
| ----- | |
| 12.1 Il faut faire du mapping avec les méthodes has_many, belongs_to. | |
| 12.2 | |
| class Author < ActiveRecord::Base | |
| has_many :books | |
| end | |
| class Book < ActiveRecords::Base | |
| belongs_to :author | |
| end | |
| ----- | |
| 13. Les associations mettent à notre disposition des méthodes très simples pour effectuer en arrière-plan des requêtes SQL complexes. | |
| manchette = Author.find_by_name("JP Manchette") | |
| Pour trouver les livres dispos de manchette : | |
| manchette.books | |
| Pour ajouter un livre : | |
| manchette.books.create(title: "Le petit bleu", year: 1980) | |
| Pour trouver les bouquins édités avant 1980 | |
| manchette.books.where("year: 1980") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment