Схема, кажется, является вашей проблемой, в основном таблица post_tags кажется бесполезной в том виде, в каком она есть, но со столбцом для ссылки / связи / сопоставления с постом она становится полезной в качестве широко используемого сопоставления/ ссылка / таблица отношений.
Я думаю, что вам нужна схема типа: -
CREATE TABLE posts(
id INTEGER PRIMARY KEY,
txt TEXT,
);
CREATE TABLE tags(
id INTEGER PRIMARY KEY,
tag TEXT
);
CREATE TABLE posts_tags(
id INTEGER PRIMARY KEY,
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE
);
Затем вы привязываете теги к сообщениям, если сообщение удалено, то все строки для этого сообщениябудут удалены другие сообщения с использованием этого тега.Если тег будет удален, все строки, использующие этот тег, будут удалены.
PS Вы можете покончить со столбцом id, и тогда вы можете захотеть использовать ПЕРВИЧНЫЙ КЛЮЧ в качестве составной части обоих столбцов, исключая тем самым бесполезный/ сбивает с толку дублирующиеся строки.
Поэтому, возможно, используйте (с другими таблицами буксировки): -
CREATE TABLE posts_tags(
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
PRIMARY KEY (tag_id,post_id)
);
Или, если версия sqlite поддерживает это (3.8.2+): -
CREATE TABLE posts_tags(
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
PRIMARY KEY (tag_id,post_id)
)
WITHOUT ROWID
;