mi-assessment/server/MiAssessment/scripts/init_business_db.sql
18631081161 34030cf2ea
All checks were successful
continuous-integration/drone/push Build is passing
界面优化
2026-04-07 19:58:30 +08:00

863 lines
44 KiB
Transact-SQL
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.

-- =============================================
-- Business Database Initialization Script
-- 学业邑规划 - MiAssessment
--
-- This script creates all tables for the Business database
-- and inserts default configuration data
--
-- Database: SQL Server 2022
-- =============================================
USE [MiAssessment_Business];
GO
-- =============================================
-- 1. Create Users Table (用户表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[users]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[users] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[Uid] NVARCHAR(6) NOT NULL, -- 用户UID6位数字
[OpenId] NVARCHAR(64) NOT NULL, -- 微信OpenId
[UnionId] NVARCHAR(64) NULL, -- 微信UnionId
[GzhOpenId] NVARCHAR(64) NULL, -- 公众号OpenId
[Phone] NVARCHAR(20) NULL, -- 手机号
[Nickname] NVARCHAR(50) NULL, -- 昵称
[Avatar] NVARCHAR(500) NULL, -- 头像URL
[UserLevel] INT NOT NULL DEFAULT 1, -- 用户等级1普通用户 2合伙人 3渠道合伙人
[ParentUserId] BIGINT NULL, -- 上级用户ID
[InviteCode] NVARCHAR(10) NULL, -- 用户专属邀请码
[Balance] DECIMAL(10,2) NOT NULL DEFAULT 0, -- 可提现余额
[TotalIncome] DECIMAL(10,2) NOT NULL DEFAULT 0,-- 累计收益
[WithdrawnAmount] DECIMAL(10,2) NOT NULL DEFAULT 0, -- 已提现金额
[Status] INT NOT NULL DEFAULT 1, -- 状态0禁用 1正常
[IsTest] INT NOT NULL DEFAULT 0, -- 是否测试用户
[LastLoginTime] DATETIME2 NULL, -- 最后登录时间
[LastLoginIp] NVARCHAR(50) NULL, -- 最后登录IP
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE UNIQUE NONCLUSTERED INDEX [UK_users_uid] ON [dbo].[users] ([Uid] ASC);
CREATE UNIQUE NONCLUSTERED INDEX [UK_users_open_id] ON [dbo].[users] ([OpenId] ASC);
CREATE NONCLUSTERED INDEX [IX_users_phone] ON [dbo].[users] ([Phone] ASC) WHERE [Phone] IS NOT NULL;
CREATE NONCLUSTERED INDEX [IX_users_parent_user_id] ON [dbo].[users] ([ParentUserId] ASC);
CREATE NONCLUSTERED INDEX [IX_users_user_level] ON [dbo].[users] ([UserLevel] ASC);
PRINT N'Table users created successfully';
END
GO
-- =============================================
-- 2. Create User Refresh Tokens Table (刷新令牌表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[user_refresh_tokens]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[user_refresh_tokens] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[UserId] BIGINT NOT NULL,
[TokenHash] NVARCHAR(256) NOT NULL,
[ExpiresAt] DATETIME2 NOT NULL,
[CreatedAt] DATETIME2 NOT NULL DEFAULT GETDATE(),
[CreatedByIp] NVARCHAR(50) NULL,
[RevokedAt] DATETIME2 NULL,
[RevokedByIp] NVARCHAR(50) NULL,
[ReplacedByToken] NVARCHAR(256) NULL,
CONSTRAINT [PK_user_refresh_tokens] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_user_refresh_tokens_user_id] ON [dbo].[user_refresh_tokens] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_user_refresh_tokens_token_hash] ON [dbo].[user_refresh_tokens] ([TokenHash] ASC);
PRINT N'Table user_refresh_tokens created successfully';
END
GO
-- =============================================
-- 3. Create User Login Logs Table (登录日志表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[user_login_logs]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[user_login_logs] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[UserId] BIGINT NOT NULL,
[LoginType] NVARCHAR(20) NOT NULL,
[LoginIp] NVARCHAR(50) NULL,
[UserAgent] NVARCHAR(500) NULL,
[Platform] NVARCHAR(20) NULL,
[Status] INT NOT NULL DEFAULT 1,
[FailReason] NVARCHAR(200) NULL,
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PK_user_login_logs] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_user_login_logs_user_id] ON [dbo].[user_login_logs] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_user_login_logs_create_time] ON [dbo].[user_login_logs] ([CreateTime] DESC);
PRINT N'Table user_login_logs created successfully';
END
GO
-- =============================================
-- 4. Create Banners Table (轮播图表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[banners]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[banners] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[Title] NVARCHAR(100) NULL, -- 标题
[ImageUrl] NVARCHAR(500) NOT NULL, -- 图片URL
[LinkType] INT NOT NULL DEFAULT 0, -- 跳转类型0无 1内部页面 2外部链接 3小程序
[LinkUrl] NVARCHAR(500) NULL, -- 跳转地址
[AppId] NVARCHAR(50) NULL, -- 小程序AppId
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[Status] INT NOT NULL DEFAULT 1, -- 状态0禁用 1启用
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_banners] PRIMARY KEY CLUSTERED ([Id] ASC)
);
PRINT N'Table banners created successfully';
END
GO
-- =============================================
-- 5. Create Promotions Table (宣传图表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[promotions]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[promotions] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[Title] NVARCHAR(100) NULL, -- 标题
[ImageUrl] NVARCHAR(500) NOT NULL, -- 图片URL
[Position] INT NOT NULL DEFAULT 1, -- 位置1首页底部 2团队页
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[Status] INT NOT NULL DEFAULT 1, -- 状态0禁用 1启用
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_promotions] PRIMARY KEY CLUSTERED ([Id] ASC)
);
PRINT N'Table promotions created successfully';
END
GO
-- =============================================
-- 6. Create Assessment Types Table (测评类型表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[assessment_types]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[assessment_types] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[Name] NVARCHAR(50) NOT NULL, -- 测评名称
[Code] NVARCHAR(50) NOT NULL, -- 测评编码
[ImageUrl] NVARCHAR(500) NULL, -- 入口图片
[IntroContent] NVARCHAR(MAX) NULL, -- 介绍内容
[Price] DECIMAL(10,2) NOT NULL DEFAULT 0, -- 价格
[QuestionCount] INT NOT NULL DEFAULT 80, -- 题目数量
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[Status] INT NOT NULL DEFAULT 1, -- 状态0已下线 1已上线 2即将上线
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_assessment_types] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE UNIQUE NONCLUSTERED INDEX [UK_assessment_types_code] ON [dbo].[assessment_types] ([Code] ASC);
PRINT N'Table assessment_types created successfully';
END
GO
-- =============================================
-- 7. Create Questions Table (题目表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[questions]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[questions] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[AssessmentTypeId] BIGINT NOT NULL, -- 测评类型ID
[QuestionNo] INT NOT NULL, -- 题号
[Content] NVARCHAR(1000) NOT NULL, -- 题目内容
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[Status] INT NOT NULL DEFAULT 1, -- 状态0禁用 1启用
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_questions] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_questions_assessment_type_id] ON [dbo].[questions] ([AssessmentTypeId] ASC);
CREATE UNIQUE NONCLUSTERED INDEX [UK_questions_type_no] ON [dbo].[questions] ([AssessmentTypeId], [QuestionNo]);
PRINT N'Table questions created successfully';
END
GO
-- =============================================
-- 8. Create Report Categories Table (报告分类表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[report_categories]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[report_categories] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[AssessmentTypeId] BIGINT NOT NULL, -- 测评类型ID
[ParentId] BIGINT NOT NULL DEFAULT 0, -- 父分类ID
[Name] NVARCHAR(50) NOT NULL, -- 分类名称
[Code] NVARCHAR(50) NOT NULL, -- 分类编码
[CategoryType] INT NOT NULL, -- 分类类型1八大智能 2个人特质 3细分能力 4先天学习 5学习能力 6大脑类型 7性格类型 8未来能力
[ScoreRule] INT NOT NULL DEFAULT 1, -- 计分规则1累加(1-10分) 2二值(0/1分)
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_report_categories] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_report_categories_assessment_type_id] ON [dbo].[report_categories] ([AssessmentTypeId] ASC);
CREATE NONCLUSTERED INDEX [IX_report_categories_parent_id] ON [dbo].[report_categories] ([ParentId] ASC);
CREATE NONCLUSTERED INDEX [IX_report_categories_category_type] ON [dbo].[report_categories] ([CategoryType] ASC);
PRINT N'Table report_categories created successfully';
END
GO
-- =============================================
-- 9. Create Question Category Mappings Table (题目分类映射表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[question_category_mappings]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[question_category_mappings] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[QuestionId] BIGINT NOT NULL, -- 题目ID
[CategoryId] BIGINT NOT NULL, -- 分类ID
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PK_question_category_mappings] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_question_category_mappings_question_id] ON [dbo].[question_category_mappings] ([QuestionId] ASC);
CREATE NONCLUSTERED INDEX [IX_question_category_mappings_category_id] ON [dbo].[question_category_mappings] ([CategoryId] ASC);
CREATE UNIQUE NONCLUSTERED INDEX [UK_question_category_mappings] ON [dbo].[question_category_mappings] ([QuestionId], [CategoryId]);
PRINT N'Table question_category_mappings created successfully';
END
GO
-- =============================================
-- 10. Create Report Conclusions Table (报告结论表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[report_conclusions]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[report_conclusions] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[CategoryId] BIGINT NOT NULL, -- 分类ID
[ConclusionType] INT NOT NULL, -- 结论类型1最强 2较强 3较弱 4最弱
[Title] NVARCHAR(100) NULL, -- 结论标题
[Content] NVARCHAR(MAX) NOT NULL, -- 结论内容
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_report_conclusions] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_report_conclusions_category_id] ON [dbo].[report_conclusions] ([CategoryId] ASC);
PRINT N'Table report_conclusions created successfully';
END
GO
-- =============================================
-- 11. Create Orders Table (订单表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[orders]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[orders] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[OrderNo] NVARCHAR(32) NOT NULL, -- 订单编号
[UserId] BIGINT NOT NULL, -- 用户ID
[OrderType] INT NOT NULL, -- 订单类型1测评订单 2学业规划订单
[ProductId] BIGINT NOT NULL, -- 商品ID
[ProductName] NVARCHAR(100) NOT NULL, -- 商品名称
[Amount] DECIMAL(10,2) NOT NULL, -- 订单金额
[PayAmount] DECIMAL(10,2) NOT NULL, -- 实付金额
[PayType] INT NULL, -- 支付方式1微信支付 2邀请码
[InviteCodeId] BIGINT NULL, -- 使用的邀请码ID
[Status] INT NOT NULL DEFAULT 1, -- 状态1待支付 2已支付 3已完成 4退款中 5已退款 6已取消
[PayTime] DATETIME2 NULL, -- 支付时间
[TransactionId] NVARCHAR(64) NULL, -- 微信支付交易号
[RefundTime] DATETIME2 NULL, -- 退款时间
[RefundAmount] DECIMAL(10,2) NULL, -- 退款金额
[RefundReason] NVARCHAR(500) NULL, -- 退款原因
[Remark] NVARCHAR(500) NULL, -- 备注
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_orders] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE UNIQUE NONCLUSTERED INDEX [UK_orders_order_no] ON [dbo].[orders] ([OrderNo] ASC);
CREATE NONCLUSTERED INDEX [IX_orders_user_id] ON [dbo].[orders] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_orders_status] ON [dbo].[orders] ([Status] ASC);
CREATE NONCLUSTERED INDEX [IX_orders_create_time] ON [dbo].[orders] ([CreateTime] DESC);
CREATE NONCLUSTERED INDEX [IX_orders_order_type] ON [dbo].[orders] ([OrderType] ASC);
PRINT N'Table orders created successfully';
END
GO
-- =============================================
-- 12. Create Order Notifies Table (订单通知表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[order_notifies]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[order_notifies] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[OrderNo] NVARCHAR(64) NOT NULL,
[TransactionId] NVARCHAR(64) NULL,
[NotifyUrl] NVARCHAR(500) NULL,
[NonceStr] NVARCHAR(64) NULL,
[PayTime] DATETIME2 NULL,
[PayAmount] DECIMAL(10,2) NOT NULL DEFAULT 0,
[Status] INT NOT NULL DEFAULT 0,
[RetryCount] INT NOT NULL DEFAULT 0,
[Attach] NVARCHAR(100) NULL,
[OpenId] NVARCHAR(100) NULL,
[RawData] NVARCHAR(MAX) NULL,
[ErrorMessage] NVARCHAR(500) NULL,
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PK_order_notifies] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_order_notifies_order_no] ON [dbo].[order_notifies] ([OrderNo] ASC);
CREATE NONCLUSTERED INDEX [IX_order_notifies_status] ON [dbo].[order_notifies] ([Status] ASC);
PRINT N'Table order_notifies created successfully';
END
GO
-- =============================================
-- 13. Create Assessment Records Table (测评记录表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[assessment_records]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[assessment_records] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[UserId] BIGINT NOT NULL, -- 用户ID
[OrderId] BIGINT NOT NULL, -- 订单ID
[AssessmentTypeId] BIGINT NOT NULL, -- 测评类型ID
[Name] NVARCHAR(50) NOT NULL, -- 测评人姓名
[Phone] NVARCHAR(20) NOT NULL, -- 手机号
[Gender] INT NOT NULL, -- 性别1男 2女
[Age] INT NOT NULL, -- 年龄
[EducationStage] INT NOT NULL, -- 学业阶段
[Province] NVARCHAR(50) NOT NULL, -- 省份
[City] NVARCHAR(50) NOT NULL, -- 城市
[District] NVARCHAR(50) NOT NULL, -- 区县
[Status] INT NOT NULL DEFAULT 1, -- 状态1待测评 2测评中 3生成中 4已完成
[StartTime] DATETIME2 NULL, -- 开始答题时间
[SubmitTime] DATETIME2 NULL, -- 提交答题时间
[CompleteTime] DATETIME2 NULL, -- 报告生成完成时间
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_assessment_records] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_assessment_records_user_id] ON [dbo].[assessment_records] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_assessment_records_order_id] ON [dbo].[assessment_records] ([OrderId] ASC);
CREATE NONCLUSTERED INDEX [IX_assessment_records_status] ON [dbo].[assessment_records] ([Status] ASC);
PRINT N'Table assessment_records created successfully';
END
GO
-- =============================================
-- 14. Create Assessment Answers Table (测评答案表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[assessment_answers]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[assessment_answers] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[RecordId] BIGINT NOT NULL, -- 测评记录ID
[QuestionId] BIGINT NOT NULL, -- 题目ID
[QuestionNo] INT NOT NULL, -- 题号
[AnswerValue] INT NOT NULL, -- 答案值1-10
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PK_assessment_answers] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_assessment_answers_record_id] ON [dbo].[assessment_answers] ([RecordId] ASC);
CREATE UNIQUE NONCLUSTERED INDEX [UK_assessment_answers] ON [dbo].[assessment_answers] ([RecordId], [QuestionId]);
PRINT N'Table assessment_answers created successfully';
END
GO
-- =============================================
-- 15. Create Assessment Results Table (测评结果表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[assessment_results]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[assessment_results] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[RecordId] BIGINT NOT NULL, -- 测评记录ID
[CategoryId] BIGINT NOT NULL, -- 分类ID
[Score] DECIMAL(10,2) NOT NULL, -- 得分
[MaxScore] DECIMAL(10,2) NOT NULL, -- 满分
[Percentage] DECIMAL(5,2) NOT NULL, -- 百分比
[Rank] INT NOT NULL, -- 排名
[StarLevel] INT NOT NULL, -- 星级1-5
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PK_assessment_results] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_assessment_results_record_id] ON [dbo].[assessment_results] ([RecordId] ASC);
CREATE NONCLUSTERED INDEX [IX_assessment_results_category_id] ON [dbo].[assessment_results] ([CategoryId] ASC);
PRINT N'Table assessment_results created successfully';
END
GO
-- =============================================
-- 16. Create Planners Table (规划师表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[planners]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[planners] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[Name] NVARCHAR(50) NOT NULL, -- 姓名
[Avatar] NVARCHAR(500) NOT NULL, -- 头像
[Introduction] NVARCHAR(1000) NULL, -- 简介
[Price] DECIMAL(10,2) NOT NULL, -- 咨询价格
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[Status] INT NOT NULL DEFAULT 1, -- 状态0禁用 1启用
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_planners] PRIMARY KEY CLUSTERED ([Id] ASC)
);
PRINT N'Table planners created successfully';
END
GO
-- =============================================
-- 17. Create Planner Bookings Table (规划预约表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[planner_bookings]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[planner_bookings] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[UserId] BIGINT NOT NULL, -- 用户ID
[OrderId] BIGINT NOT NULL, -- 订单ID
[PlannerId] BIGINT NOT NULL, -- 规划师ID
[BookingDate] DATE NOT NULL, -- 预约日期
[BookingTime] NVARCHAR(20) NOT NULL, -- 预约时间
[Name] NVARCHAR(50) NOT NULL, -- 姓名
[Phone] NVARCHAR(20) NOT NULL, -- 手机号
[Gender] INT NOT NULL, -- 性别
[Grade] INT NOT NULL, -- 年级
[MajorName] NVARCHAR(100) NULL, -- 专业名称
[ScoreChinese] INT NULL, -- 语文成绩
[ScoreMath] INT NULL, -- 数学成绩
[ScoreEnglish] INT NULL, -- 英语成绩
[ScorePhysics] INT NULL, -- 物理成绩
[ScoreChemistry] INT NULL, -- 化学成绩
[ScoreBiology] INT NULL, -- 生物成绩
[ScoreGeography] INT NULL, -- 地理成绩
[ScorePolitics] INT NULL, -- 政治成绩
[FamilyAtmosphere] NVARCHAR(500) NULL, -- 家庭氛围
[Expectation] NVARCHAR(500) NULL, -- 期望
[Province] NVARCHAR(50) NULL, -- 省份
[City] NVARCHAR(50) NULL, -- 城市
[District] NVARCHAR(50) NULL, -- 区县
[School] NVARCHAR(100) NULL, -- 学校
[StudyInfo] NVARCHAR(1000) NULL, -- 学情
[Status] INT NOT NULL DEFAULT 1, -- 状态1待联系 2已联系 3已完成 4已取消
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_planner_bookings] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_planner_bookings_user_id] ON [dbo].[planner_bookings] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_planner_bookings_planner_id] ON [dbo].[planner_bookings] ([PlannerId] ASC);
CREATE NONCLUSTERED INDEX [IX_planner_bookings_booking_date] ON [dbo].[planner_bookings] ([BookingDate] ASC);
PRINT N'Table planner_bookings created successfully';
END
GO
-- =============================================
-- 18. Create Invite Codes Table (邀请码表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[invite_codes]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[invite_codes] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[Code] NVARCHAR(10) NOT NULL, -- 邀请码
[BatchNo] NVARCHAR(32) NULL, -- 批次号
[AssignUserId] BIGINT NULL, -- 分配给的用户ID
[AssignTime] DATETIME2 NULL, -- 分配时间
[UseUserId] BIGINT NULL, -- 使用者用户ID
[UseOrderId] BIGINT NULL, -- 使用的订单ID
[UseTime] DATETIME2 NULL, -- 使用时间
[Status] INT NOT NULL DEFAULT 1, -- 状态1未分配 2已分配 3已使用
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_invite_codes] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE UNIQUE NONCLUSTERED INDEX [UK_invite_codes_code] ON [dbo].[invite_codes] ([Code] ASC);
CREATE NONCLUSTERED INDEX [IX_invite_codes_assign_user_id] ON [dbo].[invite_codes] ([AssignUserId] ASC);
CREATE NONCLUSTERED INDEX [IX_invite_codes_status] ON [dbo].[invite_codes] ([Status] ASC);
PRINT N'Table invite_codes created successfully';
END
GO
-- =============================================
-- 19. Create Commissions Table (佣金记录表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[commissions]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[commissions] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[UserId] BIGINT NOT NULL, -- 获得佣金的用户ID
[FromUserId] BIGINT NOT NULL, -- 来源用户ID
[OrderId] BIGINT NOT NULL, -- 关联订单ID
[OrderAmount] DECIMAL(10,2) NOT NULL, -- 订单金额
[CommissionRate] DECIMAL(5,2) NOT NULL, -- 佣金比例
[CommissionAmount] DECIMAL(10,2) NOT NULL, -- 佣金金额
[Level] INT NOT NULL, -- 层级1直接下级 2间接下级
[Status] INT NOT NULL DEFAULT 1, -- 状态1待结算 2已结算
[SettleTime] DATETIME2 NULL, -- 结算时间
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_commissions] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE NONCLUSTERED INDEX [IX_commissions_user_id] ON [dbo].[commissions] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_commissions_from_user_id] ON [dbo].[commissions] ([FromUserId] ASC);
CREATE NONCLUSTERED INDEX [IX_commissions_order_id] ON [dbo].[commissions] ([OrderId] ASC);
PRINT N'Table commissions created successfully';
END
GO
-- =============================================
-- 20. Create Withdrawals Table (提现记录表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[withdrawals]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[withdrawals] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[WithdrawalNo] NVARCHAR(32) NOT NULL, -- 提现单号
[UserId] BIGINT NOT NULL, -- 用户ID
[Amount] DECIMAL(10,2) NOT NULL, -- 提现金额
[BeforeBalance] DECIMAL(10,2) NOT NULL, -- 提现前余额
[AfterBalance] DECIMAL(10,2) NOT NULL, -- 提现后余额
[Status] INT NOT NULL DEFAULT 1, -- 状态1申请中 2提现中 3已提现 4已取消
[AuditUserId] BIGINT NULL, -- 审核人ID
[AuditTime] DATETIME2 NULL, -- 审核时间
[AuditRemark] NVARCHAR(500) NULL, -- 审核备注
[PayTime] DATETIME2 NULL, -- 打款时间
[PayTransactionId] NVARCHAR(64) NULL, -- 打款交易号
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_withdrawals] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE UNIQUE NONCLUSTERED INDEX [UK_withdrawals_withdrawal_no] ON [dbo].[withdrawals] ([WithdrawalNo] ASC);
CREATE NONCLUSTERED INDEX [IX_withdrawals_user_id] ON [dbo].[withdrawals] ([UserId] ASC);
CREATE NONCLUSTERED INDEX [IX_withdrawals_status] ON [dbo].[withdrawals] ([Status] ASC);
PRINT N'Table withdrawals created successfully';
END
GO
-- =============================================
-- 21. Create Configs Table (系统配置表)
-- =============================================
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[configs]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[configs] (
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[ConfigKey] NVARCHAR(100) NOT NULL, -- 配置键
[ConfigValue] NVARCHAR(MAX) NOT NULL, -- 配置值
[ConfigType] NVARCHAR(50) NOT NULL, -- 配置类型
[Description] NVARCHAR(500) NULL, -- 描述
[Sort] INT NOT NULL DEFAULT 0, -- 排序
[CreateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[UpdateTime] DATETIME2 NOT NULL DEFAULT GETDATE(),
[IsDeleted] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_configs] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE UNIQUE NONCLUSTERED INDEX [UK_configs_key] ON [dbo].[configs] ([ConfigKey] ASC);
PRINT N'Table configs created successfully';
END
GO
-- =============================================
-- Add Foreign Key Constraints (外键约束)
-- =============================================
PRINT N'Adding foreign key constraints...';
-- users -> users (parent)
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_users_parent')
BEGIN
ALTER TABLE [dbo].[users] ADD CONSTRAINT [FK_users_parent]
FOREIGN KEY ([ParentUserId]) REFERENCES [dbo].[users]([Id]);
END
-- user_refresh_tokens -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_user_refresh_tokens_user')
BEGIN
ALTER TABLE [dbo].[user_refresh_tokens] ADD CONSTRAINT [FK_user_refresh_tokens_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
-- user_login_logs -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_user_login_logs_user')
BEGIN
ALTER TABLE [dbo].[user_login_logs] ADD CONSTRAINT [FK_user_login_logs_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
-- questions -> assessment_types
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_questions_assessment_type')
BEGIN
ALTER TABLE [dbo].[questions] ADD CONSTRAINT [FK_questions_assessment_type]
FOREIGN KEY ([AssessmentTypeId]) REFERENCES [dbo].[assessment_types]([Id]);
END
-- report_categories -> assessment_types
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_report_categories_assessment_type')
BEGIN
ALTER TABLE [dbo].[report_categories] ADD CONSTRAINT [FK_report_categories_assessment_type]
FOREIGN KEY ([AssessmentTypeId]) REFERENCES [dbo].[assessment_types]([Id]);
END
-- question_category_mappings -> questions
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_question_category_mappings_question')
BEGIN
ALTER TABLE [dbo].[question_category_mappings] ADD CONSTRAINT [FK_question_category_mappings_question]
FOREIGN KEY ([QuestionId]) REFERENCES [dbo].[questions]([Id]);
END
-- question_category_mappings -> report_categories
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_question_category_mappings_category')
BEGIN
ALTER TABLE [dbo].[question_category_mappings] ADD CONSTRAINT [FK_question_category_mappings_category]
FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[report_categories]([Id]);
END
-- report_conclusions -> report_categories
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_report_conclusions_category')
BEGIN
ALTER TABLE [dbo].[report_conclusions] ADD CONSTRAINT [FK_report_conclusions_category]
FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[report_categories]([Id]);
END
-- orders -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_orders_user')
BEGIN
ALTER TABLE [dbo].[orders] ADD CONSTRAINT [FK_orders_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
-- assessment_records -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_records_user')
BEGIN
ALTER TABLE [dbo].[assessment_records] ADD CONSTRAINT [FK_assessment_records_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
-- assessment_records -> orders
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_records_order')
BEGIN
ALTER TABLE [dbo].[assessment_records] ADD CONSTRAINT [FK_assessment_records_order]
FOREIGN KEY ([OrderId]) REFERENCES [dbo].[orders]([Id]);
END
-- assessment_records -> assessment_types
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_records_assessment_type')
BEGIN
ALTER TABLE [dbo].[assessment_records] ADD CONSTRAINT [FK_assessment_records_assessment_type]
FOREIGN KEY ([AssessmentTypeId]) REFERENCES [dbo].[assessment_types]([Id]);
END
-- assessment_answers -> assessment_records
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_answers_record')
BEGIN
ALTER TABLE [dbo].[assessment_answers] ADD CONSTRAINT [FK_assessment_answers_record]
FOREIGN KEY ([RecordId]) REFERENCES [dbo].[assessment_records]([Id]);
END
-- assessment_answers -> questions
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_answers_question')
BEGIN
ALTER TABLE [dbo].[assessment_answers] ADD CONSTRAINT [FK_assessment_answers_question]
FOREIGN KEY ([QuestionId]) REFERENCES [dbo].[questions]([Id]);
END
-- assessment_results -> assessment_records
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_results_record')
BEGIN
ALTER TABLE [dbo].[assessment_results] ADD CONSTRAINT [FK_assessment_results_record]
FOREIGN KEY ([RecordId]) REFERENCES [dbo].[assessment_records]([Id]);
END
-- assessment_results -> report_categories
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_assessment_results_category')
BEGIN
ALTER TABLE [dbo].[assessment_results] ADD CONSTRAINT [FK_assessment_results_category]
FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[report_categories]([Id]);
END
-- planner_bookings -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_planner_bookings_user')
BEGIN
ALTER TABLE [dbo].[planner_bookings] ADD CONSTRAINT [FK_planner_bookings_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
-- planner_bookings -> orders
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_planner_bookings_order')
BEGIN
ALTER TABLE [dbo].[planner_bookings] ADD CONSTRAINT [FK_planner_bookings_order]
FOREIGN KEY ([OrderId]) REFERENCES [dbo].[orders]([Id]);
END
-- planner_bookings -> planners
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_planner_bookings_planner')
BEGIN
ALTER TABLE [dbo].[planner_bookings] ADD CONSTRAINT [FK_planner_bookings_planner]
FOREIGN KEY ([PlannerId]) REFERENCES [dbo].[planners]([Id]);
END
-- commissions -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_commissions_user')
BEGIN
ALTER TABLE [dbo].[commissions] ADD CONSTRAINT [FK_commissions_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
-- commissions -> orders
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_commissions_order')
BEGIN
ALTER TABLE [dbo].[commissions] ADD CONSTRAINT [FK_commissions_order]
FOREIGN KEY ([OrderId]) REFERENCES [dbo].[orders]([Id]);
END
-- withdrawals -> users
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE name = 'FK_withdrawals_user')
BEGIN
ALTER TABLE [dbo].[withdrawals] ADD CONSTRAINT [FK_withdrawals_user]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[users]([Id]);
END
PRINT N'Foreign key constraints added successfully';
GO
-- =============================================
-- Add Table Comments (表注释)
-- =============================================
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'用户表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'users';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'刷新令牌表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'user_refresh_tokens';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'登录日志表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'user_login_logs';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'轮播图表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'banners';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'宣传图表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'promotions';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'测评类型表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'assessment_types';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'题目表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'questions';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'报告分类表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'report_categories';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'题目分类映射表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'question_category_mappings';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'报告结论表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'report_conclusions';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'订单表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'orders';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'订单通知表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'order_notifies';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'测评记录表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'assessment_records';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'测评答案表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'assessment_answers';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'测评结果表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'assessment_results';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'规划师表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'planners';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'规划预约表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'planner_bookings';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'邀请码表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'invite_codes';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'佣金记录表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'commissions';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'提现记录表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'withdrawals';
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'系统配置表', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'configs';
GO
-- =============================================
-- Insert Default Data (默认数据)
-- =============================================
PRINT N'Inserting default data...';
-- 插入默认测评类型
IF NOT EXISTS (SELECT 1 FROM [dbo].[assessment_types] WHERE [Code] = 'MI_ASSESSMENT')
BEGIN
INSERT INTO [dbo].[assessment_types] ([Name], [Code], [Price], [QuestionCount], [Sort], [Status])
VALUES (N'多元智能测评', 'MI_ASSESSMENT', 99.00, 80, 1, 1);
PRINT N'Default assessment type inserted';
END
-- 插入默认系统配置
IF NOT EXISTS (SELECT 1 FROM [dbo].[configs] WHERE [ConfigKey] = 'assessment_price')
BEGIN
INSERT INTO [dbo].[configs] ([ConfigKey], [ConfigValue], [ConfigType], [Description])
VALUES
('assessment_price', '99.00', 'price', N'测评价格'),
('commission_rate_level1', '0.30', 'commission', N'一级分销佣金比例'),
('commission_rate_level2', '0.10', 'commission', N'二级分销佣金比例'),
('commission_rate_direct', '0.40', 'commission', N'无上级时直接佣金比例'),
('withdraw_min_amount', '10.00', 'withdraw', N'最低提现金额'),
('service_phone', '400-000-0000', 'contact', N'客服电话'),
('service_wechat', '', 'contact', N'客服微信'),
('user_agreement', '', 'agreement', N'用户协议内容'),
('privacy_policy', '', 'agreement', N'隐私政策内容'),
('about_us_content', '', 'content', N'关于我们内容');
PRINT N'Default configs inserted';
END
GO
-- =============================================
-- Script Completion
-- =============================================
PRINT N'';
PRINT N'=============================================';
PRINT N'Business database initialization completed!';
PRINT N'=============================================';
PRINT N'Tables created: 21';
PRINT N' - users (用户表)';
PRINT N' - user_refresh_tokens (刷新令牌表)';
PRINT N' - user_login_logs (登录日志表)';
PRINT N' - banners (轮播图表)';
PRINT N' - promotions (宣传图表)';
PRINT N' - assessment_types (测评类型表)';
PRINT N' - questions (题目表)';
PRINT N' - report_categories (报告分类表)';
PRINT N' - question_category_mappings (题目分类映射表)';
PRINT N' - report_conclusions (报告结论表)';
PRINT N' - orders (订单表)';
PRINT N' - order_notifies (订单通知表)';
PRINT N' - assessment_records (测评记录表)';
PRINT N' - assessment_answers (测评答案表)';
PRINT N' - assessment_results (测评结果表)';
PRINT N' - planners (规划师表)';
PRINT N' - planner_bookings (规划预约表)';
PRINT N' - invite_codes (邀请码表)';
PRINT N' - commissions (佣金记录表)';
PRINT N' - withdrawals (提现记录表)';
PRINT N' - configs (系统配置表)';
PRINT N'=============================================';
GO