[MySQL] koppeltabellen

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

  • Archiebald
  • Registratie: Juni 2006
  • Laatst online: 01-12 08:39
Hallo,

ik ben bezig om een zelf gemaakt forum te optimaliseren kwa database structuur.
maar nu vroeg ik mij af wat beter is, koppeltabellen of gewoon een koppeling tussen 2 tabellen leggen zonder een extra tabel.

ik heb nu het volgende

situatie 1
In tabel `forum_topic` staat het volgende:
topic_id
forum_id
enz

In tabel `forum_forum` staat het volgende
forum_id
enz
ik leg dus de koppeling tussen forum_id (forum_forum) naar forum_id (forum_topic)
nu denk ik zelf aan de volgende situatie (maar of dit beter/sneller is vraag ik mij af)

situatie 2:
forum_topics:
topic_id
enz

forum_koppel_topics:
topic_id
forum_id

forum_forum:
forum_id
op mijn stage zeggen ze dat situatie 2 beter is omdat beide grote tabellen kleiner worden en er een kleintje bij komt.
Maar een goede redenatie om koppeltabellen tegen te gaan is nog wel dat de query die de topics moet pakken in een extra tabel moet zoeken, dus duurt de query weer langer.

Ik denk zelf dat beiden even snel zijn, maar dat je voor- en nadelen tegen elkaar moet afwegen. Alleen weet ik niet precies wat de voor- en nadelen zijn.

Alvast bedankt voor de reacties!

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Koppeltabellen hebben een functie: nl. het mogelijk maken van een n-m relatie.
Als je dus een n-m relatie hebt, dan gebruik je een koppel-tabel, anders niet.

En dat is een geldige reden om al dan niet voor een koppeltabel te kiezen. De reden die ze op je stage zeggen, slaat imho nergens op.
Een beetje DBMS mag geen moeite hebben met 'grote' tabellen.

Als éénzelfde topic niet in meerdere fora kan zitten, dan heb je dus geen koppeltabel nodig.

[ Voor 28% gewijzigd door whoami op 17-11-2006 12:40 ]

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het ligt eraan wat voor relatie er tussen een Forum en een Topic is. Als een Topic altijd 1 Forum heeft en nooit meer dan is het handiger om in de tabel Topic een extra veld op te nemen. Je hoeft dan een Join minder te doen.

Kan het zo zijn dat een Topic in geen of in meerdere Forums thuis hoort dan moet je een kopel tabel gebruiken.

edit:

Wat whoami dus zegt ;)

[ Voor 5% gewijzigd door Woy op 17-11-2006 12:42 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Pacjack
  • Registratie: Oktober 2001
  • Laatst online: 01-12 21:11
Een koppeltabel gebruik je alleen bij een veel-op-veel relatie. Zie ook [MYSQL] Twijfel opbouw 1-1 relatie - koppeltabel

[ Voor 0% gewijzigd door Pacjack op 17-11-2006 12:42 . Reden: spuit zoveel ]

⌘ | deze gebruiker weet waar zijn handdoek is


  • Archiebald
  • Registratie: Juni 2006
  • Laatst online: 01-12 08:39
Ok bedankt! nu weet ik ook wat beter is :)
topics kunnen in het forum niet in meerdere fora staan, dus koppeltabellen zijn in mijn geval niet nodig, maar wel handig dat ik nu weet wat de bedoeling van koppeltabellen zijn.

ik zal is overleggen met de andere sitebeheerders waar we het moeten gaan toepassen en waar niet.

@pacjack, bedankt voor het topic. ik zal het doorlezen

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
rwb schreef op vrijdag 17 november 2006 @ 12:41:
Het ligt eraan wat voor relatie er tussen een Forum en een Topic is. Als een Topic altijd 1 Forum heeft en nooit meer dan is het handiger om in de tabel Topic een extra veld op te nemen. Je hoeft dan een Join minder te doen.
Dat klopt, door een join minder zal je query waarschijnlijk sneller uitgevoerd zijn.

Maar de belangrijkste reden (imo) om geen koppeltabel te gebruiken is dat je in je database helemaal niet de mogelijkheid moet kunnen hebben dat er foute data ingevoerd wordt (zoals een topic dat onder meerdere forums valt). M.a.w.: als je hebt besloten dat de forum-topic relatie een 1-op-veel relatie moet zijn, dwing dat dan ook af in de database!

Om dezelfde reden wil je ook unique constraints gebruiken om je alternate keys af te dwingen: je wilt dat de database voor jou afdwingt dat je er geen ongeldige data in stopt.

[ Voor 10% gewijzigd door MrBucket op 17-11-2006 20:04 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
MrBucket schreef op vrijdag 17 november 2006 @ 19:53:
[...]

Dat klopt, door een join minder zal je query waarschijnlijk sneller uitgevoerd zijn.

Maar de belangrijkste reden (imo) om geen koppeltabel te gebruiken is dat je in je database helemaal niet de mogelijkheid moet kunnen hebben dat er foute data ingevoerd wordt (zoals een topic dat onder meerdere forums valt). M.a.w.: als je hebt besloten dat de forum-topic relatie een 1-op-veel relatie moet zijn, dwing dat dan ook af in de database!

Om dezelfde reden wil je ook unique constraints gebruiken om je alternate keys af te dwingen: je wilt dat de database voor jou afdwingt dat je er geen ongeldige data in stopt.
Tot op bepaalde hoogte geef ik je gelijk. Voor dit soort dingen als wat voor relatie het is is het inderdaad slim om dat meteen af te dwingen in de database. Je moet het alleen niet altijd te ver doorvoeren. Je moet een database gewoon gebruiken voor waar hij goed in is en dat is logische data opslaan en ophalen. Soms kan het dan voorkomen dat je een design beslissing moet nemen die uit design perspectief niet helemaal goed is maar toch nodig is voor bijvoorbeeld de performance.

Uiteindelijk is het toch je bussiness logic die de constraints af moet dwingen. Je database gebruik je hier alleen als tool voor om dat zo makkelijk mogenlijk te maken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1