Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP - Doctrine - Symfony2] Forum Entity Design

Pagina: 1
Acties:

  • Mattijs.id
  • Registratie: December 2011
  • Laatst online: 21:07
Hoi Tweakers,

Ben bezig om oude code op te ruimen, waarmee ik op het volgende stuitte:

Het gaat in deze over een forum.

Hierbij is nu de volgende indeling te herkennen:
- ForumCategory
- Forum
- ForumThread
- ForumPost
Ieder met hun respectievelijke repository.

Om nu bijvoorbeeld de frontpage te renderen kan ik 2 kanten op:
- Ik voeg een extra relatie toe: ForumCategory krijgt ook een referentie naar alle Forum's waarin deze van toepassing is. Hierdoor zou ik elementair de frontpage kunnen renderen doordat alle info vrij eenvoudig op te halen valt.
- Ik voeg geen extra relatie toe, en de relatie forum -> category zorgt ervoor dat ik voor iedere category moet achter halen welke forums hierbij behoren.

Deze lijn is uiteraard verder door te trekken naar thread en post. Maar laten we even elementair beginnen ^_~

De vraag hierbij:
Is er hier een beste oplossing? En wanneer zou er een lichtje moeten gaan branden voor het opslaan van teveel cross-informatie. (cross-informatie bedoel ik dus het opslaan van beide richtingen). Dit neemt namelijk wel ruimte in beslag, en het bijwerken is natuurlijk ook niet gratis in de zin van resources.

---------------

Als 2e vraag heb ik het volgende:
Het is mogelijk om een post te up -of downvoten. Dit werkt en lukt allemaal prima, maar gezien er een op meerdere entiteiten gevote kan worden is het allicht handiger om dit systeem los te trekken.

Nu gebeurt dit simpelweg door voor iedere entiteit een aparte vote entiteit te maken (ForumthreadVote forumpostvote etc.) en deze op te slaan middels single table inheritance.

Nu heb ik letterlijk 15 minuten gespendeerd aan het onderzoeken van mongodb, maar dit lijkt een vrij goede kanditaat ervoor.

Zo is het dan mogelijk om een collectie te maken met votes. Hierbij worden deze onderscheiden door 'soort' waarin het entiteit type staat, en verder alle benodigde info om dit rond te maken. Een andere oplossing is om binnen mongodb weer een collectie aan te maken voor ieder soort entiteit al ontgaat mij dan het doel van het gebruiken van mongodb een beetje.

Ik hoop dat iemand wat antwoorden voor me heeft.

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 18-11 16:17
Beste Ijstheefles,
De vraag hierbij:
Is er hier een beste oplossing? En wanneer zou er een lichtje moeten gaan branden voor het opslaan van teveel cross-informatie. (cross-informatie bedoel ik dus het opslaan van beide richtingen). Dit neemt namelijk wel ruimte in beslag, en het bijwerken is natuurlijk ook niet gratis in de zin van resources
Bij het gebruik van Doctrine is de impact van een OneToMany (en ManyToOne) bidirectionele relatie minimaal, en in het geval van jou frontpage zelfs sneller. Indien je geen bidirectionale legt, moet je eerst 1 query doen om de categoriën ophalen en dan per categorie de forums (wat je dus 1 extra query kost per forum) terwijl je met een bidirectionele relatie alles in 1 query binnen kan halen!
Het is mogelijk om een post te up -of downvoten. Dit werkt en lukt allemaal prima, maar gezien er een op meerdere entiteiten gevote kan worden is het allicht handiger om dit systeem los te trekken.
Ik vermoed dat je wilt bijhouden wie er al gevote heeft en wie nog niet. In dat geval een aparte entity aan te maken waarin je bij houdt welke gebruiker op welke post wat gevote heeft.

Je hebt hier ook over MongoDB, ik heb daar weinig ervaring mee, dus op dat stukje kan ik niet ingaan.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:03

MueR

