Ik zit met een leuk vraagstukje.

Ik heb op mijn site keywords (tags) bij artikelen staan, en ik wil dat de invoer hiervan gelijk loopt met de database.

Mijn opzet is als volgt:
Tabel: Keywords
- ID (PK)
- Keyword (VARCHAR)

Tabel: keywords_items
- ItemID
- TagID
- ItemType (kan zijn news, video, upload)

Als ik een reeks tags toevoeg aan een artikel dan doe ik dat komma-gescheiden:
Appel, banaan, cocosnoot

Echter als ik deze tags wijzig in mijn admin-backend, dan moeten ze weer exact zo in de koppeltabel in mijn database staan.
Dus als ik een tag verwijder, en een tag toevoeg, of een tag aanpas dan moeten deze mutaties ook uitgevoerd worden. Dus als ik "Appels, banaan, cokosnoot, dadel" invoer, moet deze met hun ID's in de databse komen, en de Id van 'cocosnoot' moet dus uit de koppeltabel worden verwijderd.

Nu kan je al deze mutaties in een functie uitvoeren, maar je kan ook gewoon alle ID's in de koppeltabel verwijderen, en de nieuwe ID's weer erin zetten.

Wat is 'the best practice'?
Als het trouwens een afweging is tussen voor elke tag controleren of deze al bestaat, toegevoegd wordt en/of verwijderd is na de update versus alles voor dat item uit de koppeltabel wegkieperen en opnieuw toevoegen... ik denk dat je zelf ook wel weet wat makkelijker is ;).

Die wijzigingen (weggooien en toevoegen, alsmede wellicht wijzigingen in het item zelf) wil je trouwens wel als één ondeelbare actie uitvoeren, en daarvoor bestaan weer (database)transacties.

Dus het wordt zoiets als:
start transactie
    verwijder tags gekoppeld aan item
    voeg mogelijk nieuwe/andere tags toe aan item
    voer wijzigingen door in item zelf
commit transactie

Reageren