Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[Alg] Advies gevraagd voor comments/threads systeem

Pagina: 1
Acties:

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 15:10
Ik heb verschillende soorten items, berichten, video's, foto's.
Daar kunnen mensen dan op reageren(comments).

Nou zou ik in de tabel voor comments het type en het id van het item waar op gereageerd op kunnen slaan. Maar dan kun je een groep comments(thread) niet aan meerdere items hangen(denk aan meerdere foto's die over hetzelfde gaan).

Dus had ik bedacht een threadId op te slaan.

Dit is ongeveer het idee:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE IF NOT EXISTS `messages` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `message` text NOT NULL,
  `comment_thread_id` int(11) NOT NULL,
  `timestamp` datetime NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `group_id` (`user_id`,`comment_thread_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `thread_id` int(11) NOT NULL,
  `comment` text NOT NULL,
  `timestamp` datetime NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `user_id` (`user_id`,`thread_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Waar ik nu over zit te twijfelen is hoe ik de threadId ga bepalen.

Zo zou ik:

* Bij het aanmaken van een item gelijk een nieuwe threadId kunnen maken, maar dat is ook weer een beetje loos, op veel items zal toch niet gereageerd worden.
* Bij een nieuwe comment kijken of er al een threadId is voor het item waar op gereageerd wordt, zo niet, alle tabellen joinen en hoogste threadId pakken + 1
* Een aparte tabel threads aanmaken, met daarin enkel id's, auto incremented.

Mij lijkt de derde optie het beste. Maar misschien is er nog wel een veel nettere oplossing waar ik niet op kan komen?

Advies is zeer welkom :)

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-11 23:24

alienfruit

the alien you never expected

koppeltabel? of je gebruikt gewoon de item id als de thread_id.

[ Voor 68% gewijzigd door alienfruit op 22-09-2008 18:51 ]


  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 15:10
alienfruit schreef op maandag 22 september 2008 @ 18:50:
koppeltabel? of je gebruikt gewoon de item id als de thread_id.
Ja maar er zijn dus meerdere soorten items die in aparte tabellen staan. itemId gaat dan dus conflicten geven.
Een tabel threads als koppeltabel een goed idee?

  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Je kunt ook gewoon een tabel met comments voor een type gegevens doen, zodat je een tabel hebt met fotocommentaren, een met berichtcommentaren, etc. Scheelt een beetje mbt performance en overzichtelijkheid.

Voor het probleem zelf zou je, buiten berichtcommentaren, fotocommentaren en dergelijke, extra types commentaren kunnen toevoegen - een commentaartype voor fotoalbums, bijvoorbeeld, zodat je een commentaar op een verzameling foto's kunt geven. Dat lijkt mij het meest eenvoudige, en past ook in je huidige manier van commentaren opslaan.

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 15:10
Hmm nee liever niet, de commentaren zijn in principe overal hetzelfde, wil ze in 1 class library houden, en ze daarme ook gemakkelijk aan kunnen roepen. Het media object heeft de threadid dan al opgeslagen, dus is het iets van CommentMapper::getCommentsByThreadId($threadId). Ik ga niet hetzelfde meerdere keren doen.

Verwijderd

Maghiel schreef op maandag 22 september 2008 @ 18:57:
Ja maar er zijn dus meerdere soorten items die in aparte tabellen staan. itemId gaat dan dus conflicten geven.
Het zou dan dus makkelijker zijn als je dit op een of andere manier normaliseert. Zodat je elk item wel via een itemId kunt benaderen.

Verder kan je toch gewoon een threadId toevoegen aan de "items"? En als een item aan meerdere threads moet kunnen hangen, een koppeltabel gebruiken inderdaad.

Verwijderd

En waarom niet een item_id gekoppeld met een type (zoals 'foto' of 'bericht')? Dan kan je alles in dezelfde tabel houden, zonder de hele structuur om te gooien

  • w!mz
  • Registratie: Januari 2005
  • Niet online
Iets wat ik niet helemaal begrijp; als jij een groep comments hebt; oftwel 1 thread; dan heb je toch ook een tabel threads waarin je wat informatie bijhoudt? Informatie zoals:
  1. de status (comments plaatsen mogelijk of niet)
  2. een thread titel
  3. tellertjes met aantal views en comments
Oftewel een koptabel threads, een regeltabel comments en een of meerdere regeltabellen items (1 kop : N regels en 1 kop : N regels items)

edit: zie net dat dit een van je opties was; doen dus ;)



Wat je ook kan doen is voor elk plaatje, video'tje, etc een comment maken. Vervolgens hoef je alleen maar een scheiding te leggen tussen echte comments en comments met een plaatje of video (boolean veld in je DB).

[ Voor 8% gewijzigd door w!mz op 26-09-2008 15:41 ]

http://gathering.tweakers.net

Pagina: 1