-- 交易模块数据库表创建脚本 (PostgreSQL 版本) -- 创建时间: 2024-08-07 -- 创建顺序调整: 先创建基础表 (unit, users, product),再创建依赖它们的表 -- 15. 单位表 (unit) CREATE TABLE unit ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, unit_name TEXT NOT NULL, unit_code TEXT UNIQUE, unit_type TEXT, industry TEXT, address TEXT, contact_person TEXT, contact_phone TEXT, contact_email TEXT, business_license TEXT, legal_person TEXT, registered_capital NUMERIC(15,2), establishment_date DATE, status TEXT DEFAULT '正常' CHECK (status IN ('正常', '冻结', '注销')), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE unit IS '单位表'; -- 14. 用户表 (users) - 避免关键字冲突 CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, username TEXT NOT NULL UNIQUE, real_name TEXT, email TEXT, phone TEXT, avatar TEXT, user_type TEXT DEFAULT '个人用户' CHECK (user_type IN ('个人用户', '单位用户')), unit_id BIGINT REFERENCES unit(id), unit_name TEXT, status TEXT DEFAULT '正常' CHECK (status IN ('正常', '冻结', '注销')), last_login_time TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE users IS '用户表'; -- 13. 产品表 (product) CREATE TABLE product ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, product_name TEXT NOT NULL, product_code TEXT NOT NULL UNIQUE, product_type TEXT, category TEXT, description TEXT, provider_id BIGINT NOT NULL REFERENCES users(id), provider_name TEXT NOT NULL, provider_type TEXT CHECK (provider_type IN ('企业', '个人')), status TEXT DEFAULT '上架' CHECK (status IN ('上架', '下架', '审核中', '已下架')), audit_status TEXT DEFAULT '待审核' CHECK (audit_status IN ('待审核', '审核通过', '审核驳回')), tags TEXT, cover_image TEXT, demo_url TEXT, doc_url TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by BIGINT REFERENCES users(id), updated_by BIGINT REFERENCES users(id), deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE product IS '产品表'; -- 1. 产品定价表 (product_pricing) CREATE TABLE product_pricing ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, suite_name TEXT NOT NULL, sales_form TEXT NOT NULL CHECK (sales_form IN ('买断', '租赁', '私有增包量', '公有增包量', 'OTA服务', '资源包', '个人')), customer_type TEXT NOT NULL CHECK (customer_type IN ('企业', '个人', '项目部')), account_limit TEXT DEFAULT '不限', concurrent_nodes TEXT DEFAULT '不限', price_type TEXT NOT NULL CHECK (price_type IN ('积分', '协议', '货币', '免费')), price_unit TEXT NOT NULL CHECK (price_unit IN ('套', '套/年', '年', '个', '次')), price NUMERIC(15,2) NOT NULL, is_active BOOLEAN DEFAULT TRUE, product_id BIGINT NOT NULL REFERENCES product(id), product_name TEXT, provider_id BIGINT REFERENCES users(id), provider_name TEXT, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by BIGINT REFERENCES users(id), updated_by BIGINT REFERENCES users(id), deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE product_pricing IS '产品定价表'; -- 积分表 (points) - 需在积分规则前创建 -- 积分表 (points) - 主表 CREATE TABLE points ( id BIGSERIAL PRIMARY KEY, points_name TEXT NOT NULL, effective_start DATE NOT NULL, modifier_id BIGINT NOT NULL, modifier_name TEXT NOT NULL, version TEXT NOT NULL, description TEXT, status TEXT DEFAULT '启用', created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, deleted SMALLINT DEFAULT 0 ); COMMENT ON TABLE points IS '积分主表'; COMMENT ON COLUMN points.points_name IS '积分名称'; COMMENT ON COLUMN points.effective_start IS '生效开始时间'; COMMENT ON COLUMN points.modifier_id IS '修改人ID'; COMMENT ON COLUMN points.modifier_name IS '修改人姓名'; COMMENT ON COLUMN points.version IS '版本号'; COMMENT ON COLUMN points.description IS '积分描述'; COMMENT ON COLUMN points.status IS '状态'; COMMENT ON COLUMN points.created_at IS '创建时间'; COMMENT ON COLUMN points.updated_at IS '更新时间'; COMMENT ON COLUMN points.deleted IS '逻辑删除'; ALTER TABLE points ADD CONSTRAINT chk_status CHECK (status IN ('启用', '禁用')); ALTER TABLE points ADD CONSTRAINT chk_deleted CHECK (deleted IN (0,1)); -- 积分规则表 (points_rule) CREATE TABLE points_rule ( id BIGSERIAL PRIMARY KEY, points_id BIGINT NOT NULL, rule_type TEXT NOT NULL, category TEXT NOT NULL, rule_name TEXT NOT NULL, rule_description TEXT, status TEXT DEFAULT '启用', created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, deleted SMALLINT DEFAULT 0 ); COMMENT ON TABLE points_rule IS '积分规则表'; COMMENT ON COLUMN points_rule.points_id IS '关联积分ID'; COMMENT ON COLUMN points_rule.rule_type IS '积分规则类型'; COMMENT ON COLUMN points_rule.category IS '积分类别'; COMMENT ON COLUMN points_rule.rule_name IS '规则名称'; COMMENT ON COLUMN points_rule.rule_description IS '规则描述'; COMMENT ON COLUMN points_rule.status IS '规则状态'; COMMENT ON COLUMN points_rule.created_at IS '创建时间'; COMMENT ON COLUMN points_rule.updated_at IS '更新时间'; COMMENT ON COLUMN points_rule.deleted IS '逻辑删除'; ALTER TABLE points_rule ADD CONSTRAINT fk_points FOREIGN KEY (points_id) REFERENCES points(id); ALTER TABLE points_rule ADD CONSTRAINT chk_rule_type CHECK (rule_type IN ('获取', '消耗')); ALTER TABLE points_rule ADD CONSTRAINT chk_category CHECK (category IN ('资源贡献', '资源传播', '资源交易', '交流社区互动')); ALTER TABLE points_rule ADD CONSTRAINT chk_rule_status CHECK (status IN ('启用', '禁用')); ALTER TABLE points_rule ADD CONSTRAINT chk_rule_deleted CHECK (deleted IN (0,1)); -- 积分规则详情表 (points_rule_detail) CREATE TABLE points_rule_detail ( id BIGSERIAL PRIMARY KEY, rule_id BIGINT NOT NULL, points_id BIGINT NOT NULL, points_value INTEGER NOT NULL, daily_limit INTEGER, monthly_limit INTEGER, yearly_limit INTEGER, min_value INTEGER DEFAULT 0, max_value INTEGER, conversion_rate NUMERIC(10,4) DEFAULT 1.0, effective_start DATE, effective_end DATE, created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, deleted SMALLINT DEFAULT 0 ); COMMENT ON TABLE points_rule_detail IS '积分规则详情表'; COMMENT ON COLUMN points_rule_detail.rule_id IS '关联积分规则ID'; COMMENT ON COLUMN points_rule_detail.points_id IS '关联积分ID'; COMMENT ON COLUMN points_rule_detail.points_value IS '积分值'; COMMENT ON COLUMN points_rule_detail.daily_limit IS '每日积分上限值'; COMMENT ON COLUMN points_rule_detail.monthly_limit IS '每月积分上限值'; COMMENT ON COLUMN points_rule_detail.yearly_limit IS '每年积分上限值'; COMMENT ON COLUMN points_rule_detail.min_value IS '最小值'; COMMENT ON COLUMN points_rule_detail.max_value IS '最大值'; COMMENT ON COLUMN points_rule_detail.conversion_rate IS '转换比率'; COMMENT ON COLUMN points_rule_detail.effective_start IS '生效开始时间'; COMMENT ON COLUMN points_rule_detail.effective_end IS '生效结束时间'; COMMENT ON COLUMN points_rule_detail.created_at IS '创建时间'; COMMENT ON COLUMN points_rule_detail.updated_at IS '更新时间'; COMMENT ON COLUMN points_rule_detail.deleted IS '逻辑删除'; ALTER TABLE points_rule_detail ADD CONSTRAINT fk_rule FOREIGN KEY (rule_id) REFERENCES points_rule(id); ALTER TABLE points_rule_detail ADD CONSTRAINT fk_detail_points FOREIGN KEY (points_id) REFERENCES points(id); ALTER TABLE points_rule_detail ADD CONSTRAINT chk_detail_deleted CHECK (deleted IN (0,1)); -- 积分流水表 (points_transaction) CREATE TABLE points_transaction ( id BIGSERIAL PRIMARY KEY, data_category TEXT NOT NULL, transaction_name TEXT NOT NULL, transaction_time TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, points_change INTEGER NOT NULL, rule_type TEXT NOT NULL, user_id BIGINT, unit_id BIGINT, user_type TEXT NOT NULL, rule_id BIGINT, detail_id BIGINT, created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, deleted SMALLINT DEFAULT 0 ); COMMENT ON TABLE points_transaction IS '积分流水表'; COMMENT ON COLUMN points_transaction.data_category IS '数据类目'; COMMENT ON COLUMN points_transaction.transaction_name IS '名称'; COMMENT ON COLUMN points_transaction.transaction_time IS '时间'; COMMENT ON COLUMN points_transaction.points_change IS '积分变动值'; COMMENT ON COLUMN points_transaction.rule_type IS '积分规则类型'; COMMENT ON COLUMN points_transaction.user_id IS '用户ID'; COMMENT ON COLUMN points_transaction.unit_id IS '企业ID'; COMMENT ON COLUMN points_transaction.user_type IS '用户类型'; COMMENT ON COLUMN points_transaction.rule_id IS '关联规则ID'; COMMENT ON COLUMN points_transaction.detail_id IS '关联规则详情ID'; COMMENT ON COLUMN points_transaction.created_at IS '创建时间'; COMMENT ON COLUMN points_transaction.deleted IS '逻辑删除'; ALTER TABLE points_transaction ADD CONSTRAINT chk_data_category CHECK (data_category IN ('用户参与', '其他')); ALTER TABLE points_transaction ADD CONSTRAINT chk_trans_rule_type CHECK (rule_type IN ('获取', '消耗')); ALTER TABLE points_transaction ADD CONSTRAINT chk_user_type CHECK (user_type IN ('单位用户', '个人用户')); ALTER TABLE points_transaction ADD CONSTRAINT fk_rule_id FOREIGN KEY (rule_id) REFERENCES points_rule(id); ALTER TABLE points_transaction ADD CONSTRAINT fk_detail_id FOREIGN KEY (detail_id) REFERENCES points_rule_detail(id); ALTER TABLE points_transaction ADD CONSTRAINT chk_trans_deleted CHECK (deleted IN (0,1)); -- 积分账户表 (points_account) CREATE TABLE points_account ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL, points_balance INTEGER NOT NULL DEFAULT 0, total_earned INTEGER NOT NULL DEFAULT 0, total_consumed INTEGER NOT NULL DEFAULT 0, account_type TEXT NOT NULL, account_status TEXT DEFAULT '正常', last_transaction_time TIMESTAMPTZ, created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, deleted SMALLINT DEFAULT 0 ); COMMENT ON TABLE points_account IS '积分账户表'; COMMENT ON COLUMN points_account.user_id IS '用户ID'; COMMENT ON COLUMN points_account.points_balance IS '积分余额'; COMMENT ON COLUMN points_account.total_earned IS '累计获取积分'; COMMENT ON COLUMN points_account.total_consumed IS '累计消耗积分'; COMMENT ON COLUMN points_account.account_type IS '账户类型'; COMMENT ON COLUMN points_account.account_status IS '账户状态'; COMMENT ON COLUMN points_account.last_transaction_time IS '最后交易时间'; COMMENT ON COLUMN points_account.created_at IS '创建时间'; COMMENT ON COLUMN points_account.updated_at IS '更新时间'; COMMENT ON COLUMN points_account.deleted IS '逻辑删除'; ALTER TABLE points_account ADD CONSTRAINT chk_account_type CHECK (account_type IN ('个人积分', '单位积分')); ALTER TABLE points_account ADD CONSTRAINT chk_account_status CHECK (account_status IN ('正常', '冻结', '注销')); ALTER TABLE points_account ADD CONSTRAINT chk_account_deleted CHECK (deleted IN (0,1)); -- 创建索引 CREATE INDEX idx_points_rule_points ON points_rule(points_id); CREATE INDEX idx_points_rule_type ON points_rule(rule_type); CREATE INDEX idx_points_detail_rule ON points_rule_detail(rule_id); CREATE INDEX idx_transaction_user ON points_transaction(user_id); CREATE INDEX idx_transaction_time ON points_transaction(transaction_time); CREATE INDEX idx_account_user ON points_account(user_id); -- 2. 购物车表 (shopping_cart) -- CREATE TABLE shopping_cart ( -- id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- user_id BIGINT NOT NULL REFERENCES users(id), -- unit_id BIGINT REFERENCES unit(id), -- suite_name TEXT NOT NULL, -- sales_form TEXT NOT NULL CHECK (sales_form IN ('买断', '租赁', '私有增包量', '公有增包量', 'OTA服务', '资源包', '个人')), -- customer_type TEXT NOT NULL CHECK (customer_type IN ('企业', '个人', '项目部')), -- account_limit TEXT DEFAULT '不限', -- concurrent_nodes TEXT DEFAULT '不限', -- price_type TEXT NOT NULL CHECK (price_type IN ('积分', '协议', '货币', '免费')), -- price_unit TEXT NOT NULL CHECK (price_unit IN ('套', '套/年', '年', '个', '次')), -- unit_price NUMERIC(15,2) NOT NULL, -- quantity INTEGER NOT NULL DEFAULT 1, -- duration INTEGER, -- product_id BIGINT NOT NULL REFERENCES product(id), -- product_name TEXT, -- provider_id BIGINT REFERENCES users(id), -- provider_name TEXT, -- total_amount NUMERIC(15,2), -- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) -- ); -- -- COMMENT ON TABLE shopping_cart IS '购物车表'; -- 购物车表 (cart) CREATE TABLE cart ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id), unit_id BIGINT NOT NULL REFERENCES unit(id), pricing_id BIGINT NOT NULL REFERENCES product_pricing(id), product_id BIGINT NOT NULL REFERENCES product(id), product_name TEXT, suite_name TEXT, sales_form TEXT, customer_type TEXT, account_limit TEXT, concurrent_nodes TEXT, price_type TEXT, price_unit TEXT, unit_price DECIMAL(15,2) NOT NULL, quantity INTEGER NOT NULL DEFAULT 1, duration INTEGER, total_price DECIMAL(15,2), provider_id BIGINT REFERENCES users(id), provider_name TEXT, remarks TEXT, add_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)), UNIQUE (user_id, unit_id, pricing_id, deleted) ); COMMENT ON TABLE cart IS '购物车表'; -- 3. 订单表 (order_info) CREATE TABLE order_info ( order_id TEXT PRIMARY KEY, product_id BIGINT NOT NULL REFERENCES product(id), user_id BIGINT NOT NULL REFERENCES users(id), unit_id BIGINT REFERENCES unit(id), product_name TEXT NOT NULL, provider_name TEXT NOT NULL, provider_id BIGINT NOT NULL REFERENCES users(id), apply_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, order_status TEXT NOT NULL DEFAULT '待审批' CHECK (order_status IN ('待审批', '待审批授权', '待授权', '待上传文件', '待交易确认', '已完成', '已取消', '已驳回')), total_amount NUMERIC(15,2) NOT NULL, payment_type TEXT CHECK (payment_type IN ('积分', '货币', '协议')), payment_status TEXT DEFAULT '未支付' CHECK (payment_status IN ('未支付', '已支付', '支付失败', '已退款')), workflow_id TEXT, current_step TEXT, approval_flow TEXT, buyer_remarks TEXT, seller_remarks TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE order_info IS '订单表'; -- 4. 订单详情表 (order_detail) CREATE TABLE order_detail ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, order_id TEXT NOT NULL REFERENCES order_info(order_id), pricing_id BIGINT NOT NULL REFERENCES product_pricing(id), product_id BIGINT NOT NULL REFERENCES product(id), suite_name TEXT NOT NULL, sales_form TEXT NOT NULL, customer_type TEXT NOT NULL, account_limit TEXT, concurrent_nodes TEXT, price_type TEXT NOT NULL, price_unit TEXT NOT NULL, unit_price NUMERIC(15,2) NOT NULL, quantity INTEGER NOT NULL, duration INTEGER, total_price NUMERIC(15,2) NOT NULL, provider_id BIGINT NOT NULL REFERENCES users(id), provider_name TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, remarks TEXT, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE order_detail IS '订单详情表'; -- 5. 订单附件表 (order_attachment) CREATE TABLE order_attachment ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, order_id TEXT NOT NULL REFERENCES order_info(order_id), file_name TEXT NOT NULL, original_name TEXT, file_type TEXT NOT NULL, file_size BIGINT NOT NULL, file_url TEXT NOT NULL, file_path TEXT, bucket_name TEXT, object_name TEXT, upload_user_id BIGINT REFERENCES users(id), upload_user_name TEXT, attachment_type TEXT CHECK (attachment_type IN ('合同', '发票', '其他')), description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE order_attachment IS '订单附件表'; -- 6. 订单审核表 (order_approval) CREATE TABLE order_approval ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, order_id TEXT NOT NULL REFERENCES order_info(order_id), approval_step TEXT NOT NULL, approval_type TEXT NOT NULL CHECK (approval_type IN ('审批', '授权')), approval_opinion TEXT, approval_result TEXT NOT NULL CHECK (approval_result IN ('通过', '驳回', '待处理')), approver_id BIGINT NOT NULL REFERENCES users(id), approver_name TEXT NOT NULL, approver_role TEXT, approval_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, next_approver_id BIGINT REFERENCES users(id), next_approver_name TEXT, workflow_status TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE order_approval IS '订单审核表'; -- 7. 订单评价表 (order_evaluation) CREATE TABLE order_evaluation ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, order_id TEXT NOT NULL REFERENCES order_info(order_id), evaluator_id BIGINT NOT NULL REFERENCES users(id), evaluator_name TEXT NOT NULL, evaluator_type TEXT NOT NULL CHECK (evaluator_type IN ('买家', '卖家')), content TEXT NOT NULL, rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5), service_rating INTEGER CHECK (service_rating >= 1 AND service_rating <= 5), quality_rating INTEGER CHECK (quality_rating >= 1 AND quality_rating <= 5), delivery_rating INTEGER CHECK (delivery_rating >= 1 AND delivery_rating <= 5), is_anonymous BOOLEAN DEFAULT FALSE, reply_content TEXT, reply_user_id BIGINT REFERENCES users(id), reply_time TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted INTEGER DEFAULT 0 CHECK (deleted IN (0,1)) ); COMMENT ON TABLE order_evaluation IS '订单评价表'; -- 创建索引 (PostgreSQL 语法) CREATE INDEX idx_product_pricing_product_id ON product_pricing(product_id); CREATE INDEX idx_product_pricing_status ON product_pricing(is_active); CREATE INDEX idx_order_info_user_id ON order_info(user_id); CREATE INDEX idx_order_info_provider_id ON order_info(provider_id); CREATE INDEX idx_order_info_status ON order_info(order_status); CREATE INDEX idx_order_info_apply_time ON order_info(apply_time); CREATE INDEX idx_order_detail_order_id ON order_detail(order_id); CREATE INDEX idx_order_attachment_order_id ON order_attachment(order_id); CREATE INDEX idx_order_approval_order_id ON order_approval(order_id); CREATE INDEX idx_order_approval_approver_id ON order_approval(approver_id); CREATE INDEX idx_order_evaluation_order_id ON order_evaluation(order_id); CREATE INDEX idx_order_evaluation_evaluator_id ON order_evaluation(evaluator_id); CREATE INDEX idx_points_rule_points_id ON points_rule(points_id); CREATE INDEX idx_points_rule_detail_rule_id ON points_rule_detail(rule_id); CREATE INDEX idx_product_provider_id ON product(provider_id); CREATE INDEX idx_product_status ON product(status); CREATE INDEX idx_users_unit_id ON users(unit_id); CREATE INDEX idx_users_status ON users(status); -- 购物车表索引 CREATE INDEX idx_cart_user_unit ON cart(user_id, unit_id, deleted); CREATE INDEX idx_cart_pricing ON cart(pricing_id, deleted); CREATE INDEX idx_cart_product ON cart(product_id, deleted); CREATE INDEX idx_cart_provider ON cart(provider_id, deleted); CREATE INDEX idx_cart_add_time ON cart(add_time, deleted); -- 添加列注释 (PostgreSQL 方式) COMMENT ON COLUMN product_pricing.suite_name IS '产品套件名称'; COMMENT ON COLUMN product_pricing.sales_form IS '销售形式'; -- 其他列注释按相同格式补充... INSERT INTO unit (unit_name, unit_code, unit_type, industry, status) VALUES ('测试企业', 'TEST_ENTERPRISE', '企业', '信息技术', '正常'), ('测试单位', 'TEST_UNIT', '事业单位', '教育', '正常'); INSERT INTO users (username, real_name, user_type, unit_id, status) VALUES ('admin', '系统管理员', '个人用户', NULL, '正常'), ('test_user', '测试用户', '个人用户', 1, '正常'), ('test_provider', '测试提供者', '单位用户', 1, '正常'); INSERT INTO product (product_name, product_code, product_type, category, description, provider_id, provider_name, status, audit_status) VALUES ('测试产品1', 'TEST_PRODUCT_001', '软件产品', '企业管理', '这是一个测试产品', 3, '测试提供者', '上架', '审核通过'), ('测试产品2', 'TEST_PRODUCT_002', '服务产品', '技术服务', '这是另一个测试产品', 3, '测试提供者', '上架', '审核通过'); INSERT INTO product_pricing (suite_name, sales_form, customer_type, price_type, price_unit, price, product_id, product_name, provider_id, provider_name, is_active) VALUES ('基础版', '买断', '企业', '积分', '套', 1000, 1, '测试产品1', 3, '测试提供者', true), ('专业版', '租赁', '企业', '积分', '套/年', 500, 1, '测试产品1', 3, '测试提供者', true), ('企业版', '买断', '企业', '货币', '套', 10000, 2, '测试产品2', 3, '测试提供者', true);