36 lines
7.1 KiB
Plaintext
36 lines
7.1 KiB
Plaintext
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|||
|
|
<mxfile host="app.diagrams.net" modified="2026-04-14T10:44:00.000Z" agent="Oz" version="24.7.17">
|
|||
|
|
<diagram id="grading-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="03 批改与反馈 - ER图(不含AI实现细节)" 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="560" height="30" as="geometry"/>
|
|||
|
|
</mxCell>
|
|||
|
|
<mxCell id="10" value="gd_grading_task<br>PK grading_task_id<br>FK submission_id -> hw_submission.submission_id<br>status(PENDING/RUNNING/WAIT_REVIEW/DONE)<br>trigger_source, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="40" y="120" width="330" height="140" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="11" value="gd_grading_rule_set<br>PK rule_set_id<br>rule_version, subject_code, objective_policy<br>subjective_policy(manual_first)<br>tenant_id, enabled" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="400" y="120" width="320" height="130" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="12" value="gd_objective_score<br>PK objective_score_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>FK answer_id -> hw_submission_answer.answer_id<br>score, matched_rule, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="750" y="120" width="340" height="140" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="13" value="gd_subjective_review<br>PK review_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>FK answer_id -> hw_submission_answer.answer_id<br>reviewer_id, review_score, status, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="1120" y="120" width="350" height="140" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="14" value="gd_score_summary<br>PK summary_id<br>FK grading_task_id -> gd_grading_task.grading_task_id<br>total_score, grade_level(A/B/C)<br>surpass_ratio, used_seconds, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="40" y="300" width="330" height="140" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="15" value="gd_error_tag<br>PK error_tag_id<br>tag_code, tag_name<br>category(审题/计算/概念)<br>tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"><mxGeometry x="400" y="300" width="300" height="130" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="16" value="gd_answer_error_rel<br>PK (answer_id, error_tag_id)<br>FK answer_id -> hw_submission_answer.answer_id<br>FK error_tag_id -> gd_error_tag.error_tag_id<br>confidence, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"><mxGeometry x="730" y="300" width="330" height="130" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="17" value="gd_wrong_question<br>PK wrong_question_id<br>FK student_id -> tb_sys_user.user_id<br>FK question_id -> hw_question_item.question_id<br>source_submission_id, mastery_status<br>review_count, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="1090" y="300" width="350" height="150" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="18" value="gd_review_plan<br>PK review_plan_id<br>FK wrong_question_id -> gd_wrong_question.wrong_question_id<br>plan_date, plan_stage(E1/E2/E3)<br>status, tenant_id" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="40" y="490" width="330" height="130" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="19" value="gd_teacher_comment<br>PK comment_id<br>FK review_id -> gd_subjective_review.review_id<br>comment_type(text/voice), content_ref<br>reviewer_id, tenant_id, created_at" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="400" y="490" width="340" height="130" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="20" value="设计方法与原因<br>1) 批改任务聚合承接状态机,保证流程一致性<br>2) 客观分与主观复核拆表,支持并行与补录<br>3) 错因标签与错题沉淀解耦,便于策略演进<br>4) 仅保留 GradingEnginePort 抽象,不绑定AI实现" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
|||
|
|
<mxGeometry x="780" y="500" width="660" height="130" as="geometry"/>
|
|||
|
|
</mxCell>
|
|||
|
|
<mxCell id="100" value="N:1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=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;" parent="1" source="12" target="10" 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="13" target="10" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="103" value="1:1" 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="16" target="15" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
|||
|
|
<mxCell id="105" value="衍生" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="17" target="14" 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;" parent="1" source="18" 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;" parent="1" source="19" target="13" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
|||
|
|
</root>
|
|||
|
|
</mxGraphModel>
|
|||
|
|
</diagram>
|
|||
|
|
</mxfile>
|