Implements KNOW-001 - KnowledgeEntry, Version, Link, Tag, Embedding models - Full indexes and constraints - Seed data for testing
159 lines
5.6 KiB
SQL
159 lines
5.6 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "EntryStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "Visibility" AS ENUM ('PRIVATE', 'WORKSPACE', 'PUBLIC');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "user_layouts" ADD COLUMN "metadata" JSONB NOT NULL DEFAULT '{}';
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "knowledge_entries" (
|
|
"id" UUID NOT NULL,
|
|
"workspace_id" UUID NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"content_html" TEXT,
|
|
"summary" TEXT,
|
|
"status" "EntryStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"visibility" "Visibility" NOT NULL DEFAULT 'PRIVATE',
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
"created_by" UUID NOT NULL,
|
|
"updated_by" UUID NOT NULL,
|
|
|
|
CONSTRAINT "knowledge_entries_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "knowledge_entry_versions" (
|
|
"id" UUID NOT NULL,
|
|
"entry_id" UUID NOT NULL,
|
|
"version" INTEGER NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"summary" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"created_by" UUID NOT NULL,
|
|
"change_note" TEXT,
|
|
|
|
CONSTRAINT "knowledge_entry_versions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "knowledge_links" (
|
|
"id" UUID NOT NULL,
|
|
"source_id" UUID NOT NULL,
|
|
"target_id" UUID NOT NULL,
|
|
"link_text" TEXT NOT NULL,
|
|
"context" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "knowledge_links_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "knowledge_tags" (
|
|
"id" UUID NOT NULL,
|
|
"workspace_id" UUID NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"color" TEXT,
|
|
"description" TEXT,
|
|
|
|
CONSTRAINT "knowledge_tags_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "knowledge_entry_tags" (
|
|
"entry_id" UUID NOT NULL,
|
|
"tag_id" UUID NOT NULL,
|
|
|
|
CONSTRAINT "knowledge_entry_tags_pkey" PRIMARY KEY ("entry_id","tag_id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "knowledge_embeddings" (
|
|
"id" UUID NOT NULL,
|
|
"entry_id" UUID NOT NULL,
|
|
"embedding" vector(1536) NOT NULL,
|
|
"model" TEXT NOT NULL,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "knowledge_embeddings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entries_workspace_id_status_idx" ON "knowledge_entries"("workspace_id", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entries_workspace_id_updated_at_idx" ON "knowledge_entries"("workspace_id", "updated_at");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entries_created_by_idx" ON "knowledge_entries"("created_by");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entries_updated_by_idx" ON "knowledge_entries"("updated_by");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "knowledge_entries_workspace_id_slug_key" ON "knowledge_entries"("workspace_id", "slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entry_versions_entry_id_version_idx" ON "knowledge_entry_versions"("entry_id", "version");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "knowledge_entry_versions_entry_id_version_key" ON "knowledge_entry_versions"("entry_id", "version");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_links_source_id_idx" ON "knowledge_links"("source_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_links_target_id_idx" ON "knowledge_links"("target_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "knowledge_links_source_id_target_id_key" ON "knowledge_links"("source_id", "target_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_tags_workspace_id_idx" ON "knowledge_tags"("workspace_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "knowledge_tags_workspace_id_slug_key" ON "knowledge_tags"("workspace_id", "slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entry_tags_entry_id_idx" ON "knowledge_entry_tags"("entry_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_entry_tags_tag_id_idx" ON "knowledge_entry_tags"("tag_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "knowledge_embeddings_entry_id_key" ON "knowledge_embeddings"("entry_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "knowledge_embeddings_entry_id_idx" ON "knowledge_embeddings"("entry_id");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_entries" ADD CONSTRAINT "knowledge_entries_workspace_id_fkey" FOREIGN KEY ("workspace_id") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_entry_versions" ADD CONSTRAINT "knowledge_entry_versions_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_links" ADD CONSTRAINT "knowledge_links_source_id_fkey" FOREIGN KEY ("source_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_links" ADD CONSTRAINT "knowledge_links_target_id_fkey" FOREIGN KEY ("target_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_tags" ADD CONSTRAINT "knowledge_tags_workspace_id_fkey" FOREIGN KEY ("workspace_id") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_entry_tags" ADD CONSTRAINT "knowledge_entry_tags_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_entry_tags" ADD CONSTRAINT "knowledge_entry_tags_tag_id_fkey" FOREIGN KEY ("tag_id") REFERENCES "knowledge_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "knowledge_embeddings" ADD CONSTRAINT "knowledge_embeddings_entry_id_fkey" FOREIGN KEY ("entry_id") REFERENCES "knowledge_entries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|