From c1cd6bc18d636e7080d074602a077c1216e4a8a7 Mon Sep 17 00:00:00 2001 From: selfrelease Date: Thu, 25 Jun 2026 21:38:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20conversations=20?= =?UTF-8?q?=E5=92=8C=20messages=20=E8=A1=A8=E7=94=A8=E4=BA=8E=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E5=BA=94=E7=94=A8=E7=A4=BA=E4=BE=8B=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 conversations 表(对话记录) - 创建 messages 表(对话消息) - 添加必要的索引和外键约束 - 为 seed_fazhiribao_demo_data.sql 准备表结构 --- ...000016_conversations_and_messages.down.sql | 5 +++ .../000016_conversations_and_messages.up.sql | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 server/migrations/000016_conversations_and_messages.down.sql create mode 100644 server/migrations/000016_conversations_and_messages.up.sql diff --git a/server/migrations/000016_conversations_and_messages.down.sql b/server/migrations/000016_conversations_and_messages.down.sql new file mode 100644 index 0000000..e4dfa2d --- /dev/null +++ b/server/migrations/000016_conversations_and_messages.down.sql @@ -0,0 +1,5 @@ +-- 回滚:删除 messages 表 +DROP TABLE IF EXISTS messages; + +-- 回滚:删除 conversations 表 +DROP TABLE IF EXISTS conversations; \ No newline at end of file diff --git a/server/migrations/000016_conversations_and_messages.up.sql b/server/migrations/000016_conversations_and_messages.up.sql new file mode 100644 index 0000000..5403c77 --- /dev/null +++ b/server/migrations/000016_conversations_and_messages.up.sql @@ -0,0 +1,35 @@ +-- 创建对话(conversations)表 +CREATE TABLE IF NOT EXISTS conversations ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + app_id UUID NOT NULL REFERENCES applications(id) ON DELETE CASCADE, + user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, + title VARCHAR(500) NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT NOW(), + updated_at TIMESTAMP NOT NULL DEFAULT NOW() +); + +-- 创建消息(messages)表 +CREATE TABLE IF NOT EXISTS messages ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE, + role VARCHAR(50) NOT NULL CHECK (role IN ('user', 'assistant', 'system')), + content TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT NOW() +); + +-- 创建索引以提升查询性能 +CREATE INDEX IF NOT EXISTS idx_conversations_app_id ON conversations(app_id); +CREATE INDEX IF NOT EXISTS idx_conversations_user_id ON conversations(user_id); +CREATE INDEX IF NOT EXISTS idx_conversations_created_at ON conversations(created_at DESC); +CREATE INDEX IF NOT EXISTS idx_messages_conversation_id ON messages(conversation_id); +CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at); + +-- 添加注释 +COMMENT ON TABLE conversations IS '应用对话记录表'; +COMMENT ON TABLE messages IS '对话消息表'; +COMMENT ON COLUMN conversations.app_id IS '关联的应用ID'; +COMMENT ON COLUMN conversations.user_id IS '发起对话的用户ID'; +COMMENT ON COLUMN conversations.title IS '对话标题'; +COMMENT ON COLUMN messages.conversation_id IS '所属对话ID'; +COMMENT ON COLUMN messages.role IS '消息角色:user/assistant/system'; +COMMENT ON COLUMN messages.content IS '消息内容'; \ No newline at end of file