# qfod_record 实体 > 所属模块:[数据模型概览](../概览.md) --- ## 1. 表定义 **表名**:`qfod_record` **描述**:存储 Qfod 格式解析数据,对应日志格式 `X#:Q A->B C D E` --- ## 2. 字段定义 | 列名 | 类型 | 约束 | 说明 | |------|------|------|------| | id | UUID | PK, NOT NULL | 主键 | | scenario_id | UUID | FK, NOT NULL | 关联测试场景 | | charger_index | TINYINT | NOT NULL | 充电器索引(0 或 1) | | coil_index | TINYINT | NOT NULL | 线圈索引(0、1、2) | | delta_q | INT | NOT NULL | Q值变化量(ΔQ = current_q - raw_q) | | current_q | FLOAT | NOT NULL | 当前实时 Q值 | | raw_q | FLOAT | NOT NULL | 原始 Q值 | | fod_type | TINYINT | NOT NULL | 异物类型编码 | | is_deleted | BOOLEAN | NOT NULL, DEFAULT FALSE | 软删除标记 | | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 创建时间 | --- ## 3. 外键 | 外键 | 引用表 | 说明 | |------|--------|------| | scenario_id | test_scenario.id | 关联测试场景(必需) | --- ## 4. 索引 | 索引名 | 字段 | 用途 | |--------|------|------| | idx_qfod_scenario | scenario_id | 按测试场景查询 | | idx_qfod_charger_coil | (charger_index, coil_index) | 按检测通道查询 | | idx_qfod_fod_type | fod_type | 按异物类型统计 | | idx_qfod_delta_q | delta_q | 阈值分析 | --- ## 5. 约束 | 约束名 | 类型 | 定义 | |--------|------|------| | chk_qfod_charger | CHECK | charger_index IN (0, 1) | | chk_qfod_coil | CHECK | coil_index IN (0, 1, 2) | --- ## 6. EF Core 模型 ```csharp // Models/QfodRecord.cs using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace WCTDataMiner.Models; [Table("qfod_record")] [Index(nameof(ScenarioId), Name = "idx_qfod_scenario")] [Index(nameof(ChargerIndex), nameof(CoilIndex), Name = "idx_qfod_charger_coil")] [Index(nameof(FodType), Name = "idx_qfod_fod_type")] [Index(nameof(DeltaQ), Name = "idx_qfod_delta_q")] public class QfodRecord { [Key] [Column("id")] public Guid Id { get; set; } = Guid.NewGuid(); [Required] [Column("scenario_id")] public Guid ScenarioId { get; set; } [Required] [Column("charger_index")] public byte ChargerIndex { get; set; } [Required] [Column("coil_index")] public byte CoilIndex { get; set; } [Required] [Column("delta_q")] public int DeltaQ { get; set; } [Required] [Column("current_q")] public float CurrentQ { get; set; } [Required] [Column("raw_q")] public float RawQ { get; set; } [Required] [Column("fod_type")] public byte FodType { get; set; } [Required] [Column("is_deleted")] public bool IsDeleted { get; set; } = false; [Required] [Column("created_at")] public DateTime CreatedAt { get; set; } = DateTime.UtcNow; [ForeignKey(nameof(ScenarioId))] public TestScenario Scenario { get; set; } = null!; } ``` --- ## 7. 检测通道组合 | ChargerIndex | CoilIndex | 检测通道 | |--------------|-----------|----------| | 0 | 0 | 充电器0-线圈0 | | 0 | 1 | 充电器0-线圈1 | | 0 | 2 | 充电器0-线圈2 | | 1 | 0 | 充电器1-线圈0 | | 1 | 1 | 充电器1-线圈1 | | 1 | 2 | 充电器1-线圈2 |