-- memo_share stores per-memo share grants (one row per share link). -- uid is the opaque bearer token included in the share URL. -- ON DELETE CASCADE ensures grants are cleaned up when the parent memo is deleted. CREATE TABLE memo_share ( id INTEGER PRIMARY KEY AUTOINCREMENT, uid TEXT NOT NULL UNIQUE, memo_id INTEGER NOT NULL, creator_id INTEGER NOT NULL, created_ts BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), expires_ts BIGINT DEFAULT NULL, FOREIGN KEY (memo_id) REFERENCES memo(id) ON DELETE CASCADE ); CREATE INDEX idx_memo_share_memo_id ON memo_share(memo_id);