live-forum/server/admin/需求/数据库扩展设计.md
2026-03-24 11:27:37 +08:00

20 KiB
Raw Blame History

Live Forum 后台管理数据库扩展设计

数据库扩展概述

为了支持后台管理功能,需要在现有数据库基础上添加管理相关的表和字段。


新增表结构

1. 管理操作记录表 (AdminOperations)

用途: 记录所有后台管理操作,用于审计和追踪

CREATE TABLE dbo.AdminOperations
(
    OperationId BIGINT PRIMARY KEY IDENTITY(1,1),
    AdminId BIGINT NOT NULL,                    -- 管理员ID
    AdminName NVARCHAR(50) NOT NULL,            -- 管理员名称
    OperationType NVARCHAR(50) NOT NULL,        -- 操作类型CREATE, UPDATE, DELETE, APPROVE, REJECT
    TargetType NVARCHAR(50) NOT NULL,           -- 目标类型POST, COMMENT, USER, BANNER, CATEGORY
    TargetId BIGINT NOT NULL,                   -- 目标ID
    OperationData NVARCHAR(MAX) NULL,           -- 操作数据JSON格式
    OperationResult NVARCHAR(500) NULL,        -- 操作结果
    Reason NVARCHAR(500) NULL,                  -- 操作原因
    IpAddress NVARCHAR(50) NULL,                -- 操作IP地址
    UserAgent NVARCHAR(500) NULL,               -- 用户代理
    CreatedAt DATETIME2(7) NOT NULL DEFAULT GETDATE()
);

-- 创建索引
CREATE INDEX IX_AdminOperations_AdminId ON AdminOperations(AdminId);
CREATE INDEX IX_AdminOperations_TargetType_TargetId ON AdminOperations(TargetType, TargetId);
CREATE INDEX IX_AdminOperations_CreatedAt ON AdminOperations(CreatedAt);
CREATE INDEX IX_AdminOperations_OperationType ON AdminOperations(OperationType);

2. 系统配置表 (SystemConfigs)

用途: 存储系统配置参数

CREATE TABLE dbo.SystemConfigs
(
    ConfigId INT PRIMARY KEY IDENTITY(1,1),
    ConfigKey NVARCHAR(100) NOT NULL UNIQUE,    -- 配置键
    ConfigValue NVARCHAR(MAX) NOT NULL,         -- 配置值
    ConfigType NVARCHAR(50) NOT NULL,           -- 配置类型STRING, NUMBER, BOOLEAN, JSON
    Description NVARCHAR(500) NULL,              -- 配置描述
    Category NVARCHAR(50) NOT NULL,             -- 配置分类SYSTEM, CONTENT, USER, SECURITY
    IsActive BIT NOT NULL DEFAULT 1,            -- 是否启用
    IsReadOnly BIT NOT NULL DEFAULT 0,          -- 是否只读
    CreatedAt DATETIME2(7) NOT NULL DEFAULT GETDATE(),
    UpdatedAt DATETIME2(7) NOT NULL DEFAULT GETDATE()
);

-- 创建索引
CREATE INDEX IX_SystemConfigs_Category ON SystemConfigs(Category);
CREATE INDEX IX_SystemConfigs_IsActive ON SystemConfigs(IsActive);

3. 管理任务表 (AdminTasks)

用途: 记录后台管理任务,支持异步处理

