Sujet 1 : Forum de messagerie (D1)
Hypothèses
Le forum de discussion Yellowit veut mettre en place une nouvelle base de données relationnelle pour gérer ses modérateurs, ses utilisateurs, et leurs messages.
Un utilisateur a un pseudo unique, un nom, un prénom, une adresse mail unique, et un âge. Le nom et prénom sont facultatifs. Un utilisateur peut être un utilisateur premium, qui a une remise de 30% sur les achats du giftshop. On veut alors stoquer la date du passage en utilisateur premium.
Les utilisateurs postent des messages, qui ont un titre optionnel, un contenu texte, une date de création et optionnellement une image. Un message est soit un message original (original post), soit une réponse à un message existant (on veut alors évidemment savoir lequel). Les messages apparaissent dans un sous-forum qui a une thématique donnée et une date de création (les réponses étant obligatoirement dans le sous-forum du message ciblé).
En plus de poster et répondre à des messages, les utilisateurs peuvent voter sur les messages qu'ils n'ont pas écrits en positif (upvote) ou négatif (downvote). Ils peuvent aussi poster un émoji sur un message qu'ils n'ont pas écrit, parmi la liste des emojis proposé par le forum (smiley, OK, KO, thumb_up, etc.). Un utilisateur peut à la fois voter et poster un émoji sur un même message, mais qu'une seule fois sur ce message.
Les modérateurs ont un pseudo unique (commençant obligatoirement par mod_), un nom, un prénom, une adresse mail unique et un âge. On considérera pour simplifier que les modérateur sne peuvent pas aussi être utilisateurs du forum. Un modérateur peut réaliser des actions de modération sur tous les messages. Une action a une date, et un type (cacher, rendre_visible, avertissement).
En plus de cela, le forum veut gérer dans la base de données ses publicités et son giftshop. Une publicité a une entreprise ciblée et une image. Une publicité peut être affichée dans différents sous-forum pendant une campagne, qui a une date de début, une date de fin (qui est null si la campagne n'est pas terminée), un gain pay_per_view en euro, et un nombre total de vue (qui est null si la campagne n'est pas terminée).
Le giftshop propose plusieurs achats possibles aux utilisateurs : des émojis spéciaux qu'il faut acheter pour utiliser (dark_glasses, fire, etc.), des titres que l'utilisateur peut faire apparaître avant son pseudo, et la possibilité de cacher les publicités pendant une période. Chaque achat a un coût en point. Les utilisateurs gagnent des point en postant des messages ayant de nombreux upvote, mais il ne vous est pas demandé de gérer cela dans la base de données.
Besoins
Développer une base de données pour le forum de discussion Yellowit. En complément, le forum vous demande de réaliser les requêtes suivantes.
L'argent gagné sur les publicités pour chaque entreprise, en ne comptant que les campagnes terminées ?
Quelle est la dépense moyenne de points des utilisateurs premium dans le giftshop, sans compter leur réduction ?
Quels sont les 3 utilisateurs qui ont eu le plus de downvote sur l'ensemble de leurs messages ?