CREATE TABLE media( media_id INTEGER PRIMARY KEY, seaweedfs_fid TEXT (35) NOT NULL, filename TEXT (256) NOT NULL, content_type TEXT (256) ); CREATE TABLE tags( tag_id INTEGER PRIMARY KEY, name TEXT (256) NOT NULL UNIQUE ); CREATE TABLE media_tags( media_id INTEGER NOT NULL, tag_id INTEGER NOT NULL, FOREIGN KEY (media_id) REFERENCES media (media_id) ON DELETE CASCADE, FOREIGN KEY (tag_id) REFERENCES tags (tag_id) ON DELETE CASCADE, PRIMARY KEY(media_id, tag_id) ); CREATE VIEW tag_count_view AS SELECT tags.tag_id AS tag_id, tags.name AS name, COUNT(media_tags.media_id) AS count FROM tags INNER JOIN media_tags USING (tag_id) GROUP BY tag_id; CREATE VIEW tagged_media_view AS SELECT media.media_id AS media_id, media.seaweedfs_fid AS media_seaweedfs_fid, media.filename AS media_filename, media.content_type AS media_content_type, tags.tag_id AS tag_id, tags.name AS tag_name FROM media_tags INNER JOIN media USING (media_id) INNER JOIN tags USING (tag_id);