Webinar: Modèle de données, relations et SOQL29 avril 2014
Dalil DjidelArchitecte technique@djideldalil
Safe HarborDéclaration conforme à la directive « Safe Harbor » contenue dans la loi américaine intitulée « Private Securities Litigation Reform Act » de 1995 : Cette présentation est susceptible de comporter des déclarations conditionnelles, qui impliquent nécessairement une certaine prise de risque, des incertitudes et des hypothèses. Si l'une de ces incertitudes se concrétise ou si certaines hypothèses se révèlent incorrectes, les résultats de salesforce.com, Inc. pourraient être sensiblement différents de ceux explicitement ou implicitement avancés par nos déclarations conditionnelles. Toutes les déclarations ne portant pas sur des faits historiques peuvent être considérées comme conditionnelles, y compris les projections de disponibilité des produits ou des services, d'augmentation du nombre d'abonnés, de bénéfices, de chiffre d'affaires ou autre valeur financière, toute déclaration concernant les stratégies ou les plans de gestion des opérations à venir, toute opinion personnelle, toute déclaration concernant les services ou les développements technologiques nouveaux, planifiés ou mis à niveau, ainsi que les contrats clients et l'utilisation de nos services. Les incertitudes et les risques susmentionnés concernent, sans s'y limiter, les risques associés au développement et à la fourniture de nouvelles fonctionnalités pour notre service, aux nouveaux produits et services, à notre nouveau modèle commercial, nos pertes d'exploitation antérieures, les éventuelles fluctuations de nos résultats d'exploitation et de notre taux de croissance, les interruptions ou les retards de notre système d'hébergement, les failles des mesures de sécurité, l'issue des litiges, les risques associés aux fusions et acquisitions réelles et éventuelles, la jeunesse du marché dans lequel nous évoluons, notre historique relativement limité, notre capacité à développer, fidéliser et motiver notre personnel et à gérer notre croissance, les nouvelles éditions de notre service, ainsi que le déploiement réussi chez les clients, notre expérience limitée en matière de revente de produits tiers, et l'utilisation et les ventes à de grands comptes. Vous trouverez plus d'informations sur les facteurs pouvant influencer les résultats financiers de salesforce.com, Inc. dans notre rapport annuel (formulaire 10-K) pour l'exercice fiscal le plus récent et dans notre rapport trimestriel (formulaire 10-Q) pour le trimestre fiscal le plus récent. Ce rapport et d'autres documents contenant d'importantes informations sont accessibles sur notre site web dans la partie Informations Investisseurs, section Documents pour la Commission des opérations de bourse (SEC). Certains services ou fonctions qui ne sont pas encore commercialisés et sont mentionnés ici ou dans d'autres présentations, communiqués de presse ou déclarations publiques, ne sont pas encore disponibles et ne seront peut-être pas livrés à temps, voire pas livrés du tout. Les clients qui achètent nos services doivent prendre leur décision sur la base des fonctions actuellement disponibles. Salesforce.com, Inc. n'est pas tenu et n'a pas l'intention de mettre à jour ces déclarations conditionnelles.
Agenda
Modèle de données & relationsComparaison de Force.com avec un SGBDR
Types de relations & jointures pré-définies
Relations & SOQLSOQL vs SQL
Requêtes sur les relations
Pré-requis
Connaissance de base de la plateforme Force.com :– Création d’objets
– Ajout de champs
– Navigation dans l’interface utilisateur
Connaissance des concepts des bases de données relationnelles– Tables
– Clés primaires / étrangères
– Jointures
Modèle de données et relations
Relations & SOQL
Agenda
Modèle de données sous Force.com
sObject: – Structure similaire à
une table• Enregistrements
• Champs
– Extensible
– Requêtable / Modifiable
– Relations
Fonctions natives:– IHM
– Sécurité• CRUD
• Granularité champs
• Enregistrement (Access Control List)
– APIs REST & SOAP
Modèle de données standard
Objets standard– Compte
– Contact
– Piste
– Opportunité
– Demande
– …
Champs standard– Id
– Nom
– Créé par/Date
– Modifié par/Date
– Id propriétaire
– …
Modèle extensible
Objets personnalisés– Facture__c
– Livraison__c
– …
Champs personnalisés– Statut__c
– Type__c
– Heure_Debut__c
– Heure_Fin__c
– …
Relations : Jointure pré-définie
SGBDR– Jointure à
l’exécution en SQL ou dans une vue
Force.com– Jointure pré-
définie à la conception
– Similaire à une contrainte d’intégrité
Principal - DétailRéférence
Types de relations
NonOptionnel
CascadeEffacer/Bloquer/
Cascade
Nul
Suppression
Hérité du parentIndépendant du parent
225
Partage
Champs maxi
Démo
Modèle de données et relations
Relations & SOQL
Agenda
SOQL
Salesforce Object Query Language
Syntaxe similaire au SQL
Requête les objets Force.com
Utilisé :– En Apex
– Dans les outils de développement (Console, Eclipse, Workbench, …)
– API (REST, SOAP, Bulk, …)
De SQL à SOQL
Semblent proches
Différences importantes
Apprenez les différences
Utilisez de bonnes pratiques de conception
De SQL à SOQL : Les similarités
Structure tabulaire
Syntaxe des requêtes similaire
Index
Transactionnel
Triggers
SELECT Id, Name, Capacity__c FROM Room__c WHERE Capacity__c > 10
De SQL à SOQL : Les différences évidentes
Pas de select *
Pas de Vues
Lecture seule
Index limités
Mapping objet-relationnel automatique
Protection contre les modifications des schémas
De SQL à SOQL : Les autres différences
sObjects ne sont pas des tables physiques –environnement multi-tenant
Les relations sont des métadonnées– Intégrité référentielle
– Jointures pré-définies
– Syntaxe propre aux requêtes sur les relations
Usage monitoré– Limites Batch API
– Governor Limits Apex
Les suffixes __c et __r
Room__c
Workshop__c
Id
Id
Room__c
Room__r
Workshops__r
Type: List<Workshop__c>
Type: Id
Type: Room__c
1-M
Requête sur une relation : Enfant vers parent
SELECT Id, Name, Room__c,Room__r.Id,Room__r.Capacity__c
FROM Workshop__c WHERE Status__c = ’Open’
[ { "Id": "a0145000000aBf4AAE", "Name": "Yoga for Beginners", "Room__c": "a00vn000000dU3dAAE", "Room__r": { "Id": "a00vn000000dU3dAAE", "Capacity__c": 10 } }, { "Id": "a0145000000aBf4AAE", "Name": "Yoga for Beginners", "Room__c": "", "Room__r": "" }, ...]
Requête sur une relation : Parent vers enfant
SELECT Id, Name, (SELECT Id, Status__c FROM Workshops__r) FROM Room__c WHERE Capacity__c > 10
[ { "Id": "a00vn000000dU3dAAE", "Name": "Salon 1 West", "Workshops__r": [ { "Id": "a0145000000aBf4AAE", "Status__c": "Open" }, { "Id": "a0145000000aBd4AAE", "Status__c": "Full" } ] }, ...]
Champ de la relation dans le prédicat
Select Id, Name, Room__r.Name, Room__r.Capacity__c FROM Workshop__c WHERE Room__r.Capacity__c > 8
[ { "Id": "a0145000000aBf4AAE", "Name": "Yoga for Beginners", "Room__c": "a00vn000000dU3dAAE", "Room__r": { "Id": "a00vn000000dU3dAAE", "Capacity__c": 10 } }, {...}, ...]
Agrégat
SELECT COUNT(Id) rmCount, MAX(Capacity__c) maxRmCap, Configuration__c FROM Room__c GROUP BY Configuration__c
[ { "rmCount": 4, "maxRmCap": 6, "Configuration__c": "Classroom" }, { "rmCount": 2, "maxRmCap": 10, "Configuration__c": "Theatre" }, ...]
Démo
En résumé
Modèle de données & relations– Nombreuses similarités
– Quelques différences importantes
– Jointures pré-définies
– Deux types de relations
Relations & SOQL– SOQL gère les relations
mais n’est pas “relationnel”
– Les limites ne peuvent être ignorées
– Les bonnes pratiques de conception s’appliquent toujours mais peuvent être revues
Lectures complémentaires
Article: De SQL à SOQL http://bit.ly/sql2soql
Guide SOQL-SOSL http://bit.ly/soqlsosl
Architecture partagée http://bit.ly/sharingarch
Limites http://bit.ly/apexgovlim
Architecture Multi-Tenant http://bit.ly/sfmultiten
Prochain webinar:20 Mai : Introduction au développement d’applications mobiles avec la plateforme Salesforce1 sans code