先更新1版记录下
This commit is contained in:
@@ -1,64 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-14T10:42:00.000Z" agent="Oz" version="24.7.17">
|
||||
<diagram id="course-er" name="ER图">
|
||||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="01 课程学习 - ER图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="360" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="课程主数据 + 学习过程数据分层;所有业务主表均携带 tenant_id/adcode/dept_path" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="860" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="cl_course<br>PK course_id<br>title, subject_code, grade_code<br>difficulty_level, status<br>tenant_id, adcode, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="120" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="cl_course_chapter<br>PK chapter_id<br>FK course_id -> cl_course.course_id<br>chapter_no, chapter_title<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="330" y="120" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="cl_course_lesson<br>PK lesson_id<br>FK chapter_id -> cl_course_chapter.chapter_id<br>lesson_no, lesson_title, duration_sec<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="620" y="120" width="270" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="cl_knowledge_point<br>PK kp_id<br>kp_code, kp_name, subject_code, grade_code<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="120" width="260" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="cl_course_knowledge_rel<br>PK (course_id, kp_id)<br>FK course_id -> cl_course.course_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>weight, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1230" y="120" width="280" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="cl_course_resource<br>PK resource_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>resource_type(pdf/video/doc), resource_url<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="620" y="290" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="cl_course_tag<br>PK tag_id<br>tag_name, tag_type<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="300" width="230" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="cl_course_tag_rel<br>PK (course_id, tag_id)<br>FK course_id -> cl_course.course_id<br>FK tag_id -> cl_course_tag.tag_id<br>tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="300" y="300" width="270" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="cl_learning_session<br>PK session_id<br>FK user_id -> tb_sys_user.user_id<br>FK course_id -> cl_course.course_id<br>status(STARTED/PAUSED/COMPLETED)<br>started_at, ended_at, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="290" width="300" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="cl_learning_progress<br>PK progress_id<br>FK session_id -> cl_learning_session.session_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>progress_pct, last_position_sec<br>mastery_level, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1260" y="300" width="320" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="cl_learning_event<br>PK event_id<br>FK session_id -> cl_learning_session.session_id<br>event_type(start/pause/seek/finish)<br>event_time, payload_json, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="460" width="300" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="设计方法与原因<br>1) 聚合根:Course / LearningSession<br>2) 状态机:Session状态驱动进度写入<br>3) 标签与知识点解耦,支持多维检索<br>4) 事件明细单表追加,兼顾审计与回放" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="470" width="840" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="11" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="101" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="12" target="11" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="102" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="15" target="12" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="103" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="14" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="104" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="14" target="13" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="105" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="106" value="M:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="16" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="107" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="18" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="108" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="109" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="19" target="12" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="110" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="20" target="18" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="course-er" name="ER图">
|
||||
<mxGraphModel dx="1312" dy="773" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="01 课程学习 - ER图(含知识点掌握与图谱/向量同步关联)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="360" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="课程主数据 + 学习过程数据分层;业务主库为 PostgreSQL,知识检索能力由 Milvus + NebulaGraph/Neo4j 承担" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=13;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1100" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="cl_course<br>PK course_id<br>title, subject_code, grade_code<br>difficulty_level, status<br>tenant_id, adcode, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="130" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="cl_course_lesson<br>PK lesson_id<br>FK chapter_id -> cl_course_chapter.chapter_id<br>lesson_no, lesson_title, duration_sec<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="650" y="300" width="270" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="cl_knowledge_point<br>PK kp_id<br>kp_code, kp_name, subject_code, grade_code<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="1030" y="10" width="260" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="cl_course_knowledge_rel<br>PK (course_id, kp_id)<br>FK course_id -> cl_course.course_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>weight, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1680" y="190" width="280" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="cl_course_resource<br>PK resource_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>resource_type(pdf/video/doc), resource_url<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="640" y="560" width="290" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="cl_course_tag<br>PK tag_id<br>tag_name, tag_type<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="420" width="230" height="110" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="17" value="cl_course_tag_rel<br>PK (course_id, tag_id)<br>FK course_id -> cl_course.course_id<br>FK tag_id -> cl_course_tag.tag_id<br>tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="330" y="410" width="270" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="18" value="cl_learning_session<br>PK session_id<br>FK user_id -> tb_sys_user.user_id<br>FK course_id -> cl_course.course_id<br>status(STARTED/PAUSED/COMPLETED)<br>started_at, ended_at, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="950" y="450" width="300" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="19" value="cl_learning_progress<br>PK progress_id<br>FK session_id -> cl_learning_session.session_id<br>FK lesson_id -> cl_course_lesson.lesson_id<br>progress_pct, last_position_sec<br>mastery_level, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1880" y="295" width="320" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="20" value="cl_learning_event<br>PK event_id<br>FK session_id -> cl_learning_session.session_id<br>event_type(start/pause/seek/finish)<br>event_time, payload_json, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="950" y="750" width="300" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="21" value="设计方法与原因<br>1) 聚合根:Course / LearningSession<br>2) 状态机:Session状态驱动进度写入<br>3) 标签与知识点解耦,支持多维检索<br>4) 事件明细单表追加,兼顾审计与回放<br>5) 知识点/学习画像变化可通过 ai.tb_ai_knowledge_sync_task 异步同步" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="10" y="850" width="840" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="22" value="外部同步依赖(ai)<br>ai.tb_ai_knowledge_file<br>ai.tb_ai_knowledge_sync_task<br>ai.tb_ai_graph_entity / ai.tb_ai_graph_relation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="760" width="330" height="150" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="23" value="cl_kp_prerequisite_rel<br>PK (kp_id, pre_kp_id)<br>FK kp_id -> cl_knowledge_point.kp_id<br>FK pre_kp_id -> cl_knowledge_point.kp_id<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="150" width="340" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="24" value="cl_kp_material_rel<br>PK (kp_id, resource_id)<br>FK kp_id -> cl_knowledge_point.kp_id<br>FK resource_id -> cl_course_resource.resource_id<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="1350" y="565" width="360" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="25" value="cl_student_kp_mastery<br>PK mastery_id<br>FK kp_id -> cl_knowledge_point.kp_id<br>student_id, mastery_level, mastery_score<br>last_practiced_at, tenant_id, updated_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="420" width="360" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="101" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="12" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="102" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="12" target="15" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="103" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="14" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="104" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="14" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="105" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="11" target="17" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="106" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="16" target="17" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="107" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="10" target="18" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="108" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="18" target="19" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="109" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="12" target="19" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="110" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="18" target="20" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="112" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="23" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="113" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="24" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="114" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="15" target="24" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="115" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="13" target="25" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="116" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;exitPerimeter=1;entryPerimeter=1;" parent="1" source="19" target="25" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="cl_course_chapter<br>PK chapter_id<br>FK course_id -> cl_course.course_id<br>chapter_no, chapter_title<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="340" y="240" width="250" height="130" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
<mxCell id="2" value="01 课程学习 - 对象类数据流图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="20" width="460" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="知识点/学习进度相关事件可入 ai 同步任务表,由调度器以 REST/JAR 模式驱动向 Milvus + NebulaGraph/Neo4j 同步" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||||
<mxGeometry x="20" y="52" width="1300" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="Actor<br>学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="40" y="130" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="11" value="Actor<br>教师" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="240" width="120" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="12" value="Actor<br>机构管理员" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="40" y="350" width="120" height="70" as="geometry"/></mxCell>
|
||||
@@ -20,9 +23,12 @@
|
||||
<mxCell id="41" value="Entity<br>KnowledgeIndexAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="210" width="220" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="42" value="Entity<br>LearningSessionAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="310" width="230" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="43" value="Entity<br>LearningProgressAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="410" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="44" value="Entity<br>AiSyncTaskAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1"><mxGeometry x="800" y="510" width="240" height="70" as="geometry"/></mxCell>
|
||||
<mxCell id="50" value="PostgreSQL(course/learning)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="170" width="240" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="51" value="Redis(学习进度热点缓存)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="320" width="240" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) CQRS:课程目录读取与学习进度写入分离<br>2) 会话聚合驱动事件化进度更新<br>3) 热点进度走Redis,减轻主库读压<br>4) 课程实体与知识点索引分离,支持后续多策略检索" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxCell id="52" value="PostgreSQL(ai sync task/config)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="470" width="260" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="53" value="Milvus + NebulaGraph/Neo4j" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="1080" y="620" width="260" height="90" as="geometry"/></mxCell>
|
||||
<mxCell id="60" value="设计方法与原因<br>1) CQRS:课程目录读取与学习进度写入分离<br>2) 会话聚合驱动事件化进度更新<br>3) 热点进度走Redis,减轻主库读压<br>4) 课程实体与知识点索引分离,支持后续多策略检索<br>5) 同步调度支持 JAR 本地执行与 REST 远程触发" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||||
<mxGeometry x="1360" y="170" width="360" height="190" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="100" value="浏览课程/课时" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="10" target="20" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
@@ -40,6 +46,9 @@
|
||||
<mxCell id="112" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="42" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="113" value="持久化/缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="114" value="热点缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="51" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="115" value="同步任务入队" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="32" target="44" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="116" value="落库" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="44" target="52" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="117" value="REST/JAR调度执行" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;dashed=1;endArrow=block;endFill=1;" parent="1" source="44" target="53" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
Reference in New Issue
Block a user