-- Petstore Phase 0:真实预约容量模型 -- 前置:20260801_split_service_identity.sql、20260801_create_store_customer.sql、 -- 20260801_create_business_event.sql 已执行。 ALTER TABLE t_service_type ADD COLUMN duration_minutes INT NOT NULL DEFAULT 60 COMMENT '预计服务时长,30分钟粒度'; ALTER TABLE t_appointment ADD COLUMN duration_minutes INT NOT NULL DEFAULT 60 COMMENT '下单时服务时长快照'; ALTER TABLE t_schedule_block ADD COLUMN duration_minutes INT NOT NULL DEFAULT 30 COMMENT '连续占用时长,30分钟粒度'; ALTER TABLE t_store ADD COLUMN booking_capacity INT NOT NULL DEFAULT 1 COMMENT '门店并发接待数'; -- 系统默认服务时长;未知服务保留 60 分钟安全值。 UPDATE t_service_type SET duration_minutes = CASE name WHEN '洗澡' THEN 60 WHEN '美容' THEN 120 WHEN '洗澡+美容' THEN 150 WHEN '剪指甲' THEN 30 WHEN '驱虫' THEN 30 ELSE 60 END; -- 历史预约形成时没有时长快照,只能按当时服务名称采用稳定默认值回填。 UPDATE t_appointment SET duration_minutes = CASE service_type WHEN '洗澡' THEN 60 WHEN '美容' THEN 120 WHEN '洗澡+美容' THEN 150 WHEN '剪指甲' THEN 30 WHEN '驱虫' THEN 30 ELSE 60 END; -- 验证:以下四项必须全部为 0。 SELECT COUNT(*) AS invalid_service_duration_count FROM t_service_type WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0; SELECT COUNT(*) AS invalid_appointment_duration_count FROM t_appointment WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0; SELECT COUNT(*) AS invalid_block_duration_count FROM t_schedule_block WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0; SELECT COUNT(*) AS invalid_store_capacity_count FROM t_store WHERE booking_capacity < 1 OR booking_capacity > 10;