Files
banban/mini-program/database/sql/004_device_bindings_owner_user_migration.sql
ChengCan 1b4c47f77a feat: 支持先绑定设备后关联儿童档案
- 绑定模型新增 owner_user_id,支持 child_id 为空\n- 新增绑定后设置儿童接口 /bindings/{device_id}/child\n- 前端绑定页改为先绑设备后补充儿童\n- 补充数据库迁移脚本与 DAO 测试用例
2026-04-14 12:47:52 +08:00

47 lines
1.4 KiB
SQL

-- Migration: support "bind device first, then set child profile"
-- Target: MySQL 8.x
-- 1) Add owner_user_id on device_bindings.
ALTER TABLE device_bindings
ADD COLUMN owner_user_id BIGINT NULL AFTER device_id;
-- 2) Backfill owner_user_id from active parent-child relation (prefer primary relation).
UPDATE device_bindings b
SET owner_user_id = (
SELECT r.user_id
FROM parent_child_relations r
WHERE r.child_id = b.child_id
AND r.status = 1
ORDER BY r.is_primary DESC, r.id ASC
LIMIT 1
)
WHERE b.owner_user_id IS NULL;
-- 3) Fallback backfill from latest bind history.
UPDATE device_bindings b
SET owner_user_id = (
SELECT h.bound_by_user_id
FROM device_bind_history h
WHERE h.device_id = b.device_id
ORDER BY h.bound_at DESC, h.id DESC
LIMIT 1
)
WHERE b.owner_user_id IS NULL;
-- 4) Ensure no NULL owner before setting NOT NULL.
-- If this query returns rows, handle manually before continuing:
-- SELECT id, device_id, child_id FROM device_bindings WHERE owner_user_id IS NULL;
-- 5) Make schema changes for new flow.
ALTER TABLE device_bindings
MODIFY COLUMN owner_user_id BIGINT NOT NULL;
ALTER TABLE device_bindings
MODIFY COLUMN child_id BIGINT NULL;
ALTER TABLE device_bindings
ADD INDEX idx_device_bindings_owner_user_id (owner_user_id);
ALTER TABLE device_bind_history
MODIFY COLUMN child_id BIGINT NULL;