在自动抽题系统中,当删除记录后,数据库主键ID(通常是自增ID)会保持递增,而题目数量减少,导致ID不连续。这可能导致以下问题: 1. 随机抽题时可能选择到已删除的ID 2. 统计题目数量时可能产生误导 3. 前端显示ID不连续影响用户体验
is_deleted
字段标记删除状态-- 示例表结构
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT,
is_deleted TINYINT DEFAULT 0,
deleted_at TIMESTAMP NULL
);
-- MySQL示例
SET @count = 0;
UPDATE questions SET id = @count:= @count + 1 ORDER BY id;
ALTER TABLE questions AUTO_INCREMENT = 1;
CREATE TABLE questions (
id CHAR(36) PRIMARY KEY,
content TEXT
);
# Python示例
def get_random_questions(n):
valid_ids = [q.id for q in Question.objects.filter(is_deleted=False)]
selected_ids = random.sample(valid_ids, min(n, len(valid_ids)))
return Question.objects.filter(id__in=selected_ids)
根据实际场景选择: - 小型系统:方案1(逻辑删除)或方案4 - 需要严格ID连续性的系统:方案2 - 大型分布式系统:方案3
大多数情况下,方案1(逻辑删除)+方案4(基于有效ID抽题)的组合是最佳实践,既能保持数据完整性,又不会过度影响性能。