Archief - SQL: Tags

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

.kw

Legacy Member
Tegenwoordig is het aan te raden om alle artikels op een website van tags te voorzien. Maar hoe worden die tags opgeslaan in je database?

Is het zo:

Tags (id, tag)
Artikels (id, titel, body)
Tags_Artikels (tag_id, artikel_id)

Waarbij elke tag dus maximum 1 keer opgeslaan wordt.

Of zo:

Artikels (id, titel, body, tags)

Waarbij de tags, gesplitst met komma's, gewoon een string vormen.

Het eerste lijkt mij beter, maar het tweede handiger in gebruik.

frenzal

Legacy Member
ik zou voor het eerste gaan of toch iets in die stijl
voorhet tweede moet je teveel gaan knoeien met strings en lijkt ook niet ideaal voor veel queries mee te doen

passero

Legacy Member
Tags (id, tag)
Artikels (id, titel, body)
Tags_Artikels (tag_id, artikel_id)

Dit is goed maar

Waarbij elke tag dus maximum 1 keer opgeslaan wordt.

Als je bedoeld maximum 1 keer per artikelID, dan zit je goed
Maar als je bijvoorbeeld tag "sql" hebt en je hebt 2 artikels dan moet je maar 1 tag "sql" hebben hé. Je zal dan iets hebben van:

Tags (1, "sql")
Artikel( 1, "tutorial sql","....")
Artikel (2, "tutorial sql advanced", "....")
Tags_Artikel (1, 1)
Tags_Artikel (1,2)

.kw

Legacy Member
passero zei:
Tags (id, tag)
Artikels (id, titel, body)
Tags_Artikels (tag_id, artikel_id)

Dit is goed maar



Als je bedoeld maximum 1 keer per artikelID, dan zit je goed
Maar als je bijvoorbeeld tag "sql" hebt en je hebt 2 artikels dan moet je maar 1 tag "sql" hebben hé. Je zal dan iets hebben van:

Tags (1, "sql")
Artikel( 1, "tutorial sql","....")
Artikel (2, "tutorial sql advanced", "....")
Tags_Artikel (1, 1)
Tags_Artikel (1,2)

Ja ik weet het, dan wordt die tag toch maximum 1 keer opgeslaan...

Boddah

Legacy Member
zo moet het inderdaad.
als je twee klassen hebt met een n op n relatie, moet je er een 'contract' klasse tussenzetten.

WHiSPy

Legacy Member
Qua deftige database modelling zou het 2e zelfs geen optie zijn. Denk ook maar eens aan de uitbreidbaarheid naar de toekomst toe. (als ge voor elke tag ook nog een bepaalde image zou willen bv)

edit: en voor 'n join moet ge ook geen schrik hebben gezien het feit dat deze sowieso al zwaar geoptimaliseerd zijn op rdbms-niveau.

Ex0dus

Legacy Member
Dat is toch geen normalisatie?
Normaliseer je table en dan krijg je 2 tabellen:

tags (id, name)
artikel (id, titel, body, tag_id)

Of snap ik het verkeerd?

Cheers

dJeez

Legacy Member
Ex0dus zei:
Of snap ik het verkeerd?
Je snapt het verkeerd, want 1 artikel kan aan meerdere tags gekoppeld zijn, een n op n relatie dus, wat een tussentabel vereist.

Ex0dus

Legacy Member
dJeez zei:
Je snapt het verkeerd, want 1 artikel kan aan meerdere tags gekoppeld zijn, een n op n relatie dus, wat een tussentabel vereist.
Oke, dan is de eerste oplossing de meest logische hé. :)

Cheers
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan