Nella progettazione di database quando si devono creare relazioni ti tipo "UNO A MOLTI" ci sono due strade da prendere:
1) Quella che hai preso tu, avere due tabelle distinte più una terza che realizza la relazione
2) Quella che ti ho suggerito io, avere due sole tabelle ed inserire nella seconda un riferimento alla chiave primaria dell'altra tabella
Nel tuo caso la soluzione 2 ti aiuterebbe nella cancellazione dei "tags" e ti eviterebbe di avere un'altra tabella con 2 soli attributi ed un miliardo di tuple.
La soluzione 1 sarebbe andata bene nel momento in cui ci sarebbero dovuti essere altri attributi per la relazione e non tutti questi sarebbero stati valorizzati.
P.S. Ma stai realizzando un forum?
In ogni caso con le tabelle che ti ho proposto avresti questo scenario:
[list=1][*]Creazione tupla in "posts" (e credo che questo comporti anche la creazione del primo "tags"):
codice:
INSERT INTO posts(CATEGORY_ID, POST_TITLE, ...)VALUES('$category_id', '$post_title', ...);
INSERT INTO tags(POST_ID, ...)VALUES('$post_id', ...);
si è presupposto che POST_ID sia un auto_increment e quindi nella prima INSERT non è stato inserito e che invece il valore $post_id della seconda insert sia stato reperito da PHP tramite la funzione mysql_insert_id()
[*]Cancellazione di un "tags":
codice:
DELETE FROM tags WHERE tag_id = '5'
[*]Cancellazione di un "posts" e relativi "tags":
codice:
DELETE FROM posts WHERE post_id = '5'
automaticamente verranno eliminati tutti i "tags" relativi a quel "post"[/list=1]
Sono questi i tuoi unici scenari giusto? o mi sfugge qualcosa?