107 lines
5.4 KiB
PL/PgSQL
107 lines
5.4 KiB
PL/PgSQL
-- 红绿灯系统数据库表创建脚本
|
|
-- 创建时间: 2025-01-05
|
|
-- 描述: 创建路口信息表和红绿灯设备表,支持多路口多设备管理
|
|
|
|
-- 1. 路口信息表
|
|
CREATE TABLE IF NOT EXISTS intersections (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
intersection_id VARCHAR(50) UNIQUE NOT NULL, -- 路口编号
|
|
intersection_name VARCHAR(100) NOT NULL, -- 路口名称
|
|
latitude DECIMAL(10, 8) NOT NULL, -- 纬度
|
|
longitude DECIMAL(11, 8) NOT NULL, -- 经度
|
|
area_code VARCHAR(20), -- 区域编码
|
|
description TEXT, -- 路口描述
|
|
is_active BOOLEAN DEFAULT true, -- 是否激活
|
|
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 2. 红绿灯设备表
|
|
CREATE TABLE IF NOT EXISTS traffic_lights (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
device_id VARCHAR(50) UNIQUE NOT NULL, -- 红绿灯设备编号
|
|
device_name VARCHAR(100) NOT NULL, -- 设备名称
|
|
intersection_id VARCHAR(50) NOT NULL, -- 关联的路口编号
|
|
device_type VARCHAR(20) DEFAULT 'STANDARD', -- 设备类型
|
|
manufacturer VARCHAR(50), -- 制造商
|
|
model VARCHAR(50), -- 型号
|
|
install_date DATE, -- 安装日期
|
|
is_online BOOLEAN DEFAULT false, -- 是否在线
|
|
last_heartbeat TIMESTAMP, -- 最后心跳时间
|
|
is_active BOOLEAN DEFAULT true, -- 是否激活
|
|
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
-- 外键约束
|
|
CONSTRAINT fk_traffic_light_intersection
|
|
FOREIGN KEY (intersection_id)
|
|
REFERENCES intersections(intersection_id)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE
|
|
);
|
|
|
|
-- 创建索引
|
|
CREATE INDEX IF NOT EXISTS idx_intersection_id ON intersections(intersection_id);
|
|
CREATE INDEX IF NOT EXISTS idx_intersection_area_code ON intersections(area_code);
|
|
CREATE INDEX IF NOT EXISTS idx_intersection_active ON intersections(is_active);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_traffic_light_device_id ON traffic_lights(device_id);
|
|
CREATE INDEX IF NOT EXISTS idx_traffic_light_intersection ON traffic_lights(intersection_id);
|
|
CREATE INDEX IF NOT EXISTS idx_traffic_light_online ON traffic_lights(is_online);
|
|
CREATE INDEX IF NOT EXISTS idx_traffic_light_active ON traffic_lights(is_active);
|
|
|
|
-- 创建更新时间触发器函数
|
|
CREATE OR REPLACE FUNCTION update_updated_time_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_time = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
-- 为路口表创建更新时间触发器
|
|
CREATE TRIGGER update_intersections_updated_time
|
|
BEFORE UPDATE ON intersections
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_time_column();
|
|
|
|
-- 为红绿灯设备表创建更新时间触发器
|
|
CREATE TRIGGER update_traffic_lights_updated_time
|
|
BEFORE UPDATE ON traffic_lights
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_time_column();
|
|
|
|
-- 插入示例数据
|
|
INSERT INTO intersections (intersection_id, intersection_name, latitude, longitude, area_code, description)
|
|
VALUES
|
|
('INTERSECTION_001', '主要路口1号', 39.9042, 116.4074, 'AREA_A', '机场主要路口,连接航站楼和跑道区域'),
|
|
('INTERSECTION_002', '次要路口2号', 39.9050, 116.4080, 'AREA_B', '机场次要路口,连接货运区域'),
|
|
('INTERSECTION_003', '货运区路口', 39.9035, 116.4065, 'AREA_C', '货运区域主要路口'),
|
|
('INTERSECTION_004', '维修区路口', 39.9055, 116.4085, 'AREA_D', '维修区域路口'),
|
|
('INTERSECTION_005', '停机坪路口', 39.9045, 116.4070, 'AREA_A', '停机坪入口路口')
|
|
ON CONFLICT (intersection_id) DO NOTHING;
|
|
|
|
INSERT INTO traffic_lights (device_id, device_name, intersection_id, device_type, manufacturer, model, install_date)
|
|
VALUES
|
|
('TL_001', '主路口红绿灯1号', 'INTERSECTION_001', 'STANDARD', '海康威视', 'DS-TL100', '2024-01-01'),
|
|
('TL_002', '次路口红绿灯2号', 'INTERSECTION_002', 'STANDARD', '大华技术', 'DH-TL200', '2024-01-15'),
|
|
('TL_003', '货运区红绿灯', 'INTERSECTION_003', 'STANDARD', '海康威视', 'DS-TL100', '2024-02-01'),
|
|
('TL_004', '维修区红绿灯', 'INTERSECTION_004', 'HEAVY_DUTY', '大华技术', 'DH-TL300', '2024-02-15'),
|
|
('TL_005', '停机坪红绿灯', 'INTERSECTION_005', 'STANDARD', '海康威视', 'DS-TL100', '2024-03-01')
|
|
ON CONFLICT (device_id) DO NOTHING;
|
|
|
|
-- 添加注释
|
|
COMMENT ON TABLE intersections IS '路口信息表,存储机场内各个路口的基本信息';
|
|
COMMENT ON TABLE traffic_lights IS '红绿灯设备表,存储红绿灯设备信息及其与路口的绑定关系';
|
|
|
|
COMMENT ON COLUMN intersections.intersection_id IS '路口唯一编号';
|
|
COMMENT ON COLUMN intersections.intersection_name IS '路口名称';
|
|
COMMENT ON COLUMN intersections.latitude IS '路口纬度坐标';
|
|
COMMENT ON COLUMN intersections.longitude IS '路口经度坐标';
|
|
COMMENT ON COLUMN intersections.area_code IS '所属区域编码';
|
|
|
|
COMMENT ON COLUMN traffic_lights.device_id IS '红绿灯设备唯一编号';
|
|
COMMENT ON COLUMN traffic_lights.device_name IS '设备名称';
|
|
COMMENT ON COLUMN traffic_lights.intersection_id IS '关联的路口编号';
|
|
COMMENT ON COLUMN traffic_lights.is_online IS '设备是否在线';
|
|
COMMENT ON COLUMN traffic_lights.last_heartbeat IS '最后一次心跳时间'; |