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?
Répondre
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
Pourquoi avez-vous ajouté la colonne 'id' dans la table' Favorites'? C'est inutile. – Crozin
Pouvez-vous me dire à quoi devrait ressembler exactement la relation des clés étrangères? – Vonder
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
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.
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é.
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
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
La conception actuelle ne permet pas d'affecter plusieurs utilisateurs à un seul événement. Il prend en charge un utilisateur à plusieurs événements. – souLTower
Créez une troisième table pour stocker les combinaisons userid/eventid pour chaque événement favori d'un utilisateur. – Veger