jarun / buku

:bookmark: Personal mini-web in text
GNU General Public License v3.0
6.52k stars 294 forks source link

SQLite table for tags #736

Open sjehuda opened 6 months ago

sjehuda commented 6 months ago

Feature requests

This is a proposal to add two tables to the database.

Table: Bookmarks
Columns: Bookmark_ID, Bookmark_Title, ...

Table: Tags
Columns: Tag_ID, Tag_Name

Table: Bookmarks_Tags
Columns: Bookmark_ID, Tag_ID

This should be storage wise and accelerate queries.

See my implementation at Slixfeed/sqlite.py


        tagged_feeds_table_sql = (
            """
            CREATE TABLE IF NOT EXISTS tagged_feeds (
                id INTEGER NOT NULL,
                feed_id INTEGER NOT NULL,
                tag_id INTEGER NOT NULL,
                FOREIGN KEY ("feed_id") REFERENCES "feeds" ("id")
                  ON UPDATE CASCADE
                  ON DELETE CASCADE,
                FOREIGN KEY ("tag_id") REFERENCES "tags" ("id")
                  ON UPDATE CASCADE
                  ON DELETE CASCADE,
                PRIMARY KEY ("id")
              );
            """
            )
LeXofLeviafan commented 6 months ago
                id INTEGER NOT NULL,
                feed_id INTEGER NOT NULL,
                tag_id INTEGER NOT NULL,
--              ...
                PRIMARY KEY ("id")

Wouldn't the primary key be normally feed_id, tag_id in such tables (without a need for a dedicated id column)?

sjehuda commented 6 months ago

Yes, and I think this is what Liferea does too.

I am not an expert, so please do not consider my advises fully.


If we do this, loading of tags will be faster, yes? See #559 #594