Réaliser un script de message privé ou forum privé

Réaliser le model

a marqué ce sujet comme résolu.

Bonjour!

en ce moment j'ai presque fini un système de compte utilisateur pour un petit site en mode spaghetti.

j'aimerais bien y ajouter les messages privé ou un forum privé

je suis coincer au niveaux du model plus que mon application est conçue selon l'architecture MVC

voici la structure de mes tables

table pm

1
2
3
4
5
6
pm_id
pm_createdDate
pm_title
pm_subtitle
pm_content
pm_authorId

table pm_replay

1
2
3
4
5
6
rp_id
pm_replyId
pm_replyDate
pm_replyContent
pm_participantId
pm_alreadyRead

le véritable problème est que j'aimerais qu'un mp puisse être envoyé a plusieurs utilisateur en même temps

et qu'ils puisse y répondre et par la crée un System de "notification lus ou non lus"

+0 -0

Ma question n'a pas beaucoup de rapport mais je suis curieux, c'est quoi un site en mode spaghetti ?

LudoBike

en procédurale

Non.

https://fr.wikipedia.org/wiki/Antipattern#Programmation_spaghetti

Ge0

la n'est pas vraiment la réponse à ma question mais

"généralement lorsqu'on fait de la Programmation procédurale il est souvent très difficile de faire un code claire et indépendant quand il s'agit d'une petite application et même d'une grande Le code est donc plus long à mettre à jour d'ou c'est apparentée à la Programmation spaghetti"

ceci n'est pas de moi mais bon je la perçoit aussi de cette façon

quelqu'un veux bien revenir au sujet et proposer une solution a mon problème?

+0 -0

"généralement lorsqu'on fait de la Programmation procédurale il est souvent très difficile de faire un code claire et indépendant quand il s'agit d'une petite application et même d'une grande Le code est donc plus long à mettre à jour d'ou c'est apparentée à la Programmation spaghetti"

C'est absolument faux, mais puisque tu y tiens, je ne vais pas m'attarder là-dessus.

Pour ton modèle de données, je pense que tu devrais faire :

  • Une entité "Conversation" avec un identifiant et un titre
  • Une entité "Message" avec un identifiant, une date de création, un contenu et une clef étrangère vers un Utilisateur qui aurait créé la conversation, même si ça n'est pas obligatoire ("author_id").
  • Une entité "ConversationParticipants" avec une clef primaire composée de l'identifiant de la conversation et de l'identifiant de l'utilisateur, et qui contient possiblement des champs supplémentaires (datetime de la dernière lecture par exemple ?). Ainsi pour chaque occurrence dans l'entité, tu sauras que tel membre participe à telle conversation.

Comme tu peux le voir, il s'agit davantage d'une problématique de conception de modèle de données qu'une histoire d'Objet/Procédural/Spaghettis/Rhubarbe.

Avant de te soucier de faire une "architecture MVC" et tomber dans la patternite, assure-toi d'avoir un modèle de données cohérent. Le reste viendra naturellement. :)

Allez, dans ma grande mansuétude, je te fournis un code SQL non testé de ce que cela donnerait :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE board_users(
  `id` INT PRIMARY KEY,
  `username` VARCHAR(30),
   # ...
);

CREATE TABLE board_private_conversations(
  `id` INT PRIMARY KEY,
  `title` VARCHAR(255)
);

CREATE TABLE board_private_conversation_messages(
  `id` INT PRIMARY KEY,
  `creation_date` DATETIME,
  `content` TEXT,
  `author_id` INT NOT NULL,  # References board_users.id
  `private_conversation_id` INT NOT NULL  # References private_conversations.id
);

CREATE TABLE board_private_conversations_participations(
  `author_id` INT NOT NULL,  # References board_users.id
  `private_conversation_id` INT NOT NULL,  # References private_conversations.id
  `last_read` DATETIME,
  PRIMARY KEY(author_id, private_conversation_id)
);
+0 -0

"généralement lorsqu'on fait de la Programmation procédurale il est souvent très difficile de faire un code claire et indépendant quand il s'agit d'une petite application et même d'une grande Le code est donc plus long à mettre à jour d'ou c'est apparentée à la Programmation spaghetti"

C'est absolument faux, mais puisque tu y tiens, je ne vais pas m'attarder là-dessus.

laissons tomber je ne m'y connais pas trop!

  • Une entité "Conversation" avec un identifiant et un titre
  • Une entité "Message" avec un identifiant, une date de création, un contenu et une clef étrangère vers un Utilisateur qui aurait créé la conversation, même si ça n'est pas obligatoire ("author_id").

pour quoi crée deux tables ici dont l'un pour conserver uniquement le titre?

  • Une entité "ConversationParticipants" avec une clef primaire composée de l'identifiant de la conversation et de l'identifiant de l'utilisateur, et qui contient possiblement des champs. Ainsi pour chaque occurrence dans l'entité, tu sauras que tel membre participe à telle conversation.

c'est ici que j'arrive pas a faire le lien. y aura t il pas de duplication?

Comme tu peux le voir, il s'agit davantage d'une problématique de conception de modèle de données qu'une histoire d'Objet/Procédural/Spaghettis/Rhubarbe.

Avant de te soucier de faire une "architecture MVC" et tomber dans la patternite, assure-toi d'avoir un modèle de données cohérent. Le reste viendra naturellement. :)

ça je sais- c'est pratiquement la seul partie qui me pose problème

pour quoi crée deux tables ici dont l'un pour conserver uniquement le titre?

Parce que le titre est lié à la conversation en elle-même, pas aux messages.

c'est ici que j'arrive pas a faire le lien. y aura t il pas de duplication?

Dupliquer les données ? Si tu veux plusieurs membres qui participent à la même conversation, non, je ne pense pas.

Il y aurait éventuellement une question de duplication au niveau de author_id puisque le membre concerné se retrouverait à la fois référencé dans le tableau des conversations et le tableau des participations. A toi de voir si tu as besoin de mémoriser un membre en tant qu'auteur d'une conversation ou pas.

merci!

une autre façon possible de voir les choses

table pm

1
2
3
4
5
6
id
pm_createdDate
pm_title
pm_subtitle
pm_content
pm_authorId

table pm_participant

1
2
3
4
id
pm_id
pm_participantId
pm_alreadyRead

table pm_replay

1
2
3
4
5
id
pm_id
pm_replyDate
pm_replyContent
pm_participantId

là c’est sûre il y aura duplication mais n'est ce pas mieux ou il a des contraintes ou défauts à ceci?

là c’est sûre il y aura duplication mais n'est ce pas mieux ou il a des contraintes ou défauts à ceci?

Je ne connais pas tes besoins précis donc je ne peux pas totalement juger ta solution.

Sont-ce des besoins personnels ? Pars là-dessus, si tu vois que ça ne colle pas avec ce que tu souhaites faire, revois tes besoins et ton schéma. C'est là où faire des erreurs pardonne.

Sont-ce des besoins professionnels ? Fais valider ton schéma / ta solution par un collègue qualifié pour ça.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte