Robert Steichele hat gesagt.:
Das würde bedeuten, dass für jede Benutzer-Datensatz Kombination ein extra Datensatz angelegt wird. Wird da die Datenbank nicht sehr schnell sehr groß?
Die Kombination wird ja erst angelegt, wenn ein User den Datensatz gelesen hat. Inaktive User fallen also kaum ins Gewicht.
Für eine Seite wie Tutorials ist das wohl kein geeignetes Konzept. Aber, wenn es absolut eindeutig sein soll, geht es kaum anders.
Eine Speicherplatzverbrauchreduktion ist jedoch machbar:
Du legst ein weiteres Attribut in der Usertabelle an (Typ: DATETIME).
Darin speicherst Du den Zeitpunkt, bis zu dem ein User alle bis dahin angelegten oder geänderten Datensätze gelesen hat. Dann kannst Du alle Einträge, die sich auf Datensätze beziehen, die vor diesem Zeitpunkt angelegt oder geändert wurden, zu diesem User in der Verknüpfungstabelle löschen. Die letzte Änderung mußt Du in der Datensatztabelle natürlich auch speichern.
Die Querys werden dann natürlich umfangreicher und dauern länger. Das ist der typische Trade-Off zwischen Speicherplatz und Rechenzeit, wobei in diesem Fall eine irrsinnig große Tabelle die Rechenzeit wegen des umfangreichen JOIN natürlich auch verlängert.
Gruß hpvw
EDIT:
Man könnte die Speicherung des Zeitstempels in der Usertabelle auch sein lassen und in der Verknüpfungstabelle alle Einträge löschen, die vor dem Datensatz liegen, vor dem alle Datansätze gelesen wurden. Diese Datensatz-User-Kombination und alle neueren (zwischen denen sich "Leselücken" befinden) lässt man bestehen. Das macht die Querys nicht unbedingt einfacher, erspart aber die Updates in der Usertabelle.