Thông tin

Tác giả Rémi Van Boxem
Liên hệ Đường dẫn liên hệ
Hạn chót
Giới hạn nộp bài Không có giới hạn
Các tag chuyên mục homework, devoirs, devoir2

Đăng nhập

Question 1 (2 points)

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.

D2-1/mmorpg_erd.png

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 format YYYY-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 format YYYY-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 vers account.
  • class_id (integer). Classe du personnage. Contrainte not null, clé étrangère vers class.

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 format YYYY-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 vers guild(guild_id).
  • character_id (integer). Identifiant du personnage. Clé étrangère vers character(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 format YYYY-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 vers quest(quest_id).
  • item_id (integer) Objet donné en récompense. Clé étrangère vers item(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 vers character(character_id).
  • quest_id (integer). Quête concernée. Clé étrangère vers quest(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 format YYYY-MM-DD HH:MM:SS.SSS. Contrainte not null.

Cela vous donne toutes les informations pour construire vos schémas de relation.


Implémentez toutes les requêtes SQL (partie ddl) pour créer les relations

Téléverser votre ficher .sql reprenant la création de toutes vos tables. Pour faciliter votre construction, vous pouvez rajouter les instructions suivantes en début de fichier. La première instruction va forcer la vérification des contraintes de référencement (ce que nous allons faire dans la correction). Les autres instructions vont vous permettre de détruire votre base de données actuelles avant d'en reconstruire une nouvelle (très pratique pour le développement.)

Utilisez les noms ci-dessous pour le nom de vos tables.

  • character_quest
  • quest_reward
  • guild_member
  • item
  • quest
  • mob
  • guild
  • character
  • class
  • account

Finalement, le fichier suivant (populate_mmorpg.sql) vous est fourni pour vous donner le nom exact des attributs à mettre et de tester vos tables.