CREATE TABLE dbo.AdminTasks
(
    TaskId BIGINT PRIMARY KEY IDENTITY(1,1),
    TaskName NVARCHAR(100) NOT NULL,            -- 任务名称
    TaskType NVARCHAR(50) NOT NULL,             -- 任务类型BATCH_DELETE, BATCH_UPDATE, EXPORT_DATA
    TaskData NVARCHAR(MAX) NOT NULL,            -- 任务数据JSON格式
    Status TINYINT NOT NULL DEFAULT 0,         -- 任务状态0-待处理1-处理中2-已完成3-失败
    Progress INT NOT NULL DEFAULT 0,            -- 进度百分比
    TotalCount INT NOT NULL DEFAULT 0,          -- 总数量
    ProcessedCount INT NOT NULL DEFAULT 0,      -- 已处理数量
    SuccessCount INT NOT NULL DEFAULT 0,       -- 成功数量
    FailedCount INT NOT NULL DEFAULT 0,        -- 失败数量
    ErrorMessage NVARCHAR(MAX) NULL,            -- 错误信息
    CreatedBy BIGINT NOT NULL,                  -- 创建者ID
    CreatedAt DATETIME2(7) NOT NULL DEFAULT GETDATE(),
    StartedAt DATETIME2(7) NULL,                -- 开始时间
    CompletedAt DATETIME2(7) NULL               -- 完成时间
);

-- 创建索引
CREATE INDEX IX_AdminTasks_Status ON AdminTasks(Status);
CREATE INDEX IX_AdminTasks_CreatedBy ON AdminTasks(CreatedBy);
CREATE INDEX IX_AdminTasks_CreatedAt ON AdminTasks(CreatedAt);

4. 数据统计缓存表 (StatisticsCache)

用途: 缓存统计数据,提高查询性能

CREATE TABLE dbo.StatisticsCache
(
    CacheId BIGINT PRIMARY KEY IDENTITY(1,1),
    CacheKey NVARCHAR(100) NOT NULL UNIQUE,    -- 缓存键
    CacheData NVARCHAR(MAX) NOT NULL,           -- 缓存数据JSON格式
    CacheType NVARCHAR(50) NOT NULL,            -- 缓存类型DAILY, WEEKLY, MONTHLY
    StatDate DATE NOT NULL,                     -- 统计日期
    ExpireAt DATETIME2(7) NOT NULL,             -- 过期时间
    CreatedAt DATETIME2(7) NOT NULL DEFAULT GETDATE(),
    UpdatedAt DATETIME2(7) NOT NULL DEFAULT GETDATE()
);

-- 创建索引
CREATE INDEX IX_StatisticsCache_CacheType ON StatisticsCache(CacheType);
CREATE INDEX IX_StatisticsCache_StatDate ON StatisticsCache(StatDate);
CREATE INDEX IX_StatisticsCache_ExpireAt ON StatisticsCache(ExpireAt);

现有表字段扩展

1. Posts表扩展

添加管理相关字段:

-- 添加管理相关字段
ALTER TABLE dbo.Posts ADD 
    AdminNotes NVARCHAR(500) NULL,              -- 管理员备注
    LastAdminOperation DATETIME2(7) NULL,     -- 最后管理操作时间
    AdminOperationCount INT NOT NULL DEFAULT 0; -- 管理操作次数

-- 创建索引
CREATE INDEX IX_Posts_LastAdminOperation ON Posts(LastAdminOperation);
CREATE INDEX IX_Posts_AdminOperationCount ON Posts(AdminOperationCount);

2. Users表扩展

添加管理相关字段:

-- 添加管理相关字段
ALTER TABLE dbo.Users ADD 
    AdminNotes NVARCHAR(500) NULL,              -- 管理员备注
    LastAdminOperation DATETIME2(7) NULL,     -- 最后管理操作时间
    AdminOperationCount INT NOT NULL DEFAULT 0, -- 管理操作次数
    StatusChangeReason NVARCHAR(500) NULL,      -- 状态变更原因
    StatusChangeAt DATETIME2(7) NULL,          -- 状态变更时间
    StatusChangeBy BIGINT NULL;                 -- 状态变更操作者

-- 创建索引
CREATE INDEX IX_Users_LastAdminOperation ON Users(LastAdminOperation);
CREATE INDEX IX_Users_StatusChangeAt ON Users(StatusChangeAt);

3. Comments表扩展

添加管理相关字段:

