Files
aiot-platform-cloud/sql/mysql/ops_device_trajectory.sql

38 lines
2.6 KiB
MySQL
Raw Normal View History

-- =============================================
-- 设备轨迹记录表
-- 记录工牌设备进出各区域的轨迹(进入时创建,离开时更新)
-- =============================================
CREATE TABLE IF NOT EXISTS `ops_device_trajectory` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`device_id` BIGINT NOT NULL COMMENT '工牌设备ID',
`device_name` VARCHAR(64) DEFAULT NULL COMMENT '设备名称(冗余)',
`nickname` VARCHAR(64) DEFAULT NULL COMMENT '设备备注名称(冗余)',
`person_id` BIGINT DEFAULT NULL COMMENT '人员ID(预留)',
`person_name` VARCHAR(64) DEFAULT NULL COMMENT '人员名称(预留)',
`area_id` BIGINT NOT NULL COMMENT '区域ID',
`area_name` VARCHAR(128) DEFAULT NULL COMMENT '区域名称(冗余)',
`beacon_mac` VARCHAR(64) DEFAULT NULL COMMENT '匹配的Beacon MAC',
`enter_time` DATETIME NOT NULL COMMENT '进入时间',
`leave_time` DATETIME DEFAULT NULL COMMENT '离开时间',
`duration_seconds` INT DEFAULT NULL COMMENT '停留时长(秒)',
`leave_reason` VARCHAR(32) DEFAULT NULL COMMENT '离开原因: SIGNAL_LOSS/AREA_SWITCH/DEVICE_OFFLINE',
`enter_rssi` INT DEFAULT NULL COMMENT '进入时RSSI',
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
`creator` VARCHAR(64) DEFAULT '' COMMENT '创建者',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` VARCHAR(64) DEFAULT '' COMMENT '更新者',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`),
INDEX `idx_device_enter` (`device_id`, `enter_time`),
INDEX `idx_area_enter` (`area_id`, `enter_time`),
INDEX `idx_device_area` (`device_id`, `area_id`),
INDEX `idx_tenant` (`tenant_id`),
INDEX `idx_device_area_leave` (`device_id`, `area_id`, `leave_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备轨迹记录';
-- 优化:为 selectOpenRecord 查询device_id + area_id + leave_time IS NULL添加索引
-- 注:已有数据的线上环境需单独执行以下 ALTER如数据量大请在低峰期执行
-- ALTER TABLE `ops_device_trajectory` ADD INDEX `idx_device_area_leave` (`device_id`, `area_id`, `leave_time`);