知识点创建流程

5/8/2026

知识点创建流程详解(以"1.1 整数和整除"为例)

📋 一、完整流程概览

1. 获取课本目录 → 2. 内容收集与整合 → 3. 创建本地文件 → 4. 更新数据库 → 5. 前端渲染

📚 二、详细步骤

步骤 1:获取课本目录

1.1 目录来源

  • 来源文件/Users/su/Documents/Obsidian Vault/Documentation/数学课本/小学/六年级上.md
  • 获取方式:用户提供的完整课本目录网页内容

1.2 目录结构

六年级上
├── 第一章:数的整除
│   ├── 1.1 整数和整除的意义
│   ├── 1.2 因数和倍数
│   ├── 1.3 能被2、5整除的数
│   ├── 1.4 素数、合数与分解素因数
│   ├── 1.5 公因数和最大公因数
│   └── 1.6 公倍数和最小公倍数
└── ...

1.3 数据库初始化

操作:在 supabase/migrations/ 目录下创建 SQL 迁移脚本

示例文件014_add_grade6a_chapters.sql

INSERT INTO knowledge_points (id, chapter, section, title, content, keywords, grade) VALUES
('kp-001', '第一章', '数的整除', '1.1 整数和整除', '内容...', ARRAY['整数', '整除'], '六年级上'),
...

执行命令

/tmp/supabase db query --linked -f supabase/migrations/014_add_grade6a_chapters.sql

步骤 2:内容收集与整合

2.1 内容来源

收集多个知识来源进行整合,取长补短:

  1. 课本内容 - 来自小学六年级上册数学课本
    • 基础定义、公式、例题
  2. 扩展资料 - 补充知识点
    • 历史背景、数学文化
  3. 练习题 - 各种难度级别的题目
    • 基础题、提高题、综合题

2.2 整合原则

  • 全面性:覆盖所有重要知识点
  • 层次性:从简单到复杂
  • 实用性:包含足够的例题和练习
  • 美观性:使用 Markdown 格式化

步骤 3:创建本地文件

3.1 文件存放位置

目录/Users/su/code/holdings-monitor-web/docs/knowledge-points/

文件名示例g6s-1-1-integer-division.md

3.2 文件名规范

格式:{grade}-{section}-{title-slug}.md

  • g6s = Grade 6, Second semester(六年级上)
  • 1-1 = Chapter 1, Section 1
  • integer-division = 英文标题(方便检索)

3.3 内容结构(Markdown)

# 一、整数和自然数
## 1.1.1 整数
- 定义
- 分类
- 特点

## 1.1.2 自然数
- 定义
- 注意事项

---

# 二、整除的意义
## 2.1 整除的定义
## 2.2 整除的三个必要条件
## 2.3 整除与除尽的区别
| 概念 | 被除数 | 除数 | 商 | 余数 |
| :--- | :---: | :---: | :---: | :---: |
| 整除 | 整数 | 整数 | 整数 | 0 |
| 除尽 | 不一定是整数 | 不一定是整数 | 有限小数 | 0 |

---

# 三、因数和倍数
# 四、奇数和偶数
# 五、整除的特征
# 六、历史与发展
# 七、常见错误辨析

步骤 4:更新数据库

4.1 数据库表结构

表名knowledge_points

| 字段名 | 类型 | 说明 | |--------|------|------| | id | text | 唯一标识(如 kp-001) | | chapter | text | 章节名(如 第一章) | | section | text | 小节名(如 数的整除) | | title | text | 标题(如 1.1 整数和整除) | | content | text | 内容(Markdown 格式) | | keywords | text[] | 关键词数组 | | grade | text | 年级(如 六年级上) | | created_at | timestamptz | 创建时间 | | updated_at | timestamptz | 更新时间 |

4.2 SQL 更新脚本

文件位置supabase/migrations/update_kp001_content.sql

脚本示例

UPDATE knowledge_points
SET content = e'# 一、整数和自然数\n\n### 1.1.1 整数\n...完整的 Markdown 内容...'
WHERE id = 'kp-001';

执行命令

/tmp/supabase db query --linked -f supabase/migrations/update_kp001_content.sql

步骤 5:前端渲染

5.1 组件位置

文件/Users/su/code/holdings-monitor-web/components/KnowledgePointDetail.tsx

5.2 依赖安装

npm install react-markdown remark-gfm --save

5.3 核心代码逻辑

5.3.1 导入依赖

import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';  // 支持表格、删除线等 GitHub Flavored Markdown

5.3.2 Markdown 检测函数

