68 lines
3.4 KiB
SQL
68 lines
3.4 KiB
SQL
-- ========================================
|
||
-- 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'
|
||
-- ======================================== |