Files
aiot-platform-cloud/sql/mysql/project/04-index-audit.sql

87 lines
4.6 KiB
MySQL
Raw Permalink Normal View History

-- =============================================
-- 租户-项目两级架构 - 唯一索引审计脚本
-- 检查各业务表现有唯一键,评估是否需要将 project_id 纳入唯一约束
-- 执行顺序:在 03-alter-business-tables.sql 之后执行
-- =============================================
-- -----------------------------------------------
-- 查看各表当前的索引情况(审计用,执行前先 SHOW INDEX 确认)
-- -----------------------------------------------
SHOW INDEX FROM iot_device;
SHOW INDEX FROM ops_order;
SHOW INDEX FROM ops_order_event;
SHOW INDEX FROM ops_order_dispatch;
SHOW INDEX FROM ops_order_queue;
SHOW INDEX FROM ops_bus_area;
SHOW INDEX FROM ops_area_device_relation;
SHOW INDEX FROM ops_order_security_ext;
SHOW INDEX FROM ops_area_security_user;
SHOW INDEX FROM ops_order_clean_ext;
SHOW INDEX FROM ops_cleaner_status;
SHOW INDEX FROM ops_cleaner_performance_monthly;
SHOW INDEX FROM ops_device_trajectory;
SHOW INDEX FROM ops_inspection_record;
SHOW INDEX FROM ops_inspection_record_item;
-- -----------------------------------------------
-- 唯一键改造建议(根据实际业务语义决定是否执行)
-- 说明:若某张表的唯一键仅含 tenant_id则需要将 project_id 也纳入,
-- 以确保在同一租户下不同项目之间的数据互不干扰。
-- -----------------------------------------------
-- ops_bus_area区域编码在项目内唯一原唯一键可能仅含 tenant_id + code
-- 示例DROP INDEX uk_tenant_code ON ops_bus_area;
-- 示例ALTER TABLE ops_bus_area ADD UNIQUE KEY uk_project_code (tenant_id, project_id, code, deleted);
-- ops_area_device_relation设备-区域关联在项目内唯一
-- 示例DROP INDEX uk_area_device ON ops_area_device_relation;
-- 示例ALTER TABLE ops_area_device_relation ADD UNIQUE KEY uk_project_area_device (project_id, area_id, device_id, deleted);
-- ops_area_security_user安保用户-区域关联在项目内唯一
-- 示例DROP INDEX uk_area_user ON ops_area_security_user;
-- 示例ALTER TABLE ops_area_security_user ADD UNIQUE KEY uk_project_area_user (project_id, area_id, user_id, deleted);
-- ops_cleaner_status保洁员状态在项目内唯一每个项目内每个用户仅一条状态记录
-- 示例DROP INDEX uk_tenant_user ON ops_cleaner_status;
-- 示例ALTER TABLE ops_cleaner_status ADD UNIQUE KEY uk_project_user (project_id, user_id, deleted);
-- ops_cleaner_performance_monthly月度绩效在项目内唯一project + user + year_month
-- 示例DROP INDEX uk_tenant_user_month ON ops_cleaner_performance_monthly;
-- 示例ALTER TABLE ops_cleaner_performance_monthly ADD UNIQUE KEY uk_project_user_month (project_id, user_id, stat_year, stat_month, deleted);
-- iot_device设备标识符在项目内唯一device_key / product_key + device_name
-- 示例:根据实际唯一键定义决定是否改造。
-- -----------------------------------------------
-- 验证:各表 project_id 回填情况
-- -----------------------------------------------
SELECT 'iot_device' AS tbl, COUNT(*) AS total, SUM(project_id IS NULL) AS null_count FROM iot_device
UNION ALL
SELECT 'ops_order', COUNT(*), SUM(project_id IS NULL) FROM ops_order
UNION ALL
SELECT 'ops_order_event', COUNT(*), SUM(project_id IS NULL) FROM ops_order_event
UNION ALL
SELECT 'ops_order_dispatch', COUNT(*), SUM(project_id IS NULL) FROM ops_order_dispatch
UNION ALL
SELECT 'ops_order_queue', COUNT(*), SUM(project_id IS NULL) FROM ops_order_queue
UNION ALL
SELECT 'ops_bus_area', COUNT(*), SUM(project_id IS NULL) FROM ops_bus_area
UNION ALL
SELECT 'ops_area_device_relation', COUNT(*), SUM(project_id IS NULL) FROM ops_area_device_relation
UNION ALL
SELECT 'ops_order_security_ext', COUNT(*), SUM(project_id IS NULL) FROM ops_order_security_ext
UNION ALL
SELECT 'ops_area_security_user', COUNT(*), SUM(project_id IS NULL) FROM ops_area_security_user
UNION ALL
SELECT 'ops_order_clean_ext', COUNT(*), SUM(project_id IS NULL) FROM ops_order_clean_ext
UNION ALL
SELECT 'ops_cleaner_status', COUNT(*), SUM(project_id IS NULL) FROM ops_cleaner_status
UNION ALL
SELECT 'ops_cleaner_performance_monthly', COUNT(*), SUM(project_id IS NULL) FROM ops_cleaner_performance_monthly
UNION ALL
SELECT 'ops_device_trajectory', COUNT(*), SUM(project_id IS NULL) FROM ops_device_trajectory
UNION ALL
SELECT 'ops_inspection_record', COUNT(*), SUM(project_id IS NULL) FROM ops_inspection_record
UNION ALL
SELECT 'ops_inspection_record_item', COUNT(*), SUM(project_id IS NULL) FROM ops_inspection_record_item;