智慧水务管理系统 - 精河县供水工程综合管理平台

dma_ddl.sql 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. -- =====================================================
  2. -- DMA分区计量与漏损分析 DDL
  3. -- 数据库: PostgreSQL
  4. -- =====================================================
  5. -- DMA分区表
  6. CREATE TABLE IF NOT EXISTS dma_zone (
  7. id BIGSERIAL PRIMARY KEY,
  8. zone_name VARCHAR(100) NOT NULL,
  9. zone_code VARCHAR(50) NOT NULL UNIQUE,
  10. parent_id BIGINT REFERENCES dma_zone(id),
  11. zone_level INTEGER NOT NULL DEFAULT 1,
  12. area VARCHAR(100),
  13. area_size NUMERIC(10, 2),
  14. population INTEGER,
  15. pipe_length NUMERIC(10, 2),
  16. status VARCHAR(20) DEFAULT 'active',
  17. remark VARCHAR(500),
  18. deleted INTEGER DEFAULT 0,
  19. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  20. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  21. );
  22. COMMENT ON TABLE dma_zone IS 'DMA分区表';
  23. COMMENT ON COLUMN dma_zone.zone_level IS '分区层级: 1=一级/2=二级/3=三级';
  24. COMMENT ON COLUMN dma_zone.status IS '状态: active/inactive';
  25. -- DMA计量表
  26. CREATE TABLE IF NOT EXISTS dma_meter (
  27. id BIGSERIAL PRIMARY KEY,
  28. zone_id BIGINT REFERENCES dma_zone(id),
  29. meter_code VARCHAR(50) NOT NULL UNIQUE,
  30. meter_name VARCHAR(100),
  31. meter_type VARCHAR(20) NOT NULL,
  32. location VARCHAR(200),
  33. longitude NUMERIC(12, 8),
  34. latitude NUMERIC(12, 8),
  35. caliber INTEGER,
  36. brand VARCHAR(100),
  37. status VARCHAR(20) DEFAULT 'online',
  38. remark VARCHAR(500),
  39. deleted INTEGER DEFAULT 0,
  40. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  41. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  42. );
  43. COMMENT ON TABLE dma_meter IS 'DMA计量表';
  44. COMMENT ON COLUMN dma_meter.meter_type IS '表计类型: inlet=进水表/outlet=出水表/boundary=边界表';
  45. COMMENT ON COLUMN dma_meter.status IS '状态: online/offline/fault';
  46. CREATE INDEX IF NOT EXISTS idx_meter_zone ON dma_meter(zone_id);
  47. -- DMA流量记录表
  48. CREATE TABLE IF NOT EXISTS dma_flow_record (
  49. id BIGSERIAL PRIMARY KEY,
  50. zone_id BIGINT NOT NULL REFERENCES dma_zone(id),
  51. meter_id BIGINT NOT NULL REFERENCES dma_meter(id),
  52. instant_flow NUMERIC(12, 4),
  53. total_flow NUMERIC(14, 4),
  54. pressure NUMERIC(8, 4),
  55. collect_time TIMESTAMP NOT NULL,
  56. data_quality VARCHAR(20) DEFAULT 'good',
  57. deleted INTEGER DEFAULT 0,
  58. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  59. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  60. );
  61. COMMENT ON TABLE dma_flow_record IS 'DMA流量记录表';
  62. COMMENT ON COLUMN dma_flow_record.instant_flow IS '瞬时流量(m³/h)';
  63. COMMENT ON COLUMN dma_flow_record.total_flow IS '累计流量(m³)';
  64. COMMENT ON COLUMN dma_flow_record.pressure IS '压力(MPa)';
  65. COMMENT ON COLUMN dma_flow_record.data_quality IS '数据质量: good/bad/missing';
  66. CREATE INDEX IF NOT EXISTS idx_flow_zone_time ON dma_flow_record(zone_id, collect_time);
  67. CREATE INDEX IF NOT EXISTS idx_flow_meter_time ON dma_flow_record(meter_id, collect_time);
  68. -- DMA漏损分析表
  69. CREATE TABLE IF NOT EXISTS dma_leakage_analysis (
  70. id BIGSERIAL PRIMARY KEY,
  71. zone_id BIGINT NOT NULL REFERENCES dma_zone(id),
  72. analysis_date DATE NOT NULL,
  73. supply_volume NUMERIC(14, 4),
  74. sale_volume NUMERIC(14, 4),
  75. leakage_volume NUMERIC(14, 4),
  76. nrw_rate NUMERIC(8, 2),
  77. leakage_rate NUMERIC(8, 2),
  78. mnf NUMERIC(10, 4),
  79. mnf_time VARCHAR(20),
  80. background_leakage NUMERIC(10, 4),
  81. burst_leakage NUMERIC(10, 4),
  82. alarm_level VARCHAR(20) DEFAULT 'normal',
  83. remark VARCHAR(500),
  84. deleted INTEGER DEFAULT 0,
  85. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  86. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  87. );
  88. COMMENT ON TABLE dma_leakage_analysis IS 'DMA漏损分析表';
  89. COMMENT ON COLUMN dma_leakage_analysis.nrw_rate IS '产销差率(%)';
  90. COMMENT ON COLUMN dma_leakage_analysis.leakage_rate IS '漏损率(%)';
  91. COMMENT ON COLUMN dma_leakage_analysis.mnf IS '最小夜间流量(m³/h)';
  92. COMMENT ON COLUMN dma_leakage_analysis.alarm_level IS '报警级别: normal/warning/critical';
  93. CREATE INDEX IF NOT EXISTS idx_leakage_zone_date ON dma_leakage_analysis(zone_id, analysis_date);
  94. CREATE UNIQUE INDEX IF NOT EXISTS uk_leakage_zone_date ON dma_leakage_analysis(zone_id, analysis_date) WHERE deleted = 0;
  95. -- 水平衡表
  96. CREATE TABLE IF NOT EXISTS dma_water_balance (
  97. id BIGSERIAL PRIMARY KEY,
  98. zone_id BIGINT NOT NULL REFERENCES dma_zone(id),
  99. period VARCHAR(20) NOT NULL,
  100. stat_date DATE NOT NULL,
  101. total_supply NUMERIC(14, 4),
  102. total_sale NUMERIC(14, 4),
  103. billing_sale NUMERIC(14, 4),
  104. free_supply NUMERIC(14, 4),
  105. apparent_loss NUMERIC(14, 4),
  106. real_loss NUMERIC(14, 4),
  107. background_loss NUMERIC(14, 4),
  108. burst_loss NUMERIC(14, 4),
  109. total_loss NUMERIC(14, 4),
  110. nrw_rate NUMERIC(8, 2),
  111. leakage_rate NUMERIC(8, 2),
  112. remark VARCHAR(500),
  113. deleted INTEGER DEFAULT 0,
  114. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  115. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  116. );
  117. COMMENT ON TABLE dma_water_balance IS '水平衡表';
  118. COMMENT ON COLUMN dma_water_balance.period IS '统计周期: daily/monthly/yearly';
  119. COMMENT ON COLUMN dma_water_balance.apparent_loss IS '表观漏损(m³) - 计量误差+偷水';
  120. COMMENT ON COLUMN dma_water_balance.real_loss IS '实际漏损(m³) - 物理漏损';
  121. CREATE INDEX IF NOT EXISTS idx_balance_zone_date ON dma_water_balance(zone_id, stat_date);
  122. CREATE INDEX IF NOT EXISTS idx_balance_period ON dma_water_balance(period);