Admin Devschuur® & Discord

is niet lief

Persoonlijk zou ik geen categorie maken. Beter maak je categorie een type forum, waar niemand in kan posten. Dat doen de meeste grote forumpakketten (Invision, vBulletin, XenForo) ook namelijk. Scheelt extra entiteiten en maakt het renderen ook nog eens makkelijker.

Anyone who gets in between me and my morning coffee should be insecure.


  • Mattijs.id
  • Registratie: December 2011
  • Laatst online: 21:07
MueR schreef op woensdag 07 augustus 2013 @ 01:41:
Persoonlijk zou ik geen categorie maken. Beter maak je categorie een type forum, waar niemand in kan posten. Dat doen de meeste grote forumpakketten (Invision, vBulletin, XenForo) ook namelijk. Scheelt extra entiteiten en maakt het renderen ook nog eens makkelijker.
Dus binnen Forum een boolean 'is_category' maken, of binnen Forum een 'type' meegeven, waarmee automatisch een categorie wordt gezet. Echter dit laatste heb ik al door binenn Forum een referentie naar de categorie op te slaan.

Dus dan lijkt het erop dat je op single table inheritance doelt?

Dus Baseclass van 'Forum' welke vervolgens gedefinieerd wordt door:
- CategorieForum
- SimpleForum

Forum heeft dan id, en language
SimpleForum heeft een category, title, etc.
CategorieForum heeft zijn eigen categorie en ook een id etc.

Alleen dan heb ik nog steeds een extra entity. Zo deel ik het wel anders in, maar blijf ik die categorie houden.

Ik zal kort naar de genoemde forumsoftware kijken, maar kun je het allicht uitgebreider toelichten?

Volgens mij mis ik iets ;-)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Vraag 1: ik snap het probleem niet. Volgense mij zijn je oplossingen hetzelfde, want een many to one is impliciet ook een one to many de andere kant op. Of begrijp ik nou iets niet?

Qua performance kun je voor de rendering het beste helemaal geen mapping doen, en gewoon direct met database praten, mocht dat een overweging zijn.

Voor vraag 2 zou je traits kunnen gebruiken.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
drm schreef op donderdag 08 augustus 2013 @ 00:03:
Voor vraag 2 zou je traits kunnen gebruiken.
Waarom specifiek traits? Er zijn legio andere mogelijkheden hiervoor naast een PHP5.4 oplossing?

Engineering is like Tetris. Succes disappears and errors accumulate.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

armageddon_2k1:
Waarom specifiek traits?
Waarom niet?
Er zijn legio andere mogelijkheden hiervoor naast een PHP5.4 oplossing?
Ja, natuurlijk. Maar waarom zou je 5.4 mogelijkheden precies uit de weg gaan....?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Als je de beschikking hebt over PHP54 geen probleem natuurlijk :)

Engineering is like Tetris. Succes disappears and errors accumulate.


  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 10-10 08:02
Waarom zou je niet de beschikking hebben over 5.4?


Oh wacht... ik gok dat het antwoord 'Ik wil voor 2 duppies per jaar hosten' is ;)

Driving a cadillac in a fool's parade.


  • Mattijs.id
  • Registratie: December 2011
  • Laatst online: 21:07
drm schreef op donderdag 08 augustus 2013 @ 00:03:
Vraag 1: ik snap het probleem niet. Volgense mij zijn je oplossingen hetzelfde, want een many to one is impliciet ook een one to many de andere kant op. Of begrijp ik nou iets niet?

Qua performance kun je voor de rendering het beste helemaal geen mapping doen, en gewoon direct met database praten, mocht dat een overweging zijn.

Voor vraag 2 zou je traits kunnen gebruiken.
- Traits: ben php 5.4 aan het installeren ;-)
- En ik maak me zorgen om niets blijkbaar, gezien niemand in deze thread het raar vind. 't Zal wel aan mij liggen ^_~
Pagina: 1