Mysql
 sql >> Database >  >> RDS >> Mysql

Come strutturare il database per gli avvisi di elementi non letti per utente

Durante la revisione dello schema pertinente per phpBB , ho trovato quanto segue:

# Table: 'phpbb_topics_track'
CREATE TABLE phpbb_topics_track (
    user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    topic_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    forum_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    mark_time int(11) UNSIGNED DEFAULT '0' NOT NULL,
    PRIMARY KEY (user_id, topic_id),
    KEY topic_id (topic_id),
    KEY forum_id (forum_id)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;

E:

# Table: 'phpbb_forums_track'
CREATE TABLE phpbb_forums_track (
    user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    forum_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    mark_time int(11) UNSIGNED DEFAULT '0' NOT NULL,
    PRIMARY KEY (user_id, forum_id)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;

Quindi cerco qui nel loro wiki :

Quindi essenzialmente hanno una tabella di ricerca per memorizzare i dati associati alla visualizzazione di un argomento da parte di un utente (thread), e quindi confrontarli con il timestamp nella tabella di visualizzazione del forum, per determinare se l'argomento è stato visualizzato dall'utente.