-- 添加管理相关字段
ALTER TABLE dbo.Comments ADD 
    AdminNotes NVARCHAR(500) NULL,              -- 管理员备注
    LastAdminOperation DATETIME2(7) NULL,     -- 最后管理操作时间
    AdminOperationCount INT NOT NULL DEFAULT 0; -- 管理操作次数

-- 创建索引
CREATE INDEX IX_Comments_LastAdminOperation ON Comments(LastAdminOperation);

4. Reports表扩展

添加管理相关字段:

-- 添加管理相关字段
ALTER TABLE dbo.Reports ADD 
    AdminNotes NVARCHAR(500) NULL,              -- 管理员备注
    ProcessedAt DATETIME2(7) NULL,              -- 处理时间
    ProcessedBy BIGINT NULL,                    -- 处理者ID
    ProcessResult NVARCHAR(500) NULL;            -- 处理结果

-- 创建索引
CREATE INDEX IX_Reports_ProcessedAt ON Reports(ProcessedAt);
CREATE INDEX IX_Reports_ProcessedBy ON Reports(ProcessedBy);

视图创建

1. 管理操作统计视图

CREATE VIEW dbo.vw_AdminOperationStatistics
AS
SELECT 
    AdminId,
    AdminName,
    COUNT(*) as TotalOperations,
    COUNT(CASE WHEN OperationType = 'CREATE' THEN 1 END) as CreateCount,
    COUNT(CASE WHEN OperationType = 'UPDATE' THEN 1 END) as UpdateCount,
    COUNT(CASE WHEN OperationType = 'DELETE' THEN 1 END) as DeleteCount,
    COUNT(CASE WHEN OperationType = 'APPROVE' THEN 1 END) as ApproveCount,
    COUNT(CASE WHEN OperationType = 'REJECT' THEN 1 END) as RejectCount,
    COUNT(CASE WHEN TargetType = 'POST' THEN 1 END) as PostOperations,
    COUNT(CASE WHEN TargetType = 'USER' THEN 1 END) as UserOperations,
    COUNT(CASE WHEN TargetType = 'COMMENT' THEN 1 END) as CommentOperations,
    MAX(CreatedAt) as LastOperationAt
FROM dbo.AdminOperations
GROUP BY AdminId, AdminName;

2. 内容管理统计视图

CREATE VIEW dbo.vw_ContentManagementStatistics
AS
SELECT 
    'Posts' as ContentType,
    COUNT(*) as TotalCount,
    COUNT(CASE WHEN Status = 0 THEN 1 END) as DraftCount,
    COUNT(CASE WHEN Status = 1 THEN 1 END) as PublishedCount,
    COUNT(CASE WHEN Status = 2 THEN 1 END) as PendingCount,
    COUNT(CASE WHEN Status = 3 THEN 1 END) as SuspendedCount,
    COUNT(CASE WHEN IsTop = 1 THEN 1 END) as TopCount,
    COUNT(CASE WHEN IsHot = 1 THEN 1 END) as HotCount,
    COUNT(CASE WHEN IsEssence = 1 THEN 1 END) as EssenceCount,
    COUNT(CASE WHEN AdminOperationCount > 0 THEN 1 END) as ManagedCount
FROM dbo.Posts
WHERE IsDeleted = 0

UNION ALL

SELECT 
    'Comments' as ContentType,
    COUNT(*) as TotalCount,
    0 as DraftCount,
    COUNT(CASE WHEN IsDeleted = 0 THEN 1 END) as PublishedCount,
    0 as PendingCount,
    COUNT(CASE WHEN IsDeleted = 1 THEN 1 END) as SuspendedCount,
    0 as TopCount,
    0 as HotCount,
    0 as EssenceCount,
    COUNT(CASE WHEN AdminOperationCount > 0 THEN 1 END) as ManagedCount
FROM dbo.Comments;

3. 用户管理统计视图

