Files
llm-intelligence/db/migrations/005_subscription_plan.sql

40 lines
2.0 KiB
MySQL
Raw Permalink Normal View History

-- Phase 2: 腾讯云 / 订阅型套餐价格模型
CREATE TABLE IF NOT EXISTS subscription_plan (
id BIGSERIAL PRIMARY KEY,
provider_id BIGINT NOT NULL REFERENCES model_provider(id) ON DELETE CASCADE,
operator_id BIGINT REFERENCES operator(id) ON DELETE SET NULL,
plan_family TEXT NOT NULL CHECK (plan_family IN ('token_plan', 'coding_plan')),
plan_code TEXT NOT NULL,
plan_name TEXT NOT NULL,
tier TEXT NOT NULL,
billing_cycle TEXT NOT NULL DEFAULT 'monthly',
currency TEXT NOT NULL DEFAULT 'CNY',
list_price REAL NOT NULL CHECK (list_price >= 0),
price_unit TEXT NOT NULL,
quota_value BIGINT,
quota_unit TEXT,
context_window INTEGER,
plan_scope TEXT,
model_scope TEXT NOT NULL DEFAULT '[]',
source_url TEXT NOT NULL,
published_at TIMESTAMP,
effective_date DATE NOT NULL DEFAULT CURRENT_DATE,
notes TEXT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by TEXT DEFAULT 'system',
updated_by TEXT DEFAULT 'system',
UNIQUE (provider_id, plan_code, effective_date),
CONSTRAINT chk_subscription_plan_currency CHECK (currency IN ('CNY', 'USD', 'EUR')),
CONSTRAINT chk_subscription_plan_quota_non_negative CHECK (quota_value IS NULL OR quota_value >= 0),
CONSTRAINT chk_subscription_plan_context_non_negative CHECK (context_window IS NULL OR context_window >= 0)
);
CREATE INDEX IF NOT EXISTS idx_subscription_plan_provider_id ON subscription_plan(provider_id);
CREATE INDEX IF NOT EXISTS idx_subscription_plan_operator_id ON subscription_plan(operator_id);
CREATE INDEX IF NOT EXISTS idx_subscription_plan_family ON subscription_plan(plan_family);
CREATE INDEX IF NOT EXISTS idx_subscription_plan_effective_date ON subscription_plan(effective_date);
COMMENT ON TABLE subscription_plan IS '订阅型套餐价格信息(如腾讯云 Token Plan / Coding Plan';