const isMarkdown = (content: string): boolean => {
  if (!content) return false;
  const trimmed = content.trim();
  return trimmed.startsWith('#') ||
         trimmed.startsWith('```') ||
         trimmed.includes('##') ||
         trimmed.includes('**') ||
         trimmed.includes('| ');
};

5.3.3 Markdown 渲染函数

const renderMarkdown = (content: string) => {
  return (
    <ReactMarkdown
      remarkPlugins={[remarkGfm]}  // 启用 GFM 插件
      components={{
        h1: ({ ...props }) => <h1 className="text-2xl font-bold..." {...props} />,
        h2: ({ ...props }) => <h2 className="text-xl font-bold..." {...props} />,
        h3: ({ ...props }) => <h3 className="text-lg font-semibold..." {...props} />,
        p: ({ ...props }) => <p className="mb-4 text-gray-700 leading-relaxed" {...props} />,
        table: ({ ...props }) => <div className="overflow-x-auto mb-4"><table className="border-collapse w-full" {...props} /></div>,
        thead: ({ ...props }) => <thead className="bg-gray-100" {...props} />,
        th: ({ ...props }) => <th className="border border-gray-300 px-4 py-2 text-left font-semibold" {...props} />,
        td: ({ ...props }) => <td className="border border-gray-300 px-4 py-2" {...props} />,
        tr: ({ ...props }) => <tr className="even:bg-gray-50" {...props} />,
        // ... 其他组件样式
      }}
    >
      {content}
    </ReactMarkdown>
  );
};

5.3.4 渲染逻辑

const useMarkdownView = isMarkdown(point.content);

return (
  <div>
    {useMarkdownView ? (
      <Card>
        <CardContent className="p-6">
          {renderMarkdown(point.content)}
        </CardContent>
      </Card>
    ) : (
      // 旧的内容渲染方式
    )}
  </div>
);

📝 三、练习题创建流程

3.1 数据库表结构

表名exercises

| 字段名 | 类型 | 说明 | |--------|------|------| | id | text | 唯一标识(如 ex-g6s-001-1) | | knowledge_point_id | text | 关联的知识点 ID(如 kp-001) | | question | text | 题目 | | options | text[] | 选项数组(可选) | | answer | text | 答案 | | explanation | text | 解析(可选) |

3.2 命名规范

格式:ex-{grade}-{kp-id}-{num}

  • ex-g6s-001-1 = 六年级上、kp-001 知识点、第 1 题

3.3 插入 SQL 示例

INSERT INTO exercises (id, knowledge_point_id, question, options, answer, explanation) VALUES
('ex-g6s-001-1', 'kp-001', '下列哪些数是整数?', ARRAY['1.5', '0', '-3', 'π'], '0, -3', '整数包括正整数、零和负整数。'),
('ex-g6s-001-2', 'kp-001', '15 能被 3 整除吗?', ARRAY['能', '不能'], '能', '15 ÷ 3 = 5,商是整数且余数为 0。');

🎯 四、完整命令列表

开发相关

npm run dev          # 启动开发服务器
npm run build        # 构建生产版本
npm run lint         # 代码检查

数据库相关

# 执行 SQL 迁移脚本
/tmp/supabase db query --linked -f supabase/migrations/your_script.sql

# 查询数据
/tmp/supabase db query --linked "SELECT * FROM knowledge_points"

# 连接项目(首次使用)
/tmp/supabase link --project-ref <project-ref>

📌 五、关键注意事项

  1. Markdown 格式规范

    • 使用标准的 GitHub Flavored Markdown 语法
    • 表格使用 |--- 分隔
    • 标题层级清晰(#、##、###)
  2. 数据库字符转义

    • 使用 e'...' 语法支持多行字符串
    • 转义单引号:'''
    • 转义反斜杠:\\\
  3. ID 命名唯一性

    • 知识点 ID:kp-001, kp-002, ...
    • 练习题 ID:ex-g6s-001-1, ex-g6s-001-2, ...
    • 确保每个 ID 全局唯一
  4. 时区处理

    • 所有时间相关操作使用北京时间(UTC+8)
    • 日期计算时需要进行时区转换

📊 六、项目目录结构

holdings-monitor-web/
├── app/                          # Next.js App Router
│   ├── learning/                # 学习页面
│   │   └── page.tsx
│   └── api/                     # API 路由
├── components/                   # React 组件
│   └── KnowledgePointDetail.tsx # 知识点详情组件
├── lib/                          # 工具库
│   ├── supabase.ts              # Supabase 客户端
│   └── types.ts                 # TypeScript 类型
├── docs/                         # 文档
│   └── knowledge-points/        # 知识点 Markdown 文件
└── supabase/                     # 数据库
    └── migrations/              # SQL 迁移脚本

最后更新:2026-05-04