CREATE VIEW dbo.vw_UserManagementStatistics
AS
SELECT 
    COUNT(*) as TotalUsers,
    COUNT(CASE WHEN Status = 0 THEN 1 END) as ActiveUsers,
    COUNT(CASE WHEN Status = 1 THEN 1 END) as DisabledUsers,
    COUNT(CASE WHEN Status = 2 THEN 1 END) as FrozenUsers,
    COUNT(CASE WHEN IsVip = 1 THEN 1 END) as VipUsers,
    COUNT(CASE WHEN IsCertified = 1 THEN 1 END) as CertifiedUsers,
    COUNT(CASE WHEN AdminOperationCount > 0 THEN 1 END) as ManagedUsers,
    COUNT(CASE WHEN CreatedAt >= DATEADD(DAY, -30, GETDATE()) THEN 1 END) as NewUsers30Days,
    COUNT(CASE WHEN LastLoginAt >= DATEADD(DAY, -7, GETDATE()) THEN 1 END) as ActiveUsers7Days
FROM dbo.Users
WHERE IsDeleted = 0;

存储过程创建

1. 记录管理操作存储过程

CREATE PROCEDURE dbo.sp_RecordAdminOperation
    @AdminId BIGINT,
    @AdminName NVARCHAR(50),
    @OperationType NVARCHAR(50),
    @TargetType NVARCHAR(50),
    @TargetId BIGINT,
    @OperationData NVARCHAR(MAX) = NULL,
    @OperationResult NVARCHAR(500) = NULL,
    @Reason NVARCHAR(500) = NULL,
    @IpAddress NVARCHAR(50) = NULL,
    @UserAgent NVARCHAR(500) = NULL
AS
BEGIN
    SET NOCOUNT ON;
    
    BEGIN TRY
        -- 插入操作记录
        INSERT INTO dbo.AdminOperations (
            AdminId, AdminName, OperationType, TargetType, TargetId,
            OperationData, OperationResult, Reason, IpAddress, UserAgent
        )
        VALUES (
            @AdminId, @AdminName, @OperationType, @TargetType, @TargetId,
            @OperationData, @OperationResult, @Reason, @IpAddress, @UserAgent
        );
        
        -- 更新目标表的最后管理操作时间
        IF @TargetType = 'POST'
        BEGIN
            UPDATE dbo.Posts 
            SET LastAdminOperation = GETDATE(),
                AdminOperationCount = AdminOperationCount + 1
            WHERE PostId = @TargetId;
        END
        ELSE IF @TargetType = 'USER'
        BEGIN
            UPDATE dbo.Users 
            SET LastAdminOperation = GETDATE(),
                AdminOperationCount = AdminOperationCount + 1
            WHERE UserId = @TargetId;
        END
        ELSE IF @TargetType = 'COMMENT'
        BEGIN
            UPDATE dbo.Comments 
            SET LastAdminOperation = GETDATE(),
                AdminOperationCount = AdminOperationCount + 1
            WHERE CommentId = @TargetId;
        END
        
        SELECT 'SUCCESS' as Result, '操作记录已保存' as Message;
        
    END TRY
    BEGIN CATCH
        SELECT 'ERROR' as Result, ERROR_MESSAGE() as Message;
    END CATCH
END;

2. 更新统计数据存储过程

CREATE PROCEDURE dbo.sp_UpdateStatisticsCache
    @CacheType NVARCHAR(50),
    @StatDate DATE,
    @CacheData NVARCHAR(MAX)
