Avant que les joueurs ne puissent explorer ce monde, il faut le structurer. Tempest vous propulse ainsi architecte logiciel en chef pour ce projet et vous confie une première mission : Concevoir et implémenter la base de données relationnelle qui soutiendra la logique du jeu. Cette base devra suivre scrupuleusement les exigences qui vous seront fournies.
La Figure 1 vous présente le diagramme relationnel de la base de données que vous allez construire. Les conventions sont les mêmes que dans le cours, à savoir que les flèches indiquent les contraintes de clefs étrangères. Ces dernières référencent toujours la clef primaire de la relation référencée. Plus spécifiquement, voici les informations propres à chaque relation.
Diagramme du schéma de notre base de données. Les types précis et contraintes d’intégrité sont indiquées dans le texte principal.
Account.
Cette relation représente les comptes utilisateurs du jeu. Un compte permet à un joueur de se connecter au système et de posséder un ou plusieurs personnages.
- account_id (
integer). Identifiant unique du compte. Clé primaire technique utilisée pour référencer le compte. - username (
varchar(32)). Nom d’utilisateur choisi par le joueur. Contrainte not null et unique. - email (
varchar(32)). Adresse courriel associée au compte. Contrainte not null et unique. - created_at (
varchar(32)). Date de création du compte, au formatYYYY-MM-DD HH:MM:SS.SSS). Contrainte not null.
Class.
Cette relation définit les classes jouables disponibles dans le jeu. Chaque personnage appartient obligatoirement à une classe.
- class_id (
integer). Identifiant unique de la classe. Clé primaire. - name (
varchar(32)). Nom de la classe. Contrainte not null et unique. - base_hp (
integer). Points de vie de base accordés par la classe. Contrainte not null, check \((>0)\). - base_attack (
integer). Puissance d’attaque de base. Contrainte not null, check \((>0)\).
Character.
Cette relation représente les personnages créés par les joueurs. Un personnage appartient à un compte et possède une classe.
- character_id (
integer). Identifiant unique du personnage. Clé primaire. - name (
varchar(32)). Nom du personnage dans le monde d’Eldoria. Contrainte not null, unique. - level (
integer). Niveau actuel du personnage. Contrainte not null, check \((\ge 1)\). Contrainte not null, check \((>0)\). - created_at (
varchar(32)). Date de création du personnage, au formatYYYY-MM-DD HH:MM:SS.SSS. Contrainte not null. - account_id (
integer). Référence au compte propriétaire. Contrainte not null, clé étrangère versaccount. - class_id (
integer). Classe du personnage. Contrainte not null, clé étrangère versclass.
Guild.
Cette relation modélise les guildes, regroupements de personnages coopérant dans le jeu.
- guild_id (
integer). Identifiant unique de la guilde. Clé primaire. - name (
varchar(32)). Nom de la guilde. Contrainte not null, unique. - created_at (
varchar(32)). Date de création de la guilde, au formatYYYY-MM-DD HH:MM:SS.SSS. Contrainte not null.
Mob.
Cette relation représente les créatures ennemies (communément appelés mob) rencontrées dans le monde du jeu.
- mob_id (
integer). Identifiant unique du monstre. Clé primaire. - name (
varchar(32)). Nom du monstre. Contrainte not null, unique. - type (
varchar(32)). Catégorie du monstre, parmi les possibilités (common,elite,boss). Contrainte not null, check. - base_hp (
integer). Points de vie de base du monstre. Contrainte not null, check \((>0)\). - base_attack (
integer). Attaque de base du monstre. Contrainte not null, check \((>0)\).
Item.
Cette relation contient les objets pouvant être obtenus par les joueurs (armes, armures, objets divers).
- item_id (
integer). Identifiant unique de l’objet. Clé primaire. - name (
varchar(32)). Nom de l’objet. Contrainte not null, unique. - item_type (
varchar(32)). Type d’objet, parmi les possibilités (weapon,armor,misc). Contrainte not null, check. - rarity (
varchar(32)). niveau de rareté, parmi les possibilités (common,uncommon,rare,epic,legendary). Contrainte not null, check. - base_hp (
integer). Bonus de points de vie conféré au joueur possédant l’objet. Contrainte not null, check \((>0)\). - base_attack (
integer). Bonus d’attaque conféré au joueur possédant l’objet. Contrainte not null, check \((>0)\).
Quest.
Cette relation représente les quêtes que les personnages peuvent accomplir.
- quest_id (
integer). Identifiant unique de la quête. Clé primaire. - title (
varchar(32)). Titre de la quête. Contrainte not null, unique.
GuildMember.
Cette relation associative modélise l’appartenance des personnages aux guildes. La clé primaire est la paire \((\textbf{guild\_id}, \textbf{character\_id})\). Elle garantit qu’un personnage n’apparaît qu’une seule fois par guilde.
- guild_id (
integer). Identifiant de la guilde. Clé étrangère versguild(guild_id). - character_id (
integer). Identifiant du personnage. Clé étrangère verscharacter(character_id). - role (
varchar(32)). Rôle du personnage dans la guilde, parmi les possibilités (member,officer,leader). Contrainte not null, check. - joined_at (
varchar(32)). Date d’adhésion à la guilde, au formatYYYY-MM-DD HH:MM:SS.SSS. Contrainte not null.
QuestReward.
Cette relation associative définit les récompenses associées à chaque quête. La clé primaire est la paire \((\textbf{quest\_id}, \textbf{item\_id})\).
- quest_id (
integer). Référence à la quête. Clé étrangère versquest(quest_id). - item_id (
integer) Objet donné en récompense. Clé étrangère versitem(item_id). - gold (
integer). Quantité d’or octroyée. Contrainte not null, check \((>0)\).
CharacterQuest.
Cette relation associative enregistre la participation des personnages aux quêtes.
- character_id (
integer) Personnage concerné. Clé étrangère verscharacter(character_id). - quest_id (
integer). Quête concernée. Clé étrangère versquest(quest_id). - status (
varchar(32)) Etat d’avancement de la quête, parmi les possibilités (progress,completed,cancelled). Contrainte not null, check. - started_at (
varchar(32)). Date de début de la quête, au formatYYYY-MM-DD HH:MM:SS.SSS. Contrainte not null.
Cela vous donne toutes les informations pour construire vos schémas de relation.
INGInious