Files
wiki/schema.sql
T
Sorin Savu dcc6bba61b upgrades
2026-07-13 09:51:28 +03:00

58 lines
2.6 KiB
SQL

-- Wiki schema. Run via migrate.py (which also CREATEs the database and imports
-- the existing work-notes.md). All statements are idempotent (IF NOT EXISTS).
CREATE TABLE IF NOT EXISTS notes (
id INT AUTO_INCREMENT PRIMARY KEY,
slug VARCHAR(255) NOT NULL UNIQUE,
title VARCHAR(255) NOT NULL,
body_md MEDIUMTEXT NOT NULL,
archived TINYINT(1) NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FULLTEXT KEY ft_notes (title, body_md)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Snapshots written only when the user supplies a message on save
-- (mirrors the old "Create a new version?" git-commit behaviour).
CREATE TABLE IF NOT EXISTS note_versions (
id INT AUTO_INCREMENT PRIMARY KEY,
note_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
body_md MEDIUMTEXT NOT NULL,
message VARCHAR(500),
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_ver_note (note_id),
CONSTRAINT fk_ver_note FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS attachments (
id INT AUTO_INCREMENT PRIMARY KEY,
note_id INT NULL,
filename VARCHAR(255) NOT NULL,
mime_type VARCHAR(128) NOT NULL,
size INT NOT NULL,
sha256 CHAR(64) NOT NULL,
data LONGBLOB NOT NULL,
ocr_text MEDIUMTEXT NULL,
ocr_status ENUM('pending','done','failed','skipped') NOT NULL DEFAULT 'pending',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_sha (sha256),
KEY idx_ocr_status (ocr_status),
CONSTRAINT fk_att_note FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE SET NULL,
FULLTEXT KEY ft_ocr (ocr_text)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- One row per [[wiki link]] found in a note body. to_note_id is NULL while the
-- target note does not yet exist (broken / forward link). Powers backlinks.
CREATE TABLE IF NOT EXISTS links (
id INT AUTO_INCREMENT PRIMARY KEY,
from_note_id INT NOT NULL,
to_slug VARCHAR(255) NOT NULL,
to_note_id INT NULL,
KEY idx_link_from (from_note_id),
KEY idx_link_to_slug (to_slug),
KEY idx_link_to_note (to_note_id),
CONSTRAINT fk_link_from FOREIGN KEY (from_note_id) REFERENCES notes(id) ON DELETE CASCADE,
CONSTRAINT fk_link_to FOREIGN KEY (to_note_id) REFERENCES notes(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;