Ressemble à une relation multi-utilisateurs pour "ce que les utilisateurs ont vu quels projets", mieux implémentée avec une table avec exactement deux colonnes - une clé étrangère dans la table des utilisateurs et une dans la table des projets. Lorsqu'un projet est créé, vous n'avez pas encore ajouté d'entrées à cette table (sauf si vous pouvez identifier un utilisateur comme étant le créateur qui a vu le projet, auquel cas vous ajoutez cette entrée) - vous ajoutez une entrée (U, P) chaque fois que "l'utilisateur U a vu le projet P" se produit. Lorsqu'un projet est modifié, vous supprimez toutes les entrées de la table concernant ce projet (à nouveau, sauf peut-être celle de l'utilisateur qui effectue la modification, si vous savez qui).
Besoin de SQL pour le schéma de cette table et les opérations que j'ai décrites en mots?
Modifier: un intervenant demande SQL, donc (en supposant InnoDB, dans le cas de MySQL), en supposant que les tables utilisateur et projet ont des clés int uid et pid respectivement:
create table Seen (uid int, pid int,
foreign key uid references user(uid) on delete cascade,
foreign key pid references project(pid) on delete cascade,
primary key (uid, pid))
Lorsqu'un existant le projet avec un PID de P est modifié, donc aucun utilisateur n'est maintenant considéré comme l'ayant "vu", delete from Seen where pid=P
(ie, enlever toutes les entrées pour P de cette table); Si la modification est effectuée par l'utilisateur U, l'utilisateur U est considéré comme l'ayant vu, vous pouvez ajouter and uid!=U
à la clause where
du delete
. Pour marquer le fait qu'un certain utilisateur U a maintenant vu le projet P, insert ignore into Seen(uid, pid) values (U, P)
(la partie ignore
signifie "ne rien faire si la ligne était déjà là", de sorte que l'enregistrement des conditions "vues" plus d'une fois est inoffensif, bien sûr redondant).
je dis aller, plus d'informations ne peut jamais être une mauvaise chose –
merci! SQL serait bien mais je pense que je peux le gérer :) – Bundy