-- ============================================================ -- 桃育种·花粉档案(bre_pollen)+ 授粉表花粉批次外键 -- 背景:桃花期仅 3–7 天,父本花粉是杂交季命脉。花粉需采集、贮藏、测活力, -- 授粉窗口(采集日→失效日)校验支撑"当前花期可用批次"与复盘坐果率。 -- 幂等:CREATE TABLE IF NOT EXISTS / ADD COLUMN IF NOT EXISTS,可重复执行。 -- 说明:bre_pollen 表可由 create_all 建,此处显式落库保证先于后端重启存在; -- bre_pollination 已存在,新列必须 ALTER。 -- ============================================================ CREATE TABLE IF NOT EXISTS bre_pollen ( id SERIAL PRIMARY KEY, uuid varchar(64) NOT NULL UNIQUE, is_deleted boolean NOT NULL DEFAULT false, created_time timestamptz NOT NULL DEFAULT now(), updated_time timestamptz NOT NULL DEFAULT now(), deleted_time timestamptz, created_id integer REFERENCES sys_user(id) ON DELETE SET NULL, updated_id integer REFERENCES sys_user(id) ON DELETE SET NULL, deleted_id integer REFERENCES sys_user(id) ON DELETE SET NULL, -- 领域字段 lot_code varchar(64) NOT NULL UNIQUE, -- 花粉批次号(如 PL-2026-0001) male_tree_id integer REFERENCES bre_tree(id) ON DELETE SET NULL, -- 采集父本树(混合/外地可空) source_type varchar(16) NOT NULL DEFAULT 'tree', -- tree父本树 / mixed混合花粉 / external外地采集 source_desc varchar(128), -- 来源说明(混合配比/外地品种) collect_date date, -- 花粉采集日期 collect_method varchar(32), -- 采集方式(采花取粉/振动收集…) quantity varchar(32), -- 采集量(如 50g / 花药数) storage_method varchar(16) NOT NULL DEFAULT 'fridge',-- 贮藏方式 fridge4℃ / minus20 / minus80 / liquid_n2液氮 viability_method varchar(16), -- 活力测定 ttc(TTC染色率) / germination(离体萌发率%) viability_pct double precision, -- 花粉活力 % viability_test_date date, -- 活力测定日期 expiry_date date, -- 有效期/失效日期(授粉窗口上界) remark text ); CREATE INDEX IF NOT EXISTS ix_bre_pollen_created_deleted ON bre_pollen (created_time, is_deleted); CREATE INDEX IF NOT EXISTS ix_bre_pollen_male_tree_id ON bre_pollen (male_tree_id); COMMENT ON TABLE bre_pollen IS '花粉档案:采集父本/日期/贮藏/活力/有效期,授粉窗口计划地基'; COMMENT ON COLUMN bre_pollen.lot_code IS '花粉批次号(唯一,如 PL-2026-0001)'; COMMENT ON COLUMN bre_pollen.male_tree_id IS '采集父本树 FK→bre_tree(混合/外地采集可空)'; COMMENT ON COLUMN bre_pollen.source_type IS '来源类型 tree父本树/mixed混合花粉/external外地采集'; COMMENT ON COLUMN bre_pollen.collect_date IS '花粉采集日期'; COMMENT ON COLUMN bre_pollen.collect_method IS '采集方式(采花取粉/振动收集…)'; COMMENT ON COLUMN bre_pollen.storage_method IS '贮藏方式 fridge4℃/minus20/minus80/liquid_n2液氮'; COMMENT ON COLUMN bre_pollen.viability_method IS '活力测定方法 ttc(TTC染色率)/germination(离体萌发率%)'; COMMENT ON COLUMN bre_pollen.viability_pct IS '花粉活力 %'; COMMENT ON COLUMN bre_pollen.viability_test_date IS '活力测定日期'; COMMENT ON COLUMN bre_pollen.expiry_date IS '有效期/失效日期(授粉窗口上界)'; -- 授粉表补花粉批次外键(窗口校验:授粉日期须在 [采集日, 失效日] 内) ALTER TABLE bre_pollination ADD COLUMN IF NOT EXISTS pollen_lot_id integer NULL REFERENCES bre_pollen(id) ON DELETE SET NULL; CREATE INDEX IF NOT EXISTS ix_bre_pollination_pollen_lot_id ON bre_pollination (pollen_lot_id); COMMENT ON COLUMN bre_pollination.pollen_lot_id IS '花粉批次 FK→bre_pollen(授粉所用花粉,支撑父本效力分析与窗口校验)'; -- 授粉表补授粉方式(一期文档规划,此前遗漏) ALTER TABLE bre_pollination ADD COLUMN IF NOT EXISTS pollination_method varchar(32); COMMENT ON COLUMN bre_pollination.pollination_method IS '授粉方式(人工点授/喷粉/涂抹…)';