Définir une base de données pour notre application Yii
Nous nous retrouvons pour le quatrième épisode de la série Apprendre le Framework Yii, traduction française de l’article de Larry Ullman Defining Databases for the Yii Application, que vous pouvez retrouver sur le site www.LarryUllman.com.
Après avoir vu dans un premier article comment télécharger et installer le framework, créé une application basique dans le deuxième article, puis étudié la configuration de cette application dans un troisième épisode, nous allons voir dans cet article comment concevoir la base de données qui servira de fondations à notre application. Cet application d’exemple est une gestion sommaire d’employés et de services, chaque employé n’appartenant qu’à un service. Cet article suppose que vous disposiez d’une application Yii, que vous aurez probablement créée en suivant les articles précédents.
Le but de cette application est de créer une application Web qui vous permettra de créer, modifier, afficher et supprimer les services et les employés d’une entreprise fictive. Ces quatre opérations sont aussi appelées CRUD : Create (INSERT en SQL), Retrieve[1] (SELECT), Update et Delete. Ces quatre actions constituent la pierre angulaire de tout gestionnaire de contenu, ou d’un quelconque entrepôt de données. Pour créer cette application, il vous faudra créer un ensemble de fichiers pour les employés ainsi que pour les services :
- Un fichier Modèle, qui décrit la chose elle-même[2]
- Un fichier Contrôleur, qui définit les actions qui peuvent être mises en œuvre par cette chose
- Plusieurs fichiers Vue, qui constituent l’interface utilisateur, et qui incluent par exemple les formulaires permettant de créer ou de mettre à jour les éléments
Avec certains frameworks, tout ceci requiert une certaine somme de travail : sélectionner le template, copier, coller, éditer ou créer de nouveaux fichiers, … Avec Yii, comme avec d’autres frameworks tels que Ruby on Rails, l’essentiel du travail est effectuée par vous en préparant correctement votre application et en utilisant les outils inclus dans le framework. Pour commencer, donc, je vais devoir me pencher sur les Modèles, qui seront représentés par des tables de base de données dans cet exemple.
Les deux tables seront assez simples, avec une relation de type ‘un à plusieurs’ entre elles : il y aura plusieurs employés dans un service, mais un seul service par employé. Vous pouvez créer votre table employés comme vous le souhaitez, mais dans le cadre de cette série « Apprendre Yii Framework », elle sera définie comme suit :
CREATE TABLE Employee ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, departmentId TINYINT UNSIGNED NOT NULL COMMENT "CONSTRAINT FOREIGN KEY (departmentId) REFERENCES Department(id)", firstName VARCHAR(20) NOT NULL, lastName VARCHAR(40) NOT NULL, email VARCHAR(60) NOT NULL, ext SMALLINT UNSIGNED NULL, hireDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, leaveDate DATETIME NULL, INDEX name (lastName, firstName), INDEX (departmentId))Dans un article sur le MVC[3], j’ai abordé la question des conventions et le fait qu’il est bon de se tenir aux exigences des règles du framework. Par exemple, j’utilise en principe uniquement des lettres minuscules et des underscores pour les noms de colonnes (comme first_name), mais j’utilise le camelCase ici pour me conformer aux standards de Yii et de la POO[4] (quand nous accèderons aux données d’un employé spécifique, les colonnes seront référencées en utilisant, par exemple, $model->firstName). De même, la clé primaire sera toujours nommée id. La colonne departmentId sera la clé étrangère référençant la table des services (department), pour indiquer à quel service est rattaché un employé. Je traiterai le commentaire un peu plus bas dans cet article. Le champ ext est destiné à représenter l’indicatif téléphonique d’un employé (essentiellement dans le but de montrer l’utilisation de contraintes numériques dans le Modèle). Le champ hireDate est renseigné lorsqu’un enregistrement est inséré dans la base (si aucune date n’est fournie pour ce champ). Notez que j’utilise ici MySQL et que le comportement des timestamps change d’une version à une autre. Il y a également un index sur la colonne name dans le but d’optimiser les tris, ainsi qu’un autre sur le champ departmentId, car il sera utilisé dans le cadre des jointure.
La table department ne contient que deux colonnes. Le premier est la clé primaire et le second le nom du service (avec un index de type unique sur cette colonne).
CREATE TABLE Department ( id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(40), UNIQUE (name))Maintenant, revenons sur le commentaire dans la définition de la table Employee… Yii identifiera les clés étrangères définies et s’aidera de ces informations pour définir le Modèle. Cependant, MySQL ne gère pas toujours le respect des clés étrangères (en fonction de la version de MySQL ainsi que du moteur de base de données utilisé[5]). Vous pourrez indiquer à Yii l’existance de cette contrainte de clé étrangère en commentaire comme celui que nous avons associé à la colonne Employee.departmentId. Ce commentaire précise que la colonne departmentId est une clé étrangère qui référence le champ Id de la table Department. Si vous n’ajoutez pas ce commentaire, ce n’est pas dramatique puisque vous pourrez modifier vous-même le code dans le modèle correspondant à la table. Cependant, il est appréciable de voir que Yii peut le faire pour vous.
Voilà, c’est tout. Vous avez créé deux tables et vous pouvez revenir aux outils de Yii qui vous permettrons de créer les Modèles, les Contrôleurs et les Vues (ce que nous verrons dans le prochain article de cette série). Avant de passer à l’étape suivante, vérifiez la structure de vos tables dans la base de données afin de vérifier qu’elles correspondent bien à ce que vous souhaitez. En effet, Yii génèrera automatiquement du code (Modèles, Vues et Contrôleurs) ; si vous modifiez la structure de la base de données après que Yii aura généré ce code, vous devrez venir modifier manuellement le contenu des fichiers ainsi générés. Faites donc les choses le mieux possible avant cette phase de génération.
Fin de la traduction. Et hop ! Cela fait un article de plus de la très bonne série « Learning the Yii Framework » de Larry Ullman dont je termine la traduction. Nous vous remercions comme d’habitude de l’intérêt que vous portez à ces articles et nous espérons contribuer à la popularité de ce bel outil qu’est Yii.
Je vous rappelle que vous pouvez consulter la version originale en anglais de cet article sur le site de l’auteur.
Chapitre suivant : Créer les Modèles, les Vues et les Contrôleurs dans Yii »
- [1] NDT : le R peut aussi correspondre à Read ↩
- [2] NDT : la « chose » sera donc ici soit l’employé, soit le service ↩
- [3] NDT : Pour l’instant, je n’envisage pas de traduire cet article, mais si cela intéresse quelqu’un, faites-le moi savoir. ↩
- [4] NDT : Programmation Orientée Objet ↩
- [5] NDT : Si vous voulez en savoir davantage à ce sujet, recherchez la différence entre les moteurs MyIsam et InnoDb dans MySQL ↩
2 Comments to “Définir une base de données pour notre application Yii”
Poster un commentaire
Edito
Mémorandom est le blog de 2 développeurs web, Appo et Nico.
Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web
Tutoriels Yii Framework
Nos derniers articles
- Trier la colonne d’un tableau sans prendre en compte la casse et les accents
- Des slides qui ont de la gueule, avec impress.js !
- Limite du nombre de paramètres GET
- Plugin Jquery Tablesorter : Trier sur un numéro de téléphone
- Flightradar24 : Carte du monde des vols d’avions en temps réel
- Joyeux anniversaire ! …
- Mettre à jour Eclipse (Helios -> Indigo)
- Gaggle : Google m’a tuer
- Zend Framework : Aide de vue pour afficher les données issues d’un flux RSS
- Zend Framework : Aide d’action pour télécharger un fichier
- jQuery – récupérer la valeur de border-color
- Connaitre les évènements attribués sur un élément JQuery
- MySQL : Comment effectuer un toggle sur un champ ?
- La fonction PHP extract() ou comment extraire John Butler.
- Tri de tableaux et danse folklorique
Blogs Dev
Liens
- Doc subclipse
- Doc Subversion
- Documentation officielle Ez Publish
- Documentation officielle JQuery
- Documentation officielle PHP


[...] has recently posted the translated versions of two more parts in the series. The fourth part is Defining Databases for the Yii Application. The fifth part is Creating Models, Views, and Controllers in Yii. My thanks again to Nico for the [...]
Génial!! Merci bien