40 lines
2.0 KiB
SQL
40 lines
2.0 KiB
SQL
-- 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)';
|