Import source: src-tauri/migrations/0001_init.sql
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
-- Notara initial schema (see PLAN.md — Data Model)
|
||||
|
||||
CREATE TABLE workspace_meta (
|
||||
id INTEGER PRIMARY KEY CHECK (id = 1),
|
||||
name TEXT NOT NULL DEFAULT 'My Workspace',
|
||||
theme TEXT NOT NULL DEFAULT 'system',
|
||||
accent TEXT NOT NULL DEFAULT '#2383e2',
|
||||
onboarded INTEGER NOT NULL DEFAULT 0,
|
||||
last_page_id TEXT,
|
||||
settings JSON NOT NULL DEFAULT '{}'
|
||||
);
|
||||
INSERT INTO workspace_meta (id) VALUES (1);
|
||||
|
||||
CREATE TABLE pages (
|
||||
id TEXT PRIMARY KEY,
|
||||
parent_id TEXT REFERENCES pages(id) ON DELETE CASCADE,
|
||||
title TEXT NOT NULL DEFAULT '',
|
||||
icon TEXT,
|
||||
cover TEXT,
|
||||
sort_order REAL NOT NULL DEFAULT 0,
|
||||
is_favorite INTEGER NOT NULL DEFAULT 0,
|
||||
in_trash INTEGER NOT NULL DEFAULT 0,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL
|
||||
);
|
||||
CREATE INDEX idx_pages_parent ON pages(parent_id);
|
||||
CREATE INDEX idx_pages_trash ON pages(in_trash);
|
||||
|
||||
-- Page body as a Yjs document (CRDT): Y.encodeStateAsUpdate(doc)
|
||||
CREATE TABLE page_docs (
|
||||
page_id TEXT PRIMARY KEY REFERENCES pages(id) ON DELETE CASCADE,
|
||||
ydoc BLOB NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE databases (
|
||||
id TEXT PRIMARY KEY,
|
||||
page_id TEXT NOT NULL REFERENCES pages(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL DEFAULT ''
|
||||
);
|
||||
|
||||
CREATE TABLE db_properties (
|
||||
id TEXT PRIMARY KEY,
|
||||
database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
config JSON NOT NULL DEFAULT '{}',
|
||||
sort_order REAL NOT NULL DEFAULT 0
|
||||
);
|
||||
CREATE INDEX idx_props_db ON db_properties(database_id);
|
||||
|
||||
CREATE TABLE db_rows (
|
||||
id TEXT PRIMARY KEY,
|
||||
database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
|
||||
page_id TEXT NOT NULL REFERENCES pages(id) ON DELETE CASCADE,
|
||||
sort_order REAL NOT NULL DEFAULT 0
|
||||
);
|
||||
CREATE INDEX idx_rows_db ON db_rows(database_id);
|
||||
|
||||
CREATE TABLE db_values (
|
||||
row_id TEXT NOT NULL REFERENCES db_rows(id) ON DELETE CASCADE,
|
||||
property_id TEXT NOT NULL REFERENCES db_properties(id) ON DELETE CASCADE,
|
||||
value JSON,
|
||||
PRIMARY KEY (row_id, property_id)
|
||||
);
|
||||
|
||||
CREATE TABLE db_views (
|
||||
id TEXT PRIMARY KEY,
|
||||
database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
filters JSON NOT NULL DEFAULT '[]',
|
||||
sorts JSON NOT NULL DEFAULT '[]',
|
||||
groups JSON NOT NULL DEFAULT 'null',
|
||||
visible_props JSON NOT NULL DEFAULT 'null',
|
||||
sort_order REAL NOT NULL DEFAULT 0
|
||||
);
|
||||
CREATE INDEX idx_views_db ON db_views(database_id);
|
||||
|
||||
-- Full-text search mirror (title + plain-text body extracted from the Y.Doc)
|
||||
CREATE VIRTUAL TABLE pages_fts USING fts5(page_id UNINDEXED, title, body);
|
||||
Reference in New Issue
Block a user