AS
BEGIN
    SET NOCOUNT ON;
    
    BEGIN TRY
        DECLARE @CacheKey NVARCHAR(100) = @CacheType + '_' + CONVERT(NVARCHAR(10), @StatDate, 120);
        DECLARE @ExpireAt DATETIME2(7) = DATEADD(DAY, 1, GETDATE());
        
        -- 更新或插入缓存数据
        IF EXISTS (SELECT 1 FROM dbo.StatisticsCache WHERE CacheKey = @CacheKey)
        BEGIN
            UPDATE dbo.StatisticsCache 
            SET CacheData = @CacheData,
                UpdatedAt = GETDATE(),
                ExpireAt = @ExpireAt
            WHERE CacheKey = @CacheKey;
        END
        ELSE
        BEGIN
            INSERT INTO dbo.StatisticsCache (CacheKey, CacheData, CacheType, StatDate, ExpireAt)
            VALUES (@CacheKey, @CacheData, @CacheType, @StatDate, @ExpireAt);
        END
        
        SELECT 'SUCCESS' as Result, '统计数据已更新' as Message;
        
    END TRY
    BEGIN CATCH
        SELECT 'ERROR' as Result, ERROR_MESSAGE() as Message;
    END CATCH
END;

3. 清理过期缓存存储过程

CREATE PROCEDURE dbo.sp_CleanExpiredCache
AS
BEGIN
    SET NOCOUNT ON;
    
    BEGIN TRY
        -- 删除过期的缓存数据
        DELETE FROM dbo.StatisticsCache 
        WHERE ExpireAt < GETDATE();
        
        -- 删除30天前的操作记录
        DELETE FROM dbo.AdminOperations 
        WHERE CreatedAt < DATEADD(DAY, -30, GETDATE());
        
        -- 删除已完成的任务记录保留7天
        DELETE FROM dbo.AdminTasks 
        WHERE Status IN (2, 3) 
        AND CompletedAt < DATEADD(DAY, -7, GETDATE());
        
        SELECT 'SUCCESS' as Result, '过期数据已清理' as Message;
        
    END TRY
    BEGIN CATCH
        SELECT 'ERROR' as Result, ERROR_MESSAGE() as Message;
    END CATCH
END;

初始化数据

1. 系统配置初始化

-- 插入基础系统配置
INSERT INTO dbo.SystemConfigs (ConfigKey, ConfigValue, ConfigType, Description, Category)
VALUES 
    ('MAX_POSTS_PER_DAY', '10', 'NUMBER', '用户每日最大发帖数', 'CONTENT'),
    ('MAX_COMMENTS_PER_DAY', '50', 'NUMBER', '用户每日最大评论数', 'CONTENT'),
    ('MAX_IMAGES_PER_POST', '9', 'NUMBER', '每帖最大图片数', 'CONTENT'),
    ('POST_AUTO_APPROVE', 'true', 'BOOLEAN', '帖子是否自动审核通过', 'CONTENT'),
    ('COMMENT_AUTO_APPROVE', 'true', 'BOOLEAN', '评论是否自动审核通过', 'CONTENT'),
    ('MAX_FILE_SIZE', '10485760', 'NUMBER', '最大文件大小(字节)', 'SYSTEM'),
    ('ALLOWED_FILE_TYPES', 'jpg,jpeg,png,gif,mp4', 'STRING', '允许的文件类型', 'SYSTEM'),
    ('CACHE_EXPIRE_HOURS', '24', 'NUMBER', '缓存过期时间(小时)', 'SYSTEM'),
    ('ADMIN_OPERATION_LOG_DAYS', '30', 'NUMBER', '管理操作日志保留天数', 'SECURITY'),
    ('BATCH_OPERATION_LIMIT', '100', 'NUMBER', '批量操作最大数量', 'SECURITY');

2. 创建定时任务

-- 创建定时清理任务需要SQL Server Agent支持
-- 每天凌晨2点执行清理过期数据
EXEC msdb.dbo.sp_add_job
    @job_name = 'CleanExpiredAdminData',
    @description = '清理过期的管理数据和缓存';

EXEC msdb.dbo.sp_add_jobstep
    @job_name = 'CleanExpiredAdminData',
    @step_name = 'CleanExpiredData',
    @command = 'EXEC LiveForumDB.dbo.sp_CleanExpiredCache';

EXEC msdb.dbo.sp_add_schedule
    @schedule_name = 'DailyCleanup',
    @freq_type = 4,
    @freq_interval = 1,
    @active_start_time = 020000;

EXEC msdb.dbo.sp_attach_schedule
    @job_name = 'CleanExpiredAdminData',
    @schedule_name = 'DailyCleanup';

性能优化建议

1. 索引优化

-- 为常用查询字段创建复合索引
CREATE INDEX IX_Posts_Status_CreatedAt ON Posts(Status, CreatedAt);
CREATE INDEX IX_Users_Status_LevelId ON Users(Status, LevelId);
CREATE INDEX IX_Comments_PostId_CreatedAt ON Comments(PostId, CreatedAt);
CREATE INDEX IX_Reports_Status_CreatedAt ON Reports(Status, CreatedAt);

-- 为管理操作表创建覆盖索引
CREATE INDEX IX_AdminOperations_Coverage ON AdminOperations(AdminId, CreatedAt) 
INCLUDE (OperationType, TargetType, TargetId);

2. 分区表设计

-- 为大数据量表创建分区(可选)
-- 按创建时间分区管理操作表
CREATE PARTITION FUNCTION PF_AdminOperations_Date (DATETIME2(7))
AS RANGE RIGHT FOR VALUES (
    '2024-01-01', '2024-02-01', '2024-03-01', '2024-04-01',
    '2024-05-01', '2024-06-01', '2024-07-01', '2024-08-01',
    '2024-09-01', '2024-10-01', '2024-11-01', '2024-12-01'
);

CREATE PARTITION SCHEME PS_AdminOperations_Date
AS PARTITION PF_AdminOperations_Date
TO (FG_2024_01, FG_2024_02, FG_2024_03, FG_2024_04,
    FG_2024_05, FG_2024_06, FG_2024_07, FG_2024_08,
    FG_2024_09, FG_2024_10, FG_2024_11, FG_2024_12);

3. 查询优化

-- 创建统计信息更新存储过程
CREATE PROCEDURE dbo.sp_UpdateStatistics
AS
BEGIN
    -- 更新表统计信息
    UPDATE STATISTICS dbo.Posts;
    UPDATE STATISTICS dbo.Users;
    UPDATE STATISTICS dbo.Comments;
    UPDATE STATISTICS dbo.AdminOperations;
    
    -- 重建索引碎片
    ALTER INDEX ALL ON dbo.Posts REBUILD;
    ALTER INDEX ALL ON dbo.Users REBUILD;
    ALTER INDEX ALL ON dbo.Comments REBUILD;
END;

安全考虑

1. 数据脱敏

-- 创建用户信息脱敏视图
CREATE VIEW dbo.vw_Users_Desensitized
AS
SELECT 
    UserId,
    UserName,
    NickName,
    CASE 
        WHEN LEN(PhoneNumber) > 4 
        THEN LEFT(PhoneNumber, 3) + '****' + RIGHT(PhoneNumber, 4)
        ELSE PhoneNumber 
    END as PhoneNumber,
    CASE 
        WHEN CHARINDEX('@', Email) > 0 
        THEN LEFT(Email, 2) + '****' + SUBSTRING(Email, CHARINDEX('@', Email), LEN(Email))
        ELSE Email 
    END as Email,
    Avatar,
    Gender,
    Birthday,
    Signature,
    Status,
    IsVip,
    IsCertified,
    LevelId,
    Experience,
    CreatedAt,
    LastLoginAt
FROM dbo.Users
WHERE IsDeleted = 0;

2. 权限控制

-- 创建管理操作权限检查函数
CREATE FUNCTION dbo.fn_CheckAdminPermission(
    @AdminId BIGINT,
    @OperationType NVARCHAR(50),
    @TargetType NVARCHAR(50)
)
RETURNS BIT
AS
BEGIN
    DECLARE @HasPermission BIT = 0;
    
    -- 这里应该根据实际的权限系统来实现
    -- 示例:检查管理员是否有相应操作权限
    IF EXISTS (
        SELECT 1 FROM dbo.AdminPermissions 
        WHERE AdminId = @AdminId 
        AND OperationType = @OperationType 
        AND TargetType = @TargetType
        AND IsActive = 1
    )
    BEGIN
        SET @HasPermission = 1;
    END
    
    RETURN @HasPermission;
END;

监控和维护

1. 性能监控

-- 创建性能监控视图
CREATE VIEW dbo.vw_PerformanceMonitoring
AS
SELECT 
    'AdminOperations' as TableName,
    COUNT(*) as RecordCount,
    MAX(CreatedAt) as LastRecord,
    AVG(DATEDIFF(MILLISECOND, CreatedAt, GETDATE())) as AvgAge
FROM dbo.AdminOperations

UNION ALL

SELECT 
    'StatisticsCache' as TableName,
    COUNT(*) as RecordCount,
    MAX(CreatedAt) as LastRecord,
    AVG(DATEDIFF(MILLISECOND, CreatedAt, GETDATE())) as AvgAge
FROM dbo.StatisticsCache

UNION ALL

SELECT 
    'AdminTasks' as TableName,
    COUNT(*) as RecordCount,
    MAX(CreatedAt) as LastRecord,
    AVG(DATEDIFF(MILLISECOND, CreatedAt, GETDATE())) as AvgAge
FROM dbo.AdminTasks;

2. 数据完整性检查

-- 创建数据完整性检查存储过程
CREATE PROCEDURE dbo.sp_CheckDataIntegrity
AS
BEGIN
    SET NOCOUNT ON;
    
    -- 检查孤立的管理操作记录
    SELECT 'Orphaned AdminOperations' as Issue, COUNT(*) as Count
    FROM dbo.AdminOperations ao
    LEFT JOIN dbo.Posts p ON ao.TargetType = 'POST' AND ao.TargetId = p.PostId
    LEFT JOIN dbo.Users u ON ao.TargetType = 'USER' AND ao.TargetId = u.UserId
    LEFT JOIN dbo.Comments c ON ao.TargetType = 'COMMENT' AND ao.TargetId = c.CommentId
    WHERE p.PostId IS NULL AND u.UserId IS NULL AND c.CommentId IS NULL;
    
    -- 检查过期的缓存数据
    SELECT 'Expired Cache' as Issue, COUNT(*) as Count
    FROM dbo.StatisticsCache
    WHERE ExpireAt < GETDATE();
    
    -- 检查长时间运行的任务
    SELECT 'Long Running Tasks' as Issue, COUNT(*) as Count
    FROM dbo.AdminTasks
    WHERE Status = 1 AND StartedAt < DATEADD(HOUR, -2, GETDATE());
END;

总结

本数据库扩展设计为Live Forum后台管理功能提供了完整的数据支持包括

新增功能

  • 4张新表 - 管理操作记录、系统配置、管理任务、统计缓存
  • 字段扩展 - 为现有表添加管理相关字段
  • 3个视图 - 管理统计、内容统计、用户统计
  • 3个存储过程 - 操作记录、缓存更新、数据清理

性能优化

  • 索引优化 - 为常用查询创建复合索引
  • 分区设计 - 支持大数据量分区存储
  • 缓存机制 - 统计数据缓存提高查询性能

安全特性

  • 数据脱敏 - 敏感信息脱敏视图
  • 权限控制 - 操作权限检查函数
  • 审计追踪 - 完整的管理操作记录

维护功能

  • 性能监控 - 实时性能监控视图
  • 数据完整性 - 数据完整性检查
  • 自动清理 - 定时清理过期数据

该设计能够满足后台管理功能的所有数据需求,同时保证性能、安全和可维护性。