fastbee/sql/iot_project_tables.sql
2026-08-04 06:58:25 +08:00

68 lines
3.4 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ========================================
-- FastBee项目管理数据库表创建脚本
-- 创建日期: 2026-06-28
-- 更新日期: 2026-08-01
-- 描述: 创建项目表,实现User→Project→Device直接关联
-- ========================================
-- 创建项目表(iot_project)
-- 实现 User → Project 层级(通过responsible_user_id字段)
CREATE TABLE `iot_project` (
`project_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '项目ID',
`project_name` VARCHAR(100) NOT NULL COMMENT '项目名称',
`project_code` VARCHAR(50) DEFAULT NULL COMMENT '项目编码',
`tenant_id` BIGINT(20) NOT NULL COMMENT '租户ID',
`tenant_name` VARCHAR(30) DEFAULT '' COMMENT '租户名称',
`responsible_user_id` BIGINT(20) DEFAULT NULL COMMENT '负责人ID',
`responsible_user_name` VARCHAR(30) DEFAULT '' COMMENT '负责人姓名',
`longitude` DOUBLE(11,6) DEFAULT NULL COMMENT '项目经度',
`latitude` DOUBLE(11,6) DEFAULT NULL COMMENT '项目纬度',
`address` VARCHAR(255) DEFAULT NULL COMMENT '项目地址',
`project_status` TINYINT(1) DEFAULT 2 COMMENT '项目状态(1-预警,2-运行中,3-完结)',
`start_time` DATETIME DEFAULT NULL COMMENT '开始时间',
`end_time` DATETIME DEFAULT NULL COMMENT '结束时间',
`project_desc` VARCHAR(500) DEFAULT NULL COMMENT '项目描述',
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
`create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`project_id`),
KEY `idx_tenant_user` (`tenant_id`, `responsible_user_id`),
KEY `idx_project_status` (`project_status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='业务项目表';
-- 1. 设备表新增所属项目字段
ALTER TABLE `iot_device`
ADD COLUMN `project_id` BIGINT(20) DEFAULT NULL COMMENT '所属项目ID' AFTER `tenant_name`,
ADD COLUMN project_name VARCHAR(64) COMMENT '所属项目名称',
ADD INDEX `idx_project_id` (`project_id`);
-- ========================================
-- 层级关系说明:
-- User (responsible_user_id) → Project (project_id) → Device (project_id)
--
-- 项目与设备的关系:
-- - 一个设备最多属于一个项目(通过 iot_device.project_id 外键)
-- - 一个项目可以包含多个设备
-- - iot_device.project_id 为 NULL 表示设备未关联项目
--
-- 与现有逻辑兼容的关键点:
-- 1. iot_group / iot_device_group 表保持不变(独立的设备分组管理功能)
-- 2. iot_device_user 表保持不变(设备归属关系独立)
--
-- 用户查询设备的两种路径:
-- 路径1:查询用户负责的项目设备(项目维度)
-- SELECT d.* FROM iot_device d
-- INNER JOIN iot_project p ON d.project_id = p.project_id
-- WHERE p.responsible_user_id = #{userId} AND p.del_flag='0' AND d.del_flag='0'
--
-- 路径2:查询设备归属用户的设备(用户维度)
-- SELECT d.* FROM iot_device d
-- INNER JOIN iot_device_user du ON d.device_id = du.device_id
-- WHERE du.user_id = #{userId} AND d.del_flag='0'
-- ========================================