Files
crm_project/server/database/migration_v5.sql
T
hankin 423baff73b v0.1.0: CRM/ERP 系统内测版本 - 安全加固完成
- Docker bridge 网络隔离(8000 端口封死)
- Gunicorn 4 Worker 多进程
- Alembic 数据库迁移基线
- 日志轮转 20m×3
- JWT 密钥 + DB 密码 + CORS 收紧
- 3-2-1 备份链路(NAS + R740-B 冷备)
- 连接池 pool_pre_ping + pool_recycle=3600
2026-03-16 07:31:37 +00:00

43 lines
2.4 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ═══════════════════════════════════════════════════════════════
-- V5.0 ERP 智能化升级 — 底层数据物理基座重构
-- ═══════════════════════════════════════════════════════════════
-- 1. 创建 crm_contacts 子表 (联系人维度,1:N 映射到 crm_customers)
CREATE TABLE IF NOT EXISTS crm_contacts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer_id UUID NOT NULL REFERENCES crm_customers(id) ON DELETE CASCADE,
name VARCHAR(100) NOT NULL,
phone VARCHAR(30),
title VARCHAR(100), -- 职位/头衔
ai_buyer_persona JSONB DEFAULT '{}'::jsonb, -- 联系人级 AI 画像
is_deleted BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
COMMENT ON TABLE crm_contacts IS '客户联系人子表 (V5.0)';
COMMENT ON COLUMN crm_contacts.customer_id IS '关联的客户 UUID';
COMMENT ON COLUMN crm_contacts.name IS '联系人姓名';
COMMENT ON COLUMN crm_contacts.phone IS '联系人电话';
COMMENT ON COLUMN crm_contacts.title IS '职位/头衔';
COMMENT ON COLUMN crm_contacts.ai_buyer_persona IS '联系人个体画像 JSONBrole / kpi / preference';
-- 索引
CREATE INDEX IF NOT EXISTS idx_contacts_customer ON crm_contacts(customer_id);
CREATE INDEX IF NOT EXISTS idx_contacts_not_deleted ON crm_contacts(customer_id) WHERE is_deleted = FALSE;
-- updated_at 自动更新触发器
CREATE OR REPLACE FUNCTION trg_contacts_updated() RETURNS TRIGGER AS $$
BEGIN NEW.updated_at = NOW(); RETURN NEW; END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trg_crm_contacts_updated ON crm_contacts;
CREATE TRIGGER trg_crm_contacts_updated
BEFORE UPDATE ON crm_contacts
FOR EACH ROW EXECUTE FUNCTION trg_contacts_updated();
-- 2. sales_logs 新增 contact_ids 字段 (JSONB Array,允许一次沟通涉及多个联系人)
ALTER TABLE sales_logs ADD COLUMN IF NOT EXISTS contact_ids JSONB DEFAULT '[]'::jsonb;
COMMENT ON COLUMN sales_logs.contact_ids IS '本次沟通涉及的联系人 UUID 列表 (JSONB Array)';