74 lines
3.1 KiB
SQL
74 lines
3.1 KiB
SQL
-- Chat Switchboard — 006 Knowledge Bases (SQLite)
|
|
|
|
CREATE TABLE IF NOT EXISTS knowledge_bases (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
description TEXT NOT NULL DEFAULT '',
|
|
scope TEXT NOT NULL DEFAULT 'global',
|
|
owner_id TEXT REFERENCES users(id) ON DELETE CASCADE,
|
|
team_id TEXT REFERENCES teams(id) ON DELETE CASCADE,
|
|
embedding_config TEXT NOT NULL DEFAULT '{}',
|
|
document_count INTEGER NOT NULL DEFAULT 0,
|
|
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
total_bytes INTEGER NOT NULL DEFAULT 0,
|
|
status TEXT NOT NULL DEFAULT 'active',
|
|
discoverable INTEGER NOT NULL DEFAULT 1,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_kb_scope ON knowledge_bases(scope);
|
|
CREATE INDEX IF NOT EXISTS idx_kb_owner ON knowledge_bases(owner_id);
|
|
CREATE INDEX IF NOT EXISTS idx_kb_team ON knowledge_bases(team_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS kb_documents (
|
|
id TEXT PRIMARY KEY,
|
|
kb_id TEXT NOT NULL REFERENCES knowledge_bases(id) ON DELETE CASCADE,
|
|
filename TEXT NOT NULL,
|
|
content_type TEXT NOT NULL,
|
|
size_bytes INTEGER NOT NULL,
|
|
storage_key TEXT NOT NULL,
|
|
extracted_text TEXT,
|
|
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
status TEXT NOT NULL DEFAULT 'pending',
|
|
error TEXT,
|
|
uploaded_by TEXT NOT NULL REFERENCES users(id),
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_kbdoc_kb ON kb_documents(kb_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS kb_chunks (
|
|
id TEXT PRIMARY KEY,
|
|
kb_id TEXT NOT NULL REFERENCES knowledge_bases(id) ON DELETE CASCADE,
|
|
document_id TEXT NOT NULL REFERENCES kb_documents(id) ON DELETE CASCADE,
|
|
chunk_index INTEGER NOT NULL,
|
|
content TEXT NOT NULL,
|
|
token_count INTEGER NOT NULL DEFAULT 0,
|
|
metadata TEXT NOT NULL DEFAULT '{}',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_kbchunk_kb ON kb_chunks(kb_id);
|
|
CREATE INDEX IF NOT EXISTS idx_kbchunk_doc ON kb_chunks(document_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS channel_knowledge_bases (
|
|
channel_id TEXT NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
|
|
kb_id TEXT NOT NULL REFERENCES knowledge_bases(id) ON DELETE CASCADE,
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
added_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
PRIMARY KEY (channel_id, kb_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS persona_knowledge_bases (
|
|
persona_id TEXT NOT NULL REFERENCES personas(id) ON DELETE CASCADE,
|
|
kb_id TEXT NOT NULL REFERENCES knowledge_bases(id) ON DELETE CASCADE,
|
|
auto_search INTEGER NOT NULL DEFAULT 0,
|
|
added_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
PRIMARY KEY (persona_id, kb_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_persona_kb_persona ON persona_knowledge_bases(persona_id);
|
|
CREATE INDEX IF NOT EXISTS idx_persona_kb_kb ON persona_knowledge_bases(kb_id);
|