Files
dpb/doc/桃育种系统模块扩展需求规格.v1.6.md
34047007@qq.com b95053c52c init: 初始化 dpb 桃育种系统代码库
前后端 + 后端 FastAPI 全量源码、部署脚本与文档。
2026-08-06 00:17:49 +08:00

63 KiB
Raw Permalink Blame History

桃育种系统 · 模块扩展需求规格(V2 草案)

编制日期:2026-07-28 依据:通用育种软件功能清单(用户提供) + 国际成熟方案(BrAPI / BMS·Breedbase / RosBREED / MIAPPE / Crop Ontology / FAO-MCPD / Genesys + doc\果树所\育种\yz.sql 真实桃性状 + 现有 14 个 breeding 域 状态:草案,待评审。字段取值/枚举以「待确认」标注处需与业务方对齐后再落地(遵循"不确定不擅自动手"准则)。

版本历史

版本 日期 说明
v1.0 2026-07-28 初稿+复审:14 域对标、新增 7 模块、§8 复审(9 遗漏)、EAV 定稿为混合固定列。BrAPI/MIAPPE/team/库存 待定
v1.1 2026-07-28 决策落地:① 采纳直接对齐 BrAPI API(新增 BrAPI 只读适配层)② 采纳 MIAPPE 合规不建 team 模块(仅数据隔离,不需要,留 RBAC+created_id)④ 库存延后(暂用报表)
v1.2 2026-07-28 取值决策(用户授权"你来定"):敲定 stage/generation/group_type/design_type 四枚举(§9+ propagation 纳入一期(§3.8);trait 种子建议 yz.sql;字段表补 generation/germplasm_id
v1.3 2026-07-28 §8 二次复审落地:① MET 链路彻底修补trial_study.block_count + planting.trial_study_id + tree.trial_study_id/block_no + plot.block_no),与库存 seed_lot 一并建模,形成 seed_lot→seedling→planting→tree→trial_study 选择强度链(§3.13/§4/§5)② §0 原则1 与混合模型对齐(修订措辞)③ observation/field_operation 改显式 FK(弃多态)④ 补 environment_condition / audit_log / selection_rule / prediction 字段规格(§3.9–§3.12)⑤ tree_evaluation 明确"按 pa_four 扩列"+ 统一性状值视图 ⑥ 补「选择阈值规则」+「批量表型导入」规划 ⑦ 文档计数/枚举对齐修正
v1.4 2026-07-28 国际基准三轮复审(BrAPI/Breedbase/RosBREED/MIAPPE/Crop Ontology/FAO-MCPD/Genesys)落地:① 新增 trial_study_entryentry 清单+entry_numberMET 设计矩阵)② site 补 lat/long/elevation(空间 BLUP/MIAPPE)③ observation 加 status 校验态(数据质量)④ trait 加 ontology_uriCrop Ontology 对接)⑤ 明确 tree.trial_study_id/block_no 为派生(单写点=planting,防双真相漂移)⑥ germplasm 补护照描述符块(FAO-MCPD)⑦ 新增 genotyping_dataset+marker.panelGS 训练群体分组)⑧ selection_result 加 rule_id(决策闭环)⑨ 补 crossing block 父/母本树(pollination 挂 female/male_tree_id)⑩ experiment_factor / breeding_report / breeding_program 标记延后。详见 §8.6
v1.6 2026-07-28 第五轮复审(v1.5 自洽+国际盲点)全部采纳:① tree_evaluation 加 trial_study_idA1 核心性状环境键)② planting 粒度=block 级 + entry 跨 block 多 plantingA2)③ 新增 planting_treatment 关联表(A3)④ seed_lot.used_count 明确粒数(A4)⑤ §4 补 tree_photo 行(A5)⑥ tree→germplasm 重复测量聚合 EBVA6)⑦ 国际补强:marker.assembly_version、genotype_call VCF/GP、trial_study.season、observation.validated_by/date/unit、trait.method_uri/scale_uri、planting.propagation_id、observationUnit level、kinship A 矩阵、selection_rule EBV 阈值、breeding_program 自由文本说明 ⑧ selection_result.trial_study_id、新表数据权限约束(并补齐 v1.5 因替换异常遗漏的 §3.14/treatment 行/used_count)。详见 §8.8

0. 设计原则(本规格的宪法)

  1. 性状字典与测量值分离 + 混合存储(对标 BrAPI ObservationVariable + Observationtrait 是唯一的性状字典(代码/类型/单位/量表),新增桃性状只加字典、不动核心表结构;测量值分两层存——① 核心高频性状(桃稳定 ~30–40 个,源自 yz.sql pa_four)以固定列落在 tree_evaluation(报表/SQL 聚合主路径)② 物候时序与临时/新增性状(is_core=false)走 EAV observation。二者经"统一性状值视图/服务"在统计层归一(§8.4)。这是与初稿最大的修正:不再追求纯 EAV,而是"字典一处定义、值可固定可扩展"。
  2. Program/Trial/Study 三层(对标 BrAPI:把"多年多点试验"从 site/plot 里抽象出来,支持同一品系跨生态点、跨年同步试验(MET, Multi-Environment Trial)。
  3. 桃语义而非大田语义:清单里的「P/F1/F2 世代、拔节期/抽穗期、播种季节、随机区组/间比」是按一年生大田作物(玉米/小麦)写的,对桃(多年生无性繁殖果树)必须语义替换(见 §1)。
  4. 砧木–接穗建模:桃特有的「嫁接繁殖」维度,现有系统完全缺失,必须补齐。
  5. 预留分子层marker/genotype_sample/genotype_call 对齐 BrAPI Sample+Calls,未来接 GBS / PeachSNP170K 做基因组选择(GS)不改骨架。
  6. 统计与决策是地基不是补丁:上面的数据模型必须能让 V1.1 统计引擎(R sommer/lme4 做 ABLUP/EBV、选择指数)与 V3.0 AI 决策直接消费,不做"先堆数据再补分析"的短视设计。
  7. API 直接对齐 BrAPI(已采纳):保留现有 /breeding/*UI 业务接口)的同时,新增 BrAPI 兼容只读适配层/brapi/v2/...)。数据模型已按 BrAPI 实体设计,适配成本低,可无缝对接 Breedbase / Flapjack / 国际数据交换,避免未来重复造导入导出。
  8. MIAPPE 合规(已采纳):试验元数据按 MIAPPE 的 Investigation(=target/Program) / Study(=trial_study) / ObservationUnit(=tree/plot) / ObservationVariable(=trait) 对齐,作为数据共享/投稿的一致性基线。

1. 桃育种语义替换表(清单 → 桃)

清单原文(大田作物语境) 桃系统应改为 落点
P / F1 / F2 世代(选择阶段) 选择阶段 stage:实生苗 → 初选株 → 复选株 → 品系 → 区试品系 → 新品种(枚举见 §9) germplasm/tree/cross/selection_result 的 stage
遗传世代 遗传世代 generationF1 / F2 / BC1 / BC2 / BC3(与 cross_type 联动;引入种质留空) 权威 cross_combination.generationtree/germplasm 冗余拷贝便于筛选
拔节期 / 抽穗期 桃物候:萌芽 / 开花(初花·盛花) / 坐果 / 果实发育 / 成熟 / 落叶 observation(物候类变量)
播种季节 桃用嫁接 / 定植(砧木 + 接穗),非播种 planting.rootstock_id
自交系 桃为克隆(无性繁殖),入选株 = 待审定克隆,需砧木关联 germplasm.is_rootstock / tree.rootstock_id
随机区组 / 间比试验 桃果园株数少,简化为 区组 + 重复 + 对照轻量设计 trial.design_type
材料编号 accession_no(唯一 accession 编号) germplasm.accession_no

stage / generation 枚举(v1.2 已定,详 §9):依 RosBREED 桃无性选育流水线与现有 14 域敲定,作为 sys_dict 新增字典类型(breeding_stage / breeding_generation),落库英码、前端显中文。


2. 目标模块总览(现有 14 + 新增 13,部分为规划)

A. 现有 14 域(保留 + 字段调整) germplasm / site / plot / target / cross_combination / pollination / seed_treatment / seedling / planting / tree / tree_evaluation / tree_photo / selection_result / personnel

B. 新增模块(P0–P2,含 v1.3 复审补入)

模块 表名 BrAPI 映射 优先级
trait(性状字典) breeding_trait ObservationVariable P0 地基
observation(通用观测) breeding_observation Observation P0 地基
field_operation(农事操作) breeding_field_operation Observation(op_type) P0
trial(多年多点试验) breeding_trial + breeding_trial_study + breeding_trial_study_entry(v1.4) Trial / Study / Entry P1
group(分组/标签) breeding_group + breeding_group_member List P1
statistics(统计报表) breeding_report(配置)+ 聚合端点 P2
propagation(克隆扩繁) breeding_propagation P1(§3.8
seed_lot(种子批·库存) breeding_seed_lot P1(§3.13,与 MET 一并建模)
environment_condition(环境因子) breeding_environment_condition P1(§3.9G×E 地基)
audit_log(审计日志) breeding_audit_log P1(§3.10
selection_rule(选择阈值规则) breeding_selection_rule P1(§3.11,决策地基)
treatment(试验因子/处理) breeding_treatment Treatment(BrAPI) P1(§3.14,支撑 split_plot 等设计的因子主效应/互作估计)
planting_treatment(定植-处理关联) breeding_planting_treatment P1(§3.15treatment 多对多落地)
分子基因型层 breeding_marker(含 panel) / breeding_genotype_sample / breeding_genotype_call + breeding_genotyping_dataset(v1.4) Sample / Calls / Marker / Dataset V2.0(地基先建)
predictionGS 育种值) breeding_prediction V2.0(§3.12,与分子层同期)

注:原稿数"21"已过期,此处以清单为准;其中 seed_lot / environment_condition / audit_log / selection_rule 为 v1.3 复审补入一期,prediction 留 V2.0。

重要简化(避免模块膨胀)

  • 物候期不单列模块 → 只是 observation 中「物候类变量」的观测。
  • 系谱树不单列模块 → 靠 cross_combination.parent_combination_id 自链 + germplasm.pedigree 字符串 + 前端 D3 树图 + /pedigree/{id} 聚合端点。

3. 新模块字段规格

3.1 breeding_trait(性状字典,P0

字段 类型 约束 说明
id int PK
trait_code varchar(64) UNIQUE, NOT NULL brixfruit_weightbloom_date
trait_name varchar(128) NOT NULL 中文名:可溶性固形物、单果重…
category varchar(32) NOT NULL fruit/flower/plant/disease/phenology/yield/quality/rootstock
data_type varchar(16) NOT NULL numeric / categorical / date / boolean
unit varchar(32) g、%、°Brix、mm、date
method varchar(256) 测定方法(如折射仪、游标卡尺)
scale_json jsonb 量表/选项(categorical 时存选项数组;numeric 时存 min/max/step
ontology_uri varchar(256) v1.4Crop Ontology / Trait Ontology / MIAPPE 受控词表 term URI(如 CO_356:0000041),供 BrAPI 适配层与国际合作仓储对接;可空
is_preset bool default false 是否系统内置(种子数据)
remark varchar(512)
created_time / updated_time / is_deleted 标准 来自 ModelMixin

BrAPI 映射简化说明(v1.4BrAPI ObservationVariable = Trait + Method + Scale 三元组,本系统将 method/scale 内联合并trait(桃单作物、方法稳定,避免三表 join 复杂度)。适配层导出 BrAPI 时需按此三元组拆分;ontology_uri 提供受控词表引用,满足 MIAPPE/Crop Ontology 可引用性。

种子数据来源doc\果树所\育种\yz.sqlpa_four(~40 字段:单果重/果形/果核/可溶性固形物/成熟期/离粘核/风味…)与物候类变量,导入为 is_preset=true 的桃专用性状字典。

3.2 breeding_observation(通用观测,P0

采用显式可空外键tree_id / plot_id / combination_id),不采用 (unit_type, unit_id) 多态——多态会破坏引用完整性、无法真正联表、且令现有 _build_conditions 数据权限注入(依赖已知 FK 列)失效。三者至多一个非空。

字段 类型 约束 说明
id int PK
tree_id int FK→breeding_tree 可空 观测单元=单株
plot_id int FK→breeding_plot 可空 观测单元=小区
combination_id int FK→breeding_cross_combination 可空 观测单元=杂交组合(如组合级表型)
trait_id int FK→breeding_trait NOT NULL 测了哪个性状
value_numeric numeric(12,4) data_type=numeric 时
value_text varchar(512) categorical / boolean 存此
value_date date data_type=date 时
obs_year int 观测年份(MET 聚合键)
obs_date date 具体日期
site_id int FK→breeding_site 观测地点(冗余便于聚合;亦可由 tree→plot→site 推导)
person_id int FK→breeding_personnel 观测人
trial_study_id int FK→breeding_trial_study 可空 区分「试验观测」vs「果园日常观测」;试验观测可参与 BLUP
status varchar(16) default "draft" v1.4:数据质量态 draft(草稿)/validated(已校验);批量导入/多人观测下隔离脏数据,统计前按 validated 筛选
validated_by int FK→breeding_personnel v1.6:校验人(status=validated 时记录)
validated_date date v1.6:校验日期
unit varchar(32) v1.6:本次观测值单位(冗余自 trait.unit,便于核对与单位换算);批量导入时按 trait.unit 校验/换算
remark varchar(512)

索引(trait_id, obs_year)(tree_id)(plot_id)(combination_id)(trial_study_id)语义:物候期时序观测 + is_core=false 的扩展性状走这张表;核心性状仍走 tree_evaluation 固定列(见 §4/§8.4)。统计层经「统一性状值视图」把两者归一(§4 末尾)。v1.6B8:本系统 tree/plot/block 对应 BrAPI observationLevelsplant/plot/block),观测单元层级即观测的 FK 类型(tree_id/plot_id/combination_id)。

3.3 breeding_field_operation(农事操作,P0

同样改显式 FKtree_id / plot_id),弃 (unit_type, unit_id) 多态,理由同 §3.2。

字段 类型 约束 说明
id int PK
op_type varchar(32) NOT NULL 施肥/灌溉/植保/除草/修剪/病害防治/其他
tree_id int FK→breeding_tree 可空 作用对象=单株
plot_id int FK→breeding_plot 可空 作用对象=小区
op_date date NOT NULL 操作日期
material varchar(128) 药剂/肥料名
dosage varchar(64) 用量
method varchar(128) 方式(叶面/根施…)
operator_id int FK→breeding_personnel 操作人
site_id int FK→breeding_site 定位
remark varchar(512)
索引(tree_id)(plot_id)(op_date)
BrAPI 映射修正field_operation 不映射为 /eventsBrAPI 无顶层 Event);改为映射到 /observations(带 op_type),或自定义只读端点(见 §8.2-C)。

3.4 breeding_trial + breeding_trial_study(多年多点试验,P1

breeding_trial

字段 类型 说明
id int PK
trial_code varchar(64) UNIQUE 试验编号
trial_name varchar(128) NOT NULL
target_id int FK→breeding_breeding_target 关联育种目标
design_type varchar(32) 取值见 §9rcbd/augmented/contrast/split_plot/unreplicated
description varchar(512)
years varchar(64) 跨年计划,如 2026-2028
remark varchar(512)

breeding_trial_studyTrial×Location×Year

字段 类型 说明
id int PK
trial_id int FK→breeding_trial
site_id int FK→breeding_site 试验点
year int 年份
replicate_count int 重复次数(原 replicate
block_count int 区组数(v1.3 补);与 tree.block_no 对应,是 BLUP 的 block 随机效应来源
design_type varchar(32) 取值见 §9.4(便于 study 级覆盖 trial 默认设计)
control_germplasm_id int FK→breeding_germplasm 对照品种
layout_json jsonb 田间种植图(小区排布坐标)
season varchar(32)
remark varchar(512)

试验隶属链路(v1.3 彻底补全,原稿断裂):观测单元(tree)经两条显式 FK 挂到试验——

  • breeding_planting.trial_study_id(定植时把这批树挂到某 trial_study,运营钩子)
  • breeding_tree.trial_study_id(从 planting 同步,BLUP 直接消费)+ breeding_tree.block_no(该树所属区组/重复)
  • breeding_plot.block_no(小区级试验时;tree 未填 block_no 则继承 plot

这样任意 tree_evaluation/observation 记录 → tree → trial_study(environment=site×year) + block_no → 混合模型 y = genotype + block + environment + G×E 的 block 项不再缺失。布局图由前端可视化 + 轻量排布算法生成。

breeding_trial_study_entry(试验 entry 清单,v1.4 补,对标 BrAPI Study 的 entry / ObservationUnit

字段 类型 说明
id int PK
trial_study_id int FK→breeding_trial_study 所属试验
germplasm_id int FK→breeding_germplasm 参试无性系/品系(entry 的种质)
entry_number int entry 编号(该 study 内唯一;BrAPI entryNumberBLUP 设计矩阵聚合键)
planned_reps int 计划重复/区组数
n_plants int 计划株数
is_control bool 是否对照 entry
remark varchar(512)

为何需要 entry 抽象(v1.4v1.3 让 tree 直接带 germplasm_id + trial_study_id + block_no,假设一株=一个观测单元。但一个无性系在某 study 内常重复多株/多区组,且需"entry 编号"聚合设计效应。BrAPI 的 ObservationUnit = germplasm × entryNumber × replicate × blockNumber × position,本表即此 entry 层;tree 通过 entry_id(或冗余 germplasm_id)挂回,统计层按 entry_number 聚合后再估 genotype 效应。

⚠ 单写点纪律(v1.5 强化)tree.trial_study_id / tree.block_no / tree.entry_id 均派生自 planting(定植时 planting 一次性写入 trial_study_id / block_no / entry_idtree 创建时由 service 从所属 planting 复制并锁定;后续修改只能改 planting 并级联同步 tree)。严禁两处各自手填,否则 BLUP 输入静默错配。

  • tree.trial_study_id 仅记「定植所属 study」(来自 planting 的单次定植),多年生树跨年/跨点观测改 tree 自身,而是落到 observation.trial_study_id + obs_year(观测级表达),统计按 observation 的 study 聚合,tree 只是观测单元。
  • 两类 tree 区分(v1.5planting.entry_id 非空 ⇒ 这是参试无性系批次,定植时 germplasm_id 必须等于 trial_study_entry.germplasm_id(入试即定,禁待晋升);planting.entry_id 为空 ⇒ 杂种实生苗批次,germplasm_id 待晋升流程写入(晋级纪律管)。单写点 + entry 有无即可区分两类 tree,无需新增类型字段。
  • 写树校验:tree.trial_study_id = planting.trial_study_idtree.entry_id = planting.entry_idtree.germplasm_id 与 entry 一致性按上述规则。

3.5 breeding_group + breeding_group_member(分组/标签,P1

breeding_group

字段 类型 说明
id int PK
group_name varchar(128) NOT NULL
group_type varchar(32) 取值见 §9project/family/category/temporary_set/custom
target_id int FK 关联育种目标(可选)
description varchar(512)

breeding_group_member

字段 类型 说明
id int PK
group_id int FK→breeding_group
germplasm_id int FK→breeding_germplasm 成员种质
tree_id int FK→breeding_tree 或成员单株
note varchar(256)

group_type 取值已定(§9):project(育种项目) / family(家系·杂交组合群) / category(种质类别群) / temporary_set(临时选系集) / custom(自定义)。为避免与 target(育种目标) 语义重叠,不设 objective 维度。 family / category 冗余消减(v1.3group_type=family 本质是"某 cross_combination 的后代集合",可由 tree.combination_id 动态推导,不必存静态成员 → 建议 family 做成虚拟分组(查询),不在 group_member 落成员;group_type=category(油桃/蟠桃/观赏桃)与 germplasm.variety_type 字典重叠,直接复用 variety_type,不在 group 里另起炉灶。故 group_member 主要服务于 project/temporary_set/custom 三类。

3.6 breeding_report(统计报表配置,P2

字段 类型 说明
id int PK
report_name varchar(128) NOT NULL 报表名
report_type varchar(32) 育种进度/世代汇总/杂交组合统计/材料库存/MET分析
query_json jsonb 报表查询参数(保存配置,便于复用)
created_by varchar(64)

配套:只读聚合端点(不建大表):

  • GET /breeding/statistics/progress 育种进度
  • GET /breeding/statistics/generation-summary 世代汇总
  • GET /breeding/statistics/cross-stats 杂交组合统计
  • GET /breeding/statistics/inventory 材料库存
  • GET /breeding/statistics/met 多年多点分析(钩子,V1.1 R 引擎)

3.7 分子基因型层(V2.0,地基先建)

breeding_marker(标记/位点)

字段 类型 说明
id int PK
marker_name varchar(64) UNIQUE 如 SNP_Chr01_123456
chromosome varchar(16) 染色体
position int 物理位置
marker_type varchar(16) SSR / SNP / InDel
panel varchar(32) v1.4:所属标记面板/芯片版本(如 PeachSNP170K / GBSv1),用于区分不同基因组集、GS 时需一致
assembly_version varchar(32)
remark varchar(512)

breeding_genotyping_dataset(基因分型数据集,v1.4 补,GS 训练/预测群体分组)

字段 类型 说明
id int PK
dataset_name varchar(128) NOT NULL 如 "2026_Brix_GS_train"
platform varchar(32) GBS / PeachSNP170K / 测序
panel varchar(32) 与 marker.panel 对应
purpose varchar(16) train(训练群体)/ predict(预测群体)/ reference
run_date date 分型日期
lab varchar(128) 检测单位
remark varchar(512)

关联:genotype_sample.dataset_id FK→genotyping_dataset(标记某样品属于哪个分型集)。GS 训练时按 dataset(purpose=train) 取 sample→call 矩阵,避免每次手工挑样品。

breeding_genotype_sample(基因型样品)

字段 类型 说明
id int PK
dataset_id int FK→breeding_genotyping_dataset v1.4:所属分型数据集
source_type varchar(16) germplasm / tree
source_id int 来源 id
sample_type varchar(16) DNA / leaf
sample_date date
method varchar(64) 测序/芯片(GBS / PeachSNP170K
lab varchar(128) 检测单位
remark varchar(512)

breeding_genotype_call(基因型调用)

字段 类型 说明
id int PK
sample_id int FK→breeding_genotype_sample
marker_id int FK→breeding_marker
allele varchar(32) 基因型编码(AA/AT/TT 或 0/1/2);v1.6:遵循 VCF/GP 编码约定(Breedbase 走 VCF 导入),0/1/2 = 纯合ref/杂合/纯合alt
remark varchar(256)

索引(sample_id, marker_id) 复合唯一。

3.8 breeding_propagation(克隆扩繁/苗圃,P1,已定纳入一期)

桃主繁殖方式为嫁接/芽接扩繁(非种子实生)。打通 入选株(tree) → 克隆种质(germplasm) → 扩繁批次(propagation) → 新定植树(tree) 闭环;现有 seedling/seed_treatment 仍管种子实生苗,二者互补。

breeding_propagation(扩繁批次)

字段 类型 说明
id int PK
batch_code varchar(64) UNIQUE 扩繁批次号
scion_source_type varchar(16) germplasm / tree(被扩繁的克隆来源)
scion_source_id int 来源 id(入选株或其对应种质)
produced_germplasm_id int FK→breeding_germplasm 本次扩繁产出的克隆种质(晋升链路,tree.germplasm_id 同源)
rootstock_id int FK→breeding_germplasm 砧木(is_rootstock=true 的种质)
method varchar(16) 嫁接/芽接/扦插
graft_date date 嫁接日期
nursery_site_id int FK→breeding_site 苗圃地点
operator_id int FK→breeding_personnel 操作人
scion_count int 接穗/芽数
grafted_count int 嫁接株数
survival_count int 成活株数(后续登记)
destination varchar(32) 出圃/定植/入库
remark varchar(512)

survival_countgrafted_count 可派生成活率;产出苗木经 planting(带 rootstock_id)成为新 tree,新 tree 的 germplasm_id = produced_germplasm_id,完成闭环。

3.9 breeding_environment_condition(环境因子,P1G×E 地基)

多年多点分析的核心是 G×E 互作。无 site×year 的环境协变量(需冷量/积温/降水),BLUP 只能粗估。本表提供每个试验点每年的环境背景。

字段 类型 约束 说明
id int PK
site_id int FK→breeding_site NOT NULL 试验点
year int NOT NULL 年份
chilling_hours numeric(8,1) 需冷量(小时)
growing_degree_days numeric(8,1) 积温(GDD
rainfall_mm numeric(8,1) 降水量
temp_avg numeric(6,1) 年均温
soil_moisture numeric(6,1) 土壤墒情(可选)
source varchar(32) 气象站/人工记录/遥感
remark varchar(512)

索引/唯一(site_id, year) 唯一,确保每点每年一条。可复用 yz.sql 的"天气"字段做种子。

3.10 breeding_audit_log(审计日志,P1

晋级审批、全程可追溯需"谁/何时/改了什么"轨迹,现有仅 updated_time 粒度不足。

字段 类型 说明
id int PK
entity_type varchar(32) 实体(tree/selection_result/cross_combination…)
entity_id int 实体 id
action varchar(32) create/update/delete/select/approve
field_name varchar(64) 变更字段(可空,批量时为 null
old_value varchar(512) 旧值
new_value varchar(512) 新值
operator_id int FK→breeding_personnel 操作人
created_time 标准 时间戳

索引(entity_type, entity_id)(created_time)。建议作为现有 14 域的通用切面(在 Service 写操作时统一落审计),而非逐表加列。

3.11 breeding_selection_rule(选择阈值规则,P1,决策地基)

RosBREED 的 DNA-informed 选择靠指数阈值(如 Brix≥12 且单果重≥200g)自动 flagged。selection_result 只记晋级/淘汰,缺"标准"实体,决策支撑会退化为纯人工勾选。本表把"选择标准"显式建模。

字段 类型 约束 说明
id int PK
rule_name varchar(128) NOT NULL 规则名(如"鲜食品系晋级线")
target_id int FK→breeding_breeding_target 适用育种目标(可选)
stage varchar(32) 适用选择阶段(§9.1,如 ap 复选)
conditions_json jsonb NOT NULL 阈值条件数组,如 [{"trait_code":"brix","op":">=","value":12},{"trait_code":"fruit_weight","op":">=","value":200}]
logic varchar(8) default "and" 多条件组合 and/or
action varchar(16) flag(标记)/select(自动晋级)/eliminate(自动淘汰)
priority int 规则优先级
enabled bool default true
remark varchar(512)

决策支撑(§5.4):前端按规则对 tree_evaluation/观测值求布尔,自动 flag/晋级;规则与 trait 字典通过 trait_code 关联,新增性状自动可被规则引用。

3.12 breeding_predictionGS 育种值,V2.0 占位规格)

与分子层(§3.7)同期。RosBREED 闭环:表型+基因型→训练模型→输出 EBV→指导下轮选配。此处先定表结构,分析引擎后置。

字段 类型 说明
id int PK
model_name varchar(128) 模型名(如"2026_Brix_GS"
trait_id int FK→breeding_trait 预测的性状
method varchar(32) gBLUP/rrBLUP/GBLUP/Bayes
accuracy numeric(5,3) 模型精度(交叉验证)
train_n int 训练样本数
predict_date date 预测日期
note varchar(512)

明细 breeding_prediction_value(个体预测值):prediction_id / germplasm_idtree_id / predicted_value / reliability

3.13 breeding_seed_lot(种子批·库存,P1,与 MET 一并建模)

v1.1/§8.3 曾把库存"延后"。v1.3 复审:MET 与选择强度都依赖 "种子→播种→定植→入选" 链,故把 seed_lot 作为批记录提前进一期(仍非完整事务性出入库台账,后者延后)。与 §3.4 的 trial_study 链路共同拼出完整育种流程。

字段 类型 约束 说明
id int PK
combination_id int FK→breeding_cross_combination NOT NULL 所属杂交组合
lot_code varchar(64) UNIQUE, NOT NULL 种子批号
harvest_year int 收获年份
seed_count int 收获粒数(选择强度源头)
used_count int default 0 v1.5/v1.6:已从该批取用的粒数(在 seedling/播种环节按粒累加,非定植株数),由 planting/seedling 写操作维护;remaining = seed_count - used_count 派生「剩余可播种量」,选强链前段(获种→已用)可量化,不再依赖手工孤值
germination_rate numeric(5,2) 发芽率 %(活力)
storage_type varchar(16) 种子库/离体/DNA
storage_location varchar(128) 存放位置
test_date date 活力检测日期
remark varchar(512)

链接(选择强度链)

  • breeding_seedling.seed_lot_id FK→seed_lot(追溯幼苗来源批)
  • breeding_planting.seed_lot_id FK→seed_lot(可选;种子来源定植)
  • used_count 维护(v1.5/v1.6:每次从某 seed_lot 取种(建 seedling / planting 引用该 lot)时由 service 按累加 used_countremaining = seed_count - used_count 实时可查,避免手工维护 seed_count 与实际消耗脱节(注意粒度:粒≠株,used_count 记粒数)。

选择强度贯通(v1.5/v1.6seed_lot.seed_count(获种数)→ seed_lot.used_count(已用/播种粒数,派生 remaining)→ COUNT(seedling WHERE seed_lot_id)(成苗)→ COUNT(tree WHERE planting.seed_lot_id)(定植数)→ COUNT(selection_result 入选)(入选数)→ 各级选择强度/选择率可算,且 "每组合在某试验点种了多少" 与 MET 的 trial_study 直接挂钩。前段「获种→已用」因 used_count 派生而不再失真。


3.14 breeding_treatment(试验因子/处理,P1v1.5 提进一期)

背景:§9.4 design_typesplit_plot(砧木×接穗两因子)。若只记 design_type 而不结构化 factor/level,BLUP 无法估因子主效应与互作,设计等于白支持。BrAPI 有 Treatment(factor + level) 实体;MIAPPE 要求 ExperimentalFactor。本表把"试验处理"显式建模,使裂区/析因设计的统计效应可估。

字段 类型 约束 说明
id int PK
trial_study_id int FK→breeding_trial_study NOT NULL 所属试验
factor varchar(32) NOT NULL 因子名(如 rootstock 砧木 / scion 接穗 / fertilizer 肥料)
level varchar(32) NOT NULL 因子水平(如 GF677 / Maotao / N0
description varchar(256) 处理说明
remark varchar(512)

索引/唯一(trial_study_id, factor, level) 唯一。统计层按 treatment.factor×level 估主效应与互作,与 block / environment 一并进入混合模型 y = genotype + block + treatment + genotype×env(+空间)

3.15 breeding_planting_treatment(定植-处理关联,P1v1.6 落地 A3)

背景(A3v1.6:§3.14 的 treatment 需落到具体定植批次才能进统计。一个 block 级 planting 批次常同时接受一组处理(如 rootstock=GF677 + scion=Maotao),故建多对多关联表。

字段 类型 约束 说明
id int PK
planting_id int FK→breeding_planting NOT NULL 定植批次(block 级)
treatment_id int FK→breeding_treatment NOT NULL 接受的处理(factor×level
remark varchar(512)

索引/唯一(planting_id, treatment_id) 唯一。统计层按 planting→treatment 把 factor×level 挂到该批次全部 tree,与 block/environment 一并进入混合模型。


4. 现有模块字段调整(非新增模块)

模块 新增字段 说明
germplasm accession_no(varchar UNIQUE)、pedigree(varchar 系谱串)、stage(varchar 选择阶段)、generation(varchar 遗传世代,可空)、storage_type(varchar 田间/离体/种子/DNA)、is_rootstock(bool)、rootstock_id(int FK 自关联)、护照块(v1.4,FAO-MCPD): institute_code(varchar 保存单位)、country_origin(varchar 起源国)、collection_site(varchar 采集地)、acquisition_date(date 引种日期)、biological_status(varchar 生物状态:wild/landrace/breeding_line)、breeding_program(varchar 所属育种计划,v1.6 暂自由文本,后续可升级 FK breeding_program 顶层) 种质档案补全 + 桃特有维度 + 国际种质资源护照(Genesys/FAO 对齐)
cross_combination cross_type(varchar 杂交/自交/开放)、parent_combination_id(int 自链 FK)、reason(varchar 选配理由)、stage 系谱链 + 选配理由
pollination bagging_date(date 套袋)、emasculation_date(date 去雄)、female_tree_id(int FK→breeding_tree,可空)、male_tree_id(int FK→breeding_tree,可空)(v1.4,杂交圃父/母本树指定) 田间杂交登记补全 + 控制杂交父/母本树追溯(crossing block
seedling seed_lot_id(int FK→breeding_seed_lot) 追溯幼苗来源批(选择强度链,§3.13)
planting rootstock_id(int FK→germplasm)、entry_id(int FK→breeding_trial_study_entry,可空,v1.5 单写点补 entry)trial_study_id(int FK→breeding_trial_study,可空,单写点)block_no(int,该批树所属区组,单写点)seed_lot_id(int FK→breeding_seed_lot,可空)propagation_id(int FK→breeding_propagation,可空,v1.6 来源双路径) 粒度=block 级批次(v1.6 明确:同一 entry 跨多 block 须建多个 planting;砧木–接穗建模 + 试验隶属(MET 链路唯一写入口;entry_id 非空=参试无性系批次,germplasm_id 入试即定;为空=杂种实生苗批次,germplasm_id 待晋升) + 库存链接(seed_lot.used_count 派生剩余)+ 来源双路径(种子批/扩繁批二选一)
tree stage(varchar 选择阶段)、generation(varchar 遗传世代,冗余自 combination)、rootstock_id(int FK→germplasm)、germplasm_id(int FK→breeding_germplasm,由晋升流程写入禁手填;v1.5 明确:entry_id 非空时=germplasm_id 入试即定=entry.germplasm_identry_id 为空时待晋升)entry_id(int FK→breeding_trial_study_entry,可空,v1.5 派生自 planting,区分两类 tree)trial_study_id(int FK→breeding_trial_study,可空,v1.5 仅记「定植所属 study」,派生自 planting;跨年/跨点观测走 observation.trial_study_id+obs_year)block_no(int,派生自 plantingBLUP block 效应来源) 阶段/世代标记 + 克隆晋升链路(4.x 全流程 + GS 拼接依赖)+ MET 观测单元归属(派生,单写点=planting;两类 tree 以 entry_id 有无区分)
site soil_type(varchar 土壤类型)、latitude(numeric 坐标)、longitude(numeric)、elevation(int 海拔)(v1.4,空间 BLUP/MIAPPE 环境描述) 试验地块补全 + 地理定位
selection_result 对齐 stage 晋级流转(建议加 from_stage/to_stage + approved_by)、rule_id(int FK→breeding_selection_rule,可空,v1.4,记录触发晋级的规则,决策闭环) 晋级审批流 + 选择决策溯源

tree_evaluation 定位(复审定稿:混合模型)tree_evaluation 不是"原样保留",而是按 yz.sqlpa_four 扩列为承载桃稳定高频 ~30–40 个核果实/农艺性状的固定列评分卡(一树一年一行),这是 90% 报表与 SQL 聚合的主路径;observation 仅作为扩展层承载物候期时序观测 + 字典中标记为 is_core=false 的新增/临时性状。详见 §8.4。原则修订:§0「性状与观测分离」对单作物程序过严,改为「核心性状固定列 + 扩展性状 EAV」。

v1.6 补(A1tree_evaluationtrial_study_id(可空,按该年 observation.trial_study_id 推导或直填),使固定列核心性状也有环境键,纳入 MET 环境效应估计(修复 v1.5「树不跨 study」推到 EAV 层、却漏固定列层的裂痕)。

统一性状值视图(v1.3 补,统计层关键)tree_evaluation 列与 trait 字典无键关联(仅靠 trait.is_core 人脑约定,易漂移)。故在统计/GS 层定义统一性状值视图DB 视图 v_trait_value 或 service),把"固定列(tree_evaluation 按 trait_code 拍平) + EAV(observation)"按 (unit, trait_code, obs_year) 归一为单一宽/长表,供 V1.1 BLUP 与 V3.0 决策消费。种子初始化时须同时把 pa_four 写入 trait(is_core=true)tree_evaluation 列,新增核心性状走 migrate 扩列 + 同步字典。

v1.6 补(A6:视图/引擎须把 tree_evaluation/observation 的观测按 tree.germplasm_id 聚合为 clone 的重复测量(同一 germplasm 经扩繁多株 tree 是重复而非独立个体),EBV 随机效应估在 germplasm/clone 级,tree 作重复;否则 V1.1 会误把每株当独立个体高估自由度。


5. 统计分析与决策地基(关键要求)

用户明确要求"统计分析与决策,需要基础能够支持"。数据模型须满足:

  1. 任意性状可聚合:统一性状值视图(§4 末尾)把固定列 + EAV 归一,使「按性状×年份×地点×阶段」切片聚合无需改表——这是 ABLUP/EBV 与选择指数的输入。
  2. MET 结构就绪(v1.3v1.5 补全)tree.trial_study_idv1.5 仅记「定植所属 study」,派生自 planting+ tree.block_no(区组随机效应)+ trial_study.block_count + trial_study_entryentry_number 设计矩阵聚合键) + treatmentfactor×levelv1.5 提进一期,支撑 split_plot 等因子效应) 提供完整试验设计维度;跨年/跨点观测经 observation.trial_study_id + obs_year 表达(树自身不跨 study)。site 经纬度/海拔支持 空间 BLUPsommer 空间项)。V1.1 混合模型 y = genotype + block + treatment + environment + G×E(+空间) 各效应项齐备,可输出单株/EBVEBV 估在 germplasm/clone 级)。
  3. 选择指数可计算:统一性状值视图(表型) + genotype_call(基因型) → 多维选择指数(RosBREED DNA-informed 思路),按 stage 分层筛选;selection_rule(§3.11)把阈值显式化,支持自动 flag/晋级。
  4. 选择强度可算(v1.3 补)seed_lot.seed_count→成苗→定植→入选 四级计数贯通(§3.13),育种效率/选择压力可量化,且与 MET 的"每组合在某点种了多少"挂钩。
  5. 决策支撑selection_result(晋级/淘汰) + stage 流转 + EBV 排名 + selection_rule 自动标记 → 前端决策视图(哪些株晋级/淘汰、依据 EBV 与哪条规则)。
  6. 溯源闭环tree→combination→父/母本 germplasm + observation/field_operation/pollination 全 FK → 任意品系反向追溯(需求 7.1)。
  7. 重复测量聚合(v1.6A6:同一 germplasmclone)经扩繁产生多株 tree,其表型是同一基因型的重复观测;统计前按 tree.germplasm_id 聚合为 clone 重复,EBV 随机效应估在 germplasm 级,避免自由度虚高。
  8. 系谱 A 矩阵(v1.6B9:除基因组 G 矩阵(来自 genotype_call)外,BLUP 可并入系谱 A 矩阵;germplasm.pedigree 字符串须可解析为亲本关系,或后续补结构化系谱关系实体,供 sommerA 矩阵构造。
  9. EBV 驱动选择(v1.6B10selection_rule(§3.11)的 conditions_json 除引用 trait_code(表型阈值)外,应允许引用 prediction_value(EBV 排名阈值),实现 RosBREED「表型 + EBV」双轨选择。

6. 实施路线(建议)

阶段 内容
地基(先做) trait(含 ontology_uri) + observation(含 status) + 现有模块 stage/rootstock/accession_no/pedigree 字段;数据权限/options 沿用现有生成器
P0 field_operation
P1 trial(+study+study_entry,§3.4)、treatment(试验因子/处理,§3.14,v1.5 提进一期)planting_treatment(§3.15,v1.6)、group(+member,§3.5)、propagation(克隆扩繁,§3.8)、seed_lot(种子批,§3.13,v1.5/v1.6 used_count 派生剩余)、environment_condition(环境因子,§3.9)、audit_log(审计,§3.10)、selection_rule(选择阈值,§3.11,v1.6 支持 EBV 阈值)、site 坐标 + germplasm 护照块 + pollination 父/母本树 + selection_result.rule_id(v1.4)+trial_study_id(v1.6) + planting.entry_id(v1.5)+propagation_id(v1.6)+block级粒度 + tree 两类区分 + tree_evaluation.trial_study_id(v1.6) + tree_photo.observation_id(v1.6)(§4 字段调整) + trial_study.season(v1.6) + marker.assembly_version(v1.6) + trait.method_uri/scale_uri(v1.6) + observation.validated_by/date/unit(v1.6) + kinship A矩阵(v1.6)
P2 statistics 聚合端点(含 selection_rule 驱动的自动 flag/晋级预览)
延后(v1.4 标记) experiment_factorMIAPPE 受控试验因子,先用 field_operation 近似)、breeding_report 配置表(先用只读端点)、breeding_program 顶层(BrAPI Programtarget 暂代)
批量表型导入(v1.3 补,规划) observation 是 EAV(性状×单元×值),主数据入口是成千上万条观测的批量进表(设备/ sheet 导出),与现有"一行一实体"行式导入机制不同,需单列导入通道(含 trait_code 校验、单位换算、单元解析 tree_id/plot_id
字典类型扩展 breeding_dict.sql 增 breeding_stage/breeding_generation/breeding_group_type/breeding_design_type 四类(英码+中文),接入下拉与 Excel 导入翻译(DictLabelResolver)
V2.0 marker + genotype_sample + genotype_call(地基先建表,分析后置)+ prediction(§3.12)
V1.1 R 统计引擎接入统一性状值视图 + trial 做 BLUP/EBV
V3.0 AI 决策(Agno + DeepSeek)消费 EBV/选择指数
BrAPI 适配层 只读 /brapi/v2/* 端点(germplasm/crosses/trials/studies/observations/observationvariables/lists/samples/markers/calls/programsfield_operation 映射为 /observations(带 op_type) 而非 /events),对接 Breedbase/Flapjack/国际交换(§0 原则 7

工程约定(生成器机制待拍板):新模块用系统内置代码生成器module_generator/gencodeDB-first,产物落 app/plugin/,自动建菜单)还是续用自定义 _gen_*.py(落 app/api/v1/module_breeding/,与现有 14 域一致)仍待用户定 A/B/C(见记忆「建表/生成器坑」)。无论哪条,改字段后跑 deploy.bat migratefix_breeding_columns.py)再重启后端。


7. 待确认项(收口)

v1.6 已采纳第五轮复审全部项(A1–A6 + 国际补强 B1–B11 + 范围澄清 C1–C2)。剩余仅 1 项关键待拍板:

  1. 生成器机制 A/B/C(唯一未拍板):新模块落 app/plugin/(内置 gencode 式)/ 续用自定义 _gen_*.py(与老 14 一致)/ 全迁 plugin 式。其余规格(含 v1.6 全部字段)均已锁定,实施时据此生成即可。

v1.6 已将六轮复审合理项全部落档,文档进入"v1.6 国际基准完整版"。除生成器 A/B/C 外,待用户明确"做/搞吧"后实施,不先行编码。


8. 复审补充:遗漏与替代思路(2026-07-28 复审)

本节为第一稿(§0–§7)的批判性复审结论,针对"还有哪些遗漏 / 不同思路"自省。改变范围的项标注「待拍板」。

8.1 原稿遗漏的关键项

  1. generation(遗传世代)与 selection_stage(选择阶段)混为一谈:桃虽以无性选择为主,但回交转育(BC1/BC2)、自交分离(F2)仍是真实遗传世代,与"选到第几轮"是两回事。建议拆字段:generationF1/BC1/BC2…,跟 cross_type 联动)+ selection_stage(实生苗/初选株/复选株/品系/区试/新品种)。
  2. 缺"树→种质"晋升链路(克隆生命周期):入选株应晋升为 clone/accessiongermplasm)被命名扩繁。需 tree.germplasm_id,否则基因型(测在 germplasm)与表型(测在 tree)无法在 GS 中拼接。
  3. 原清单 1.4「按团队权限隔离」→ 不建 team 模块(已决策):用户判定 team 仅用于数据隔离、当前不需要。故不新增 team 模块、不加 owner_team 字段;数据权限维持现有 RBAC + _build_conditionscreated_id 过滤即可。若未来确有跨团队隔离需求,再单独立项。
  4. "材料库存"被弱化成纯报表:库存是事务性的(种子批/ lot、在圃株数、离体/DNA 管数、活力)。应加 germplasm_stock/seed_lot 表(数量、批次、位置、活力、出入库),报表只是视图。【待拍板】
  5. 缺环境/气象数据(G×E 统计地基):多年多点分析核心是基因型×环境互作,无环境协变量(site×year 的需冷量/积温/降雨)BLUP 只能粗估。建议加 environment_conditionsite×year),可复用 yz.sql 的"天气"字段。
  6. 分子层缺"预测模型"表(GS 反馈环断裂):RosBREED 是闭环(表型+基因型→训练模型→输出 EBV→指导下轮选配)。需 breeding_prediction(模型/性状/精度 accuracy/预测日期/被预测个体)。
  7. 克隆繁殖/苗圃 → 已定纳入一期(§3.8):现有 seedling/seed_treatment 仅种子实生苗;桃入选后主要靠嫁接/芽接扩繁,补 breeding_propagation(接穗来源→成活→出圃),打通 入选株→克隆种质→扩繁→新定植树 闭环。
  8. 统一修改日志/审计缺失:晋级审批、全程可追溯需"谁/何时/改了什么"轨迹,现有仅 updated_time。建议轻量 breeding_audit_log(或接系统操作日志)。
  9. 小遗漏tree_photo 应可关联 observation(某次测量的果实照片,为 CV/AI 预留);observation 应可挂 trial_study_id(区分试验观测 vs 果园日常观测);编号生成策略未定义(accession_no/combination_code/tree_no/trial_code 需统一自动编号服务)。

8.2 替代思路与推荐

  • A. EAV 纯通用 vs 混合固定列 → 推荐混合固定列(详 §8.4)。理由:桃果实质性状稳定且高频(yz.sql 已验证 40 固定字段沿用多年)、报表是核心需求(固定列 SQL 聚合极快)、现有 tree_evaluation 已在工作——纯 EAV 会牺牲报表性能并浪费已建代码。
  • B. 分组 vs 标签 → 建议并行group(正式项目组/品系群)+ 自由 tag(多对多,如"抗褐腐""高Brix""区试备选")。
  • C. 直接对齐 BrAPI API → 已采纳(见 §0 原则 7):不仅"铺路",而是正式承诺实现 BrAPI 兼容只读适配层。建议首批暴露端点(映射我们的模块):
    • /brapi/v2/germplasm/brapi/v2/germplasm/{id}/pedigree ← germplasm + cross_combination 系谱链
    • /brapi/v2/programs ← target/brapi/v2/crosses ← cross_combination
    • /brapi/v2/trials/brapi/v2/studies ← trial / trial_study
    • /brapi/v2/observationvariables ← trait/brapi/v2/observations ← observation
    • /brapi/v2/lists ← group/brapi/v2/observations(带 op_type) ← field_operation(注:BrAPI 无顶层 Event,不映射 /events
    • /brapi/v2/samples/brapi/v2/markers/brapi/v2/calls ← 分子层
    • 适配层为只读适配器(读我们现有表,映射成 BrAPI JSON),不重复实现写操作;UI 仍走 /breeding/*
  • D. MIAPPE 合规 → 已采纳(见 §0 原则 8)Investigation=target、Study=trial_study、ObservationUnit=tree/plot、Variable=trait 对齐;作为数据导出/共享到国际仓储时的一致性检查基线。

8.3 复审后模块清单(原 21 模块基础上)

  • 新增(一期):environment_conditionsite×year 环境因子,G×E 统计地基,§3.9)、propagation(克隆扩繁/苗圃,§3.8)、breeding_audit_log(审计,§3.10)、breeding_selection_rule(选择阈值,§3.11)、breeding_seed_lot(种子批/库存链,§3.13,v1.3 从延后提前进一期与 MET 一并建模);breeding_prediction(GS 模型/育种值,V2.0 与分子层同期,§3.12);breeding_trial_study_entry(试验 entry 清单,v1.4,MET 设计矩阵);breeding_genotyping_dataset(分型数据集,v1.4,GS 训练群体)。
  • 字段强化(v1.4trait.ontology_uriCrop Ontology 对接);observation.status(数据质量);site 经纬度/海拔(空间 BLUP);germplasm 护照块(FAO-MCPD);pollination 父/母本树(crossing block);selection_result.rule_id(决策闭环);tree.entry_identry 聚合);marker.panel(芯片版本);genotype_sample.dataset_id
  • 不建team 模块(用户判定仅用于数据隔离、不需要,保留 RBAC + created_id 过滤即可)。
  • 仍延后(v1.4 标记):完整事务性出入库台账(germplasm_stock 等,seed_lot 已精简进一期);experiment_factor(MIAPPE 受控试验因子,先用 field_operation 近似);breeding_report 配置表(先用只读端点);breeding_program 顶层(BrAPI Programtarget 暂代)。
  • 字段细化:tree.germplasm_id + generationtree.trial_study_id + block_no派生自 planting,单写点纪律v1.4);planting.trial_study_id + block_no + seed_lot_idobservation.trial_study_id + 显式 FKv1.3);tree_photo.observation_id;统一编号生成服务。
  • 物候期仍走 observation(时序,非固定列);系谱树仍靠 cross_combination.parent_combination_id 自链 + 前端树图。

8.4 EAV 决策详述(对应 §4 tree_evaluation

结论:混合固定列(Hybrid)。

  • 固定列层 = tree_evaluation:承载桃稳定高频的 ~30–40 个核心果实质/农艺性状(单果重、果形、果核、可溶性固形物、成熟期、离粘核、风味、硬度…,源自 yz.sql pa_four)。一树一年一行,表单/报表直读,SQL 聚合无需 pivot。
  • EAV 扩展层 = observation:仅承载①物候期时序观测(萌芽/开花/坐果/成熟,一树多期,天然时序)②trait 字典中 is_core=false 的新增/临时性状。
  • 防双源规则trait.is_core 标志——核心性状只存固定列,非核心只存 observation,禁止同一性状两处重复记录。
  • 对统计引擎(V1.1:读取两者——核心性状走固定列、扩展性状走 observation,统计层归一化后做 BLUP/EBV。
  • 对 GS/决策:表型来自固定列 + observation,基因型来自 genotype_call,经 tree.germplasm_id 桥接,由 breeding_prediction 输出育种值。
  • 代价:新增核心性状需改表(但低频,且走 migrate 脚本已固化);换来报表性能与已建代码保留。对本单作物程序,此代价可接受。

8.5 二次复审(v1.32026-07-28)— §8 遗留项处置

针对 §8.1–§8.3 的遗留与本人深度复盘,本轮一次性落档,要点:

# 议题(源自 §8 / 复盘) v1.3 处置
1 MET 链路断裂(最致命) 彻底补全:trial_study.block_count + planting.trial_study_id + tree.trial_study_id/block_no + plot.block_no(§3.4/§4)。block 随机效应不再缺失,混合模型可估
2 库存与选择强度 seed_lot 从"延后"提前进一期(§3.13),与 MET 拼出 seed_lot→seedling→planting→tree→trial_study 选择强度链;完整 ledger 仍延后
3 §0 原则1 与混合模型自相矛盾 已修订 §0 原则1 措辞,与 §4/§8.4 一致(字典一处定义、值可固定可扩展)
4 observation/field_operation 多态反模式 改显式可空 FKtree_id/plot_id/combination_id),保引用完整 + 数据权限 _build_conditions 可用(§3.2/§3.3
5 三模块只有名字无规格 已补 environment_condition(§3.9)、audit_log(§3.10)、prediction(§3.12);并额外补 selection_rule(§3.11)
6 tree_evaluation "保留"误述 改为"按 pa_four 扩 ~40 列",并补统一性状值视图消除 trait↔固定列双源漂移(§4)
7 选择阈值规则缺失 新增 breeding_selection_rule(§3.11),决策支撑可自动化
8 批量表型导入未规划 已单列规划(§6),EAV 主数据入口区别于行式导入
9 tree_photo.observation_id 未落地 已纳入 §4 字段调整(todo 与正文对齐)
10 group family/category 冗余 family 改虚拟分组(由 combination_id 推导)、category 复用 variety_type(§3.5
11 BrAPI /events 不标准 field_operation 改映射 /observations(op_type)(§3.3/§8.2-C
12 文档计数过期 §2 改为显式清单,不再钉"21"
13 生成器机制 标注为待拍板 A/B/C(§6 工程约定),不再默认续用 _gen_*.py

本轮为纯文档定稿,未触碰任何代码。待用户就 §7 minor 项(尤其生成器 A/B/C)确认后即可实施。

8.6 三轮复审(v1.42026-07-28)— 国际基准(BrAPI/Breedbase/RosBREED/MIAPPE/Crop Ontology/FAO-MCPD/Genesys

对照国际先进做法再扫一遍,把"正经育种程序该有、v1.3 仍缺"的落档:

# 议题(国际基准) v1.4 处置
1 缺试验 entry 清单 / entry_numberBrAPI ObservationUnit = germplasm×entryNumber×rep×block 新增 breeding_trial_study_entry(§3.4),tree.entry_id 挂回,BLUP 设计矩阵按 entry 聚合
2 缺 site 地理坐标(空间 BLUP / MIAPPE 环境 / 积温插值) sitelatitude/longitude/elevation(§4
3 缺观测校验态Breedbase 数据质量) observation.statusdraft/validated)(§3.2),统计前按 validated 筛
4 trait 缺本体引用Crop Ontology / MIAPPE 受控词表) trait.ontology_uri(§3.1);注明 method/scale 内联简化、BrAPI 适配层拆分三元组
5 tree↔planting 双写漂移风险v1.3 隐患) 明确单写点=plantingtree.trial_study_id/block_no派生service 写树校验一致(§3.4 注)
6 germplasm 缺护照描述符FAO-MCPD / Genesys germplasm 补 institute_code/country_origin/collection_site/acquisition_date/biological_status/breeding_program(§4
7 缺 genotyping_datasetGS 训练群体分组) 新增 breeding_genotyping_dataset(§3.7),genotype_sample.dataset_idmarker.panel(芯片版本)
8 selection_result 未关联规则RosBREED 决策闭环) selection_result.rule_id(§4
9 缺 crossing block 父/母本树(桃控制杂交) pollination.female_tree_id/male_tree_id(§4
10 受控试验因子未结构化MIAPPE ExperimentalFactor 标记延后,先用 field_operation 近似(§6
11 breeding_report 配置表过早 标记延后,先用只读端点(§6
12 target 映射 BrAPI Program 略偏 标记延后,target 暂代 Program,后续可加 breeding_program 顶层(§6
13 tree.germplasm_id 多路径派生漂移 明确 germplasm_id 非空且由晋升流程写入、禁手填(§4

本轮为纯文档定稿(v1.4,未触碰任何代码。文档进入"国际基准对齐版",待 §7 minor(尤其生成器 A/B/C)确认后实施。

8.7 四轮复审(v1.52026-07-28)— 用户拍板的 v1.4 自洽修复

用户就第四轮复审(§8 末尾 16 点)拍板:只要合理全部采纳以下 5 点,并生成新版:

# 议题(v1.4 自洽/国际盲点) v1.5 处置
1 planting 单写点却无 entrytree.entry_id 无法派生 plantingentry_id(§3.4/§4);tree.entry_id/block_no/trial_study_id 全派生自 planting
2 多年生 tree 与单值 trial_study_id 冲突(跨年观测归属丢失) tree.trial_study_id 仅记「定植所属 study」;跨年/跨点观测改由 observation.trial_study_id + obs_year 表达,不引入中间表,保单写点纪律
3 试验树 germplasm_id 时序张力(入试即需已知 vs 晋升才写) 区分两类 treeplanting.entry_id 非空 ⇒ 参试无性系(germplasm_id 入试即定 = entry.germplasm_id);为空 ⇒ 杂种实生苗(待晋升)。以 entry 有无区分,无需新类型字段
4 split_plot 设计已支持但 experiment_factor/treatment 延后 breeding_treatment(factor+level) 提进一期(§3.14,混合模型增 treatment 项,可估因子主效应与互作
5 seed_lot 非事务致「获种数」源头不可靠 seed_lotused_count,派生 remaining = seed_count - used_count,选强链前段(获种→已用)可量化

本轮为纯文档定稿(v1.5,未触碰任何代码。文档进入「v1.5 自洽修复版」,待 §7 minor(尤其生成器 A/B/C)确认后实施。

8.8 五轮复审(v1.62026-07-28)— 用户拍板"全部采纳"第五轮复审

用户就第五轮复审拍板"全部采纳",落档 v1.6(同时补齐 v1.5 因替换异常遗漏的 §3.14/treatment 行/used_count):

# 议题 v1.6 处置
A1 核心性状固定列(tree_evaluation)缺 trial_study_id 环境键 tree_evaluation 加 trial_study_id(按年 observation 推导/直填),使核心性状纳入 MET 环境效应(修复 v1.5 裂痕)
A2 planting 粒度未定义 明确 planting=block 级批次;同 entry 跨多 block 建多 planting
A3 treatment 关联字段未落地 新增 breeding_planting_treatment(§3.15planting×treatment 多对多)
A4 seed_lot.used_count 单位未定义 明确=已从该批取用粒数(播种环节按粒累加,非定植株数)
A5 tree_photo.observation_id 文档自述已改但 §4 无行 §4 补 tree_photo 行(observation_id
A6 EBV 估 germplasm 级但 tree↔germplasm 重复测量未建模 明确 tree_evaluation/observation 按 tree.germplasm_id 聚合为 clone 重复,EBV 随机效应在 germplasm
B1 marker 缺 assembly_version marker 加 assembly_version
B2 基因型编码标准 genotype_call.allele 声明 VCF/GP 编码(0/1/2=纯合ref/杂合/纯合alt
B3 season 概念 trial_study 加 season
B4 observation 缺审核人/时间 observation 加 validated_by/validated_date
B5 单位校验+批量换算 observation 加 unit(冗余自 trait),导入服务做换算
B6 method/scale 受控词表 URI trait 加 method_uri/scale_uri
B7 planting 来源双路径 planting 加 propagation_id(种子批/扩繁批二选一)
B8 observationUnit level 文档标注 tree/plot/block 对应 BrAPI observationLevels
B9 kinship/A 矩阵 §5 补系谱 A 矩阵(pedigree 解析)
B10 selection_rule 支持 EBV conditions_json 允许引用 prediction_valueEBV 阈值)
B11 breeding_program 自由文本说明 文档标注 germplasm.breeding_program 暂自由文本、后续可升级 FK
C1 selection_result 跨年晋级关联 selection_result 加 trial_study_id(可空)
C2 新表数据权限接入 文档约束新模块须用 CRUDBase 自动注入数据权限

本轮为纯文档(v1.6,未触碰任何代码。文档进入「v1.6 国际基准完整版」,待生成器 A/B/C 拍板后实施。


9. 已决策取值汇总(v1.2,本人敲定)

下列枚举由本人依据 RosBREED 桃无性选育流水线 + 现有 14 域敲定(用户授权"你来定")。全部作为 sys_dict 新增字典类型,落库英码、前端显中文,并接入 Excel 导入翻译(DictLabelResolver)。

9.1 breeding_stage(选择阶段)

code 中文 主要适用实体 说明
germplasm 种质资源 germplasm 基础材料/引入种
parent 亲本 germplasm 用于杂交的亲本
seedling 实生苗/群体植株 tree 杂交实生群体、未入选
sp 初选株 tree Single Plant,田间初选
ap 复选株 tree Advanced,跨年跨点复选
line 品系 germplasm 克隆扩繁、系统观察
regional_trial 区试品系 germplasm 区域试验
released 新品种/审定 germplasm 命名/登记/审定

tree 用 seedling/sp/apgermplasm 用 germplasm/parent/line/regional_trial/releasedselection_result 记录 from_stage→to_stage 晋级流转。

9.2 breeding_generation(遗传世代)

code 中文 说明
F1 杂交集 首次杂交产生的分离群体(桃主要选种群体)
F2 自交/互交分离世代 F1 自交或 F1×F1
BC1 回交 1 代 导入性状(如抗病)回交
BC2 回交 2 代
BC3 回交 3 代

引入种质/地方品种 generation 留空。权威存 cross_combination.generation(与 cross_type 联动:回交→BCn,自交→F2),tree/germplasm 冗余拷贝便于筛选。

9.3 breeding_group_type(分组维度)

code 中文 说明
project 育种项目 正式项目集合
family 家系/杂交组合群 同 cross_combination 的后代集合
category 种质类别群 油桃/蟠桃/观赏桃等类别
temporary_set 临时选系集 临时任务选系集
custom 自定义 用户自由定义

不设 objective 维度(与 target 育种目标语义重叠)。

9.4 breeding_design_type(试验设计)

code 中文 说明
rcbd 随机区组 高级 trial 常用,区组+重复+对照
augmented 增广设计 多品系少重复+对照重复,早期选种最适用
contrast 对比试验 少量材料与对照比较
split_plot 裂区设计 砧木×接穗等两因子
unreplicated 观察圃/简约 无重复,初步观察

9.5 propagation 纳入一期(§3.8

打通 入选株(tree) → 克隆种质(germplasm) → 扩繁批次(propagation) → 新定植树(tree) 闭环。

9.6 字典落地

breeding_dict.sql 增补 breeding_stage/breeding_generation/breeding_group_type/breeding_design_type 四类(英码+中文),并接入对应 service 的 Excel 导入翻译(DictLabelResolver)与前端下拉。


定稿状态(v1.62026-07-28:历经 v1.0→v1.2→v1.3→v1.4→v1.5→v1.6 六轮(初稿 / 取值决策 / 二次复审 / 国际基准复审 / 自洽修复 / 国际基准完整补全),文档进入"v1.6 国际基准完整版"。所有模块、字段、枚举、互操作映射均已规格化。确认(尤其生成器 A/B/C)后据此实施,不先行编码。