1

J'ai 2 tables - une qui stocke l'information d'utilisateur (identification, nom d'utilisateur, mot de passe) et la deuxième stocke des informations sur l'événement (identification, nom, description, date, nom d'utilisateur). Je voudrais mettre en place des fonctionnalités 'événements favoris'. Cela permettrait à l'utilisateur de stocker ses événements favoris et de les afficher ultérieurement dans une liste. Je ne suis pas sûr de savoir comment mettre en œuvre cela en termes de conception. J'ai besoin d'une solution simple. Quelque chose comme stocker les ID des événements favoris dans un champ de la table des utilisateurs. J'utilise mysql et PHP. Quelqu'un peut-il me diriger vers la bonne direction?Comment créer cette base de données simple?

+0

Créez une troisième table pour stocker les combinaisons userid/eventid pour chaque événement favori d'un utilisateur. – Veger

Répondre

4

Vous souhaitez avoir une table reliant les clés étrangères des tables d'utilisateurs et d'événements.

utilisateurs Tableau:

id, username, password 

Table des événements:

id, name, description, date, username 

Favoris Tableau:

id, user_id, event_id 

De cette façon, vous pouvez facilement accéder à la liste des événements préférés.

SELECT events.name, events.description, events.date 
FROM events, users, favorites 
WHERE favorites.user_id = users.id 
AND favorites.event_id = events.id 
+0

Pourquoi avez-vous ajouté la colonne 'id' dans la table' Favorites'? C'est inutile. – Crozin

+0

Pouvez-vous me dire à quoi devrait ressembler exactement la relation des clés étrangères? – Vonder

+0

Dans user_id et event_id sont les clés étrangères dans cet exemple. Comme vous pouvez le voir dans le SQL à condition qu'ils se rapportent à users.id et events.id (clés primaires). – chills42

0

Qu'est-ce que vous avez besoin est la relation many-to-many plus classique et de base.

Vous aurez besoin d'une table supplémentaire (disons: user_event_ref) qui stockera les identifiants d'utilisateur et d'événement.

User: 
    id 
    name 

Event: 
    id 
    name 

UserEventRef: 
    user_id 
    event_id 

Dans usereventref chaque colonne est un Foreign Key, et les deux colonnes sont parties de clé primaire.

-1

Il est toujours possible d'ajouter un champ tiny-int à la table Events en signalant un événement comme favori. Cela ne viole pas la normalisation en ce que oui ou non un favori n'a aucun effet sur les autres événements. Il a l'avantage supplémentaire de supprimer automatiquement l'événement des favoris si l'événement est supprimé.

Si un schéma de tri est nécessaire pour les favoris, vous pouvez toujours modifier la table des événements de la même manière. Si des détails sur le "favori", comme quand il a été ajouté à la liste etc est nécessaire, vous devez utiliser une table supplémentaire comme suggéré.

+1

Oui, mais si j'ai beaucoup d'utilisateurs? Votre idée fonctionne-t-elle si de nombreux utilisateurs choisissent le même événement ou si l'utilisateur choisit plusieurs événements? – Vonder

+0

Cela ne fonctionne pas, sauf si vous voulez que les favoris soient à l'échelle du système. Je crois que la fonctionnalité prévue est pour les listes de favoris spécifiques à l'utilisateur. – chills42

+0

La conception actuelle ne permet pas d'affecter plusieurs utilisateurs à un seul événement. Il prend en charge un utilisateur à plusieurs événements. – souLTower

Questions connexes