Associations many-to-many



Documents pareils
Ruby. Avec la collaboration de Leon Breedt, Mike Clark, James Duncan Davidson, Justin Gehtland et Andreas Schwarz

PHP 4 PARTIE : BASE DE DONNEES

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

1 Modélisation d une base de données pour une société de bourse

1 Introduction et installation

COMMUNICATION TECHNIQUE N TCV060 Ed. 01. OmniVista 4760 Nb de pages : 18 Date : URGENTE NON URGENTE TEMPORAIRE DEFINITIVE

Les différents types de relation entre les tables

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Diagramme de classes

sommaire Archives... Archiver votre messagerie... Les notes... Les règles de messagerie... Les calendriers partagés Les listes de diffusions...

DOMAIN NAME SYSTEM. CAILLET Mélanie. Tutoriel sur le DNS. Session Option SISR

Programmation en Java IUT GEII (MC-II1) 1

Manuel du gestionnaire

OCL - Object Constraint Language

LE MODELE CONCEPTUEL DE DONNEES

Utilisation d objets : String et ArrayList

Historisation des données

Manuel Utilisateur Nuabee Backup pour Windows 7/8/8.1

QUICK START RF Monitor 4.3-1

Hibernate vs. le Cloud Computing

Chapitre VI- La validation de la composition.

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Édu-groupe - Version 4.3

PARAGON Disk Wiper. Guide de l utilisateur. Paragon Technology GmbH, System Programmierung. Copyright Paragon Technology GmbH

(Mis à jour : 7 déc. 12)

Algorithmique et programmation : les bases (VBA) Corrigé

Guide Utilisateur Easy Share

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Système de Gestion Informatisée des. Exploitations Agricoles Irriguées avec Contrôle de l Eau

SUPPORT DE COURS ACCESS 2010

Modèle conceptuel : diagramme entité-association

Maîtrise Responsabilité Sécurité Contrôle 1

La mise en œuvre d'une gestion électronique des documents

Génie Logiciel avec Ada. 4 février 2013

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Cours: Les Jointures 1

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Projet Matlab : un logiciel de cryptage

Club informatique Mont-Bruno Séances du 05 octobre et du 24 octobre 2012 Présentateurs : Réjean Côté

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Les solutions alternatives de déploiement d applications «pro»

Recommandations sur les mutualisations ISO ISO & ISO ITIL

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

Comparatif fonctionnel des offre Saas d'igsi Easy CRM, Pro CRM, CRM On Demand

OpenText Content Server v10 Cours (ex 101) L essentiel de la gestion des connaissances

Utiliser SugarCRM v.1.1

Initiation à la Programmation en Logique avec SISCtus Prolog

Club informatique Mont-Bruno Séances du 08 et 20 novembre 2013 Présentateur : Guy Bélanger Co-auteur : Réjean Côté

Microsoft Hosted Exchange 2010 DOCUMENT D EXPLOITATION

Baccalauréat technologique Série : sciences et technologies du management et de la gestion (STMG)

GEST_INSTANCES APPLICATION DE GESTION DES INSTANCES ET REUNIONS EN EPLE ETABLISSEMENT PUBLIC LOCAL D ENSEIGNEMENT

Prise en main rapide utilisateur

Plate-forme de travail collaboratif Agorazimut

Site web de Support : Manuel utilisateur

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

Ingénierie des Modèles. Méta-modélisation

CREER ET ANIMER SON ESPACE DE TRAVAIL COLLABORATIF

PRÉSENTATION DU PROGRAMME. Le cœur à l école. PROGRAMME DE PRÉVENTION DE L ÉCHEC SCOLAIRE ET SOCIAL Volets préscolaire et 1 er cycle du primaire

Université de Bangui. Modélisons en UML

Guide de rapports ADT Sélecte

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Tutoriel - flux de facturation

UML et les Bases de Données

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Sommaire. G. Pujolle, F. Ravat, C. Soulé-Dupuy, G. Zurfluh

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

LOGICIEL KIPICAM : Manuel d installation et d utilisation

Perl Orienté Objet BioPerl There is more than one way to do it

Définition des Webservices Ordre de paiement par . Version 1.0

1. Base de données SQLite

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Créer un site Internet dynamique

OUTLOOK GÉRER EFFICACEMENT SON BUSINESS D INGÉNIERIE OU DE CONSEIL AVEC OUTLOOK

Modélisation des données

et Active Directory Ajout, modification et suppression de comptes, extraction d adresses pour les listes de diffusion

< Atelier 1 /> Démarrer une application web

Ouvrir le compte UQÀM

FlashWizard v4.5b PRO

QCM Corrigé. Damien Palacio 1/5

PROGRAMME PROVISOIRE. Degré 9 (1CO)

Corrigé des exercices sur les références

Stockez et organisez vos données sous Excel. Une approche systématique, structurée et simplifiée

WINDOWS SHAREPOINT SERVICES 2007

Aide - mémoire gnuplot 4.0

TD3: tableaux avancées, première classe et chaînes

COMMENT VENDRE SUR GOOGLE SHOPPING?

Guide des procédures. - Version mars GUIDE DES PROCÉDURES 30 mars

Fédération de compte entre Votre compte Association (VCA) et l application de dépôt des comptes annuels des associations

Les chaînes de caractères

Manuel. Administration P.CONSEIL. 12 avril Statut :

Présentation du langage et premières fonctions

Utilisation de SugarCRM Version Professional 5.2

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Le langage SQL Rappels

Tessi Documents Services ASPONE. Démo Webservices UpValue.

Sauvegarder sa messagerie Gmail

Transcription:

Associations many-to-many Construction standard: Pour relier deux classes Alpha et Beta On indique l association dans les modèles de Alpha et Beta: app/model/alpha.rb: has_and_belong_to_many :beta app/model/beta.rb: has_and_belong_to_many :alpha On crée un modèle Alphas_Betas: Code: $ rails generate model alphas_betas alpha_id:integer beta_id:integer On enlève la clef primaire de ce modèle: db/migrate/*_create_alphas_betas.rb: create_table :alphas_betas, :id => false do t

Fonctionnalités But des associations On cherche à établir des raccourcis Avec le même modèle mais sans habtm, on peut écrire AlphaBeta.find_by_alpha_id(alphaobj.id).each do b_id b = Beta.find(b_id)... Avec habtm, on peut écrire: alphaobj.betas.each do b...

Intégrité de la table alphas_betas has_and_belong_to_many (habtm) dans les deux classes La table qui joint Alpha et Beta est automatiquement mise à jour Si habtm est déclaré dans la classe Alpha et qu un objet de cette classe est détruit, toutes les associations de cet objet sont automatiquement détruites dans alphas_betas Mais si on détruit un objet de la classe Beta, les associations ne sont pas détruites Pour quelles le soient, on ajoute habtm dans la classe Beta

Inflexions Pluriel/singulier Rails insiste pour utiliser des formes plurielles et singulier pour nommer les tables suivant le contexte cf. par moments AlphaBeta, ou alphas_betas,... On veut parfois nommer les associations autrement: hierarchy, depance Il faut alors indiquer à Rails qu il ne faut pas mettre de pluriel: config/initializers/inflections.rb: ActiveSupport::Inflector.inflections do inflect inflect.irregular hierarchy, hierarchy inflect.irregular beta, betas

Utilisation d une table join particulière Pour améliorer la lisibilité du programme on peut vouloir un autre nom que celui utiliser par défaut par Rails (ex: AlphasBetas) Dans ce cas, il faut préciser ce nom dans le habtm: app/models/alpha.rb: has_and_belongs_to_many :betas, :join_table => hierarchy app/models/betas.rb: has_and_belongs_to_many :alphas, :join_table => hierarchy Après la création de la table join: Code: $ rails generate model hierarchy alpha_id:integer beta_id:integer il faudra modifier le fichier généré si les inflexions n ont pas été écrites avant

Associations réflexives Cas Alpha=Beta Difficultées il faut changer le nom d un des attributs de la table join (car les deux clefs primaires sont les mêmes) Dans la classe Alpha, il on ne peut avoir qu une association passant par Hierarchy On a vu qu on avait besoin de deux associations pour pouvoir assurer l intégrité de la table join On va maintenant assurer l intégrité à la main en écrivant des fonctions appelées lors de la suppression d un élément de Alpha

Changement du nom des attributs Au lieu d utiliser une méthode betas (ou alphas) pour trouver les objets associés, on nomme la méthode assoc On précise que la classe d arrivée est Alpha Enfin, on nomme les deux clefs étrangères de la table hierarchy app/model/alpha.rb: class Alpha < ActiveRecord::Base has_and_belongs_to_many :assoc, #nom de la méthode de Alpha :class_name => Alpha, # Classe d arrivée de :assoc :join_table => hierarchy, :foreign_key => alpha_id, :association_foreign_key => association_id Cette déclaration correspond à une construction: Code: $ rails generate model hierarchy alpha_id:integer association_id:integer

Intégrité de la table join L option after_add permet de spécifier une méthode qui sera appellée lorsqu une association est ajoutée à un objet o o est le self de cette méthode, et a (le paramètre de la fonction) est l objet associé à o Si on associe a à o, alors on associe aussi (a.assoc «o) o à a Idem lorsqu on enlève une association app/model/alpha.rb: class Alpha < ActiveRecord::Base has_and_belongs_to_many :assoc, #nom de la méthode de Alpha :class_name => Alpha, # Classe d arrivée de :assoc :join_table => hierarchy, :foreign_key => alpha_id, :association_foreign_key => association_id, :after_add => :create_reverse_association, :after_remove => :remove_reverse_association def create_reverse_association(a) a.assoc << self unless a.assoc.include?(self) def remove_reverse_association(a) a.assoc.delete(self) if a.assoc.include?(self)

Quelques remarques Limitations de habtm: La table utilisée pour le join dans une association habtm n a pas de clef primaire Elle ne peut pas avoir d attributs en plus des clefs étrangères On n utilise jamais directement la table join On ne peut faire de join qu entre deux tables has_many :through On crée plusieurs associations has_many On utilise :through pour indiquer la transitivité L association peut avoir des attributs On peut instancier des objets de l association

Création de plusieurs associations Les modèles Alpha et Beta sont associés à travers un modèle Assoc: app/models/alpha.rb: class Alpha < ActiveRecord::Base has_many :assocs app/models/assoc.rb: class Assoc < ActiveRecord::Base belongs_to :alpha belongs_to :beta app/models/beta.rb: class Beta < ActiveRecord::Base has_many :assocs Il est compliqué d obtenir tous les objets de Beta associés à un objet de Alpha car a.assocs est un tableau d objets de la classe Assoc On utilise :through pour obtenir immédiatement le tableau des objets de Beta associés à a

Utilisation de :through Les modèles Alpha et Beta sont associés à travers un modèle Assoc: app/models/alpha.rb: class Alpha < ActiveRecord::Base has_many :assocs has_many :betas, :through => :assocs Génération de l association: Code: app/models/assoc.rb: class Assoc < ActiveRecord::Base belongs_to :alpha belongs_to :beta $ rails generate model Assoc alpha_id:integer beta_id:integer app/models/beta.rb: class Beta < ActiveRecord::Base has_many :assocs has_many :alphas, :through => :assocs