Files
KCGL/inventory-backend/migrations_add_purchase_stockbuy_link.sql

94 lines
3.1 KiB
MySQL
Raw Normal View History

-- ============================================================
-- migrations_add_purchase_stockbuy_link.sql
-- 打通「采购申请」与「采购入库」的按单入库链路
--
-- 变更内容:
-- 1. purchase_request 表新增 base_id 列(FK → material_base.id)
-- 2. stock_buy 表新增 request_id 列(FK → purchase_request.id)
--
-- 执行方式(任选一种):
-- psql -h <host> -U postgres -d inventory_system -f migrations_add_purchase_stockbuy_link.sql
-- 或在 pgAdmin / Navicat / DBeaver 中打开执行
-- ============================================================
BEGIN;
-- ============================================================
-- 1. purchase_request 新增 base_id
-- 硬关联基础物料表,使采购申请能精确锁定物料
-- ============================================================
ALTER TABLE purchase_request
ADD COLUMN IF NOT EXISTS base_id INTEGER;
-- 添加外键约束(如果列已存在但无约束,会补充)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'fk_purchase_request_base_id'
AND table_name = 'purchase_request'
) THEN
ALTER TABLE purchase_request
ADD CONSTRAINT fk_purchase_request_base_id
FOREIGN KEY (base_id) REFERENCES material_base(id)
ON DELETE SET NULL;
END IF;
END;
$$;
-- 为 base_id 添加索引(支持按物料筛选采购申请)
CREATE INDEX IF NOT EXISTS ix_purchase_request_base_id
ON purchase_request (base_id);
COMMENT ON COLUMN purchase_request.base_id IS '关联基础物料ID';
-- ============================================================
-- 2. stock_buy 新增 request_id
-- 关联采购申请单,使入库记录可追溯到来源采购单
-- ============================================================
ALTER TABLE stock_buy
ADD COLUMN IF NOT EXISTS request_id INTEGER;
-- 添加外键约束
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name = 'fk_stock_buy_request_id'
AND table_name = 'stock_buy'
) THEN
ALTER TABLE stock_buy
ADD CONSTRAINT fk_stock_buy_request_id
FOREIGN KEY (request_id) REFERENCES purchase_request(id)
ON DELETE SET NULL;
END IF;
END;
$$;
-- 为 request_id 添加索引(支持"按单查入库"的追溯查询)
CREATE INDEX IF NOT EXISTS ix_stock_buy_request_id
ON stock_buy (request_id);
COMMENT ON COLUMN stock_buy.request_id IS '关联采购申请单ID';
-- ============================================================
-- 3. 验证结果
-- ============================================================
SELECT
column_name,
data_type,
is_nullable,
pg_catalog.col_description(
(SELECT c.oid FROM pg_catalog.pg_class c
WHERE c.relname = table_name),
ordinal_position
) AS comment
FROM information_schema.columns
WHERE table_name IN ('purchase_request', 'stock_buy')
AND column_name IN ('base_id', 'request_id')
ORDER BY table_name, column_name;
COMMIT;