#1 před 2 lety

LastHunter
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Indikace (ne)přečtených příspěvků – struktura databáze

Ahoj,
právě jsem se v jednom projektu dostal k místu, kdy se zabývám příspěvky (komentáři/posty ve fóru) a indikováním, zda je přihlášený uživatel již přečetl nebo ne.

Jaký je ideální (počtem SQL dotazů a diskovou kapacitou nejméně náročný) způsob, jak tyto informace zanést do databáze?

Mně po chvilce přemýšlení a zamítáním nejhorších řešení :)) napadl tento způsob:

  • Mějme tabulku post_read_flags se sloupci:
    • user_id //který uživatel příspěvky přečetl
    • related_id //ke kterému záznamu (článku/threadu ve fóru) příspěvky patří
    • table //např. articles/comments – mám univerzální komponentu, která mi sdružuje pod sebe různé druhy uživ. přís`pěvků, proto tyto dva sloupce
    • time //čas posledního přečtení, případně čas posledního přečteného příspěvku v případě stránkování

Sloupec related_id (a případně i další) by mohl být NULL, indikovalo by to pak stav po kliknutí „označit vše jako přečtené“, ať se mi databáze z těch INSERTů nezblázní.

Operace s touto strukturou by byly následující:

  • Při načtení stránky s příspěvky by proběhl jeden INSERT pro celou stránku, v time by byl uložen aktuální čas nebo čas posledního zobrazeného příspěvku.
  • Při SELECTu bych si jednoduše naJOINoval, zda aktuální uživatel (nepřihlášené neřeším, těm žádné indikace nových příspěvků zobrazovat nebudu) již daný příspěvek četl nebo ne. Všechny příspěvky, co náleží k danému článku/threadu a jsou starší než datum posledního indikátoru přečtení budu považovat za přečtené…
  • Databáze půjde při větším nabobtnání snadno čistit – smažou se od každého uživatele indikátory tak, že zůstane vždy jen ten nejnovější (ke každému článku/threadu). Žádné informace to nepoškodí.

Co vy na to? Existuje nějaký méně náročný způsob či má tento nějaké mouchy?

Editoval LastHunter (12. 10. 2009 23:03)

 

#2 před 2 lety

blacksun
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 164

Re: Indikace (ne)přečtených příspěvků – struktura databáze

Vypadá to rozumně..

Pokud bys použil místo obyčejného insertu tento rozšířený – http://dev.mysql.com/…plicate.html, pak Ti ani nebude nic bobtnat..

 

Zápatí