2010-03-28 7 views
3

J'ai besoin de conseils concernant plusieurs enregistrements. J'ai une table avec les champs username, message et message_to. Le scénario pourrait envoyer le même message à plusieurs utilisateurs en une fois. Que suggérez-vous? Sera-t-il efficace d'enregistrer tous les destinataires dans une seule colonne avec des valeurs séparées par des virgules ou d'ajouter plusieurs entrées?Plusieurs valeurs dans une colonne

Répondre

10

Non, non, non, non, non.

Ceci constituerait une violation majeure du modèle de base de données relationnelle. Créez trois tables: Users, Messages et MessagesSentToUsers.

  • Dans le tableau Users, stocker une valeur user_id et name de l'utilisateur.
  • Dans la table Messages, stockez une valeur message_id et le message text.
  • Dans la table MessagesSentToUsers, créez un enregistrement pour chaque fois qu'un message est envoyé. Cet enregistrement doit contenir uniquement le user_id pour l'utilisateur qui a reçu le message et un message_id pointant vers le texte du message reçu.

Comme les éléments suivants:

|  User  | |  Message  | | MessageSentToUsers | 
|---------|------| |------------|------| |----------|------------| 
| user_id | name | | message_id | text | | user_id | message_id | 

En général, les colonnes id dans chaque table sera de type entier. Le cas le plus courant est que le SGBD attribue une valeur à chaque ligne (vous n'avez donc pas à gérer les nombres).

+0

D'accord; parfois, la dénormalisation est appropriée. Mais ce n'est pas un moment. –

+0

@silky: pourquoi? Si vous avez besoin de savoir "Quels messages ont été envoyés à UserX?", Cela est raisonnable. Comme Adnan appelle les destinataires "utilisateurs", ils peuvent déjà avoir leur propre table. Si oui, la solution de Larry ajoute seulement une table simple. – egrunin

+0

Est-ce que les JOINs supplémentaires ne vont pas affecter les performances? – Adnan

Questions connexes