1+ -- Habilitar extensión para UUIDs
2+ CREATE EXTENSION IF NOT EXISTS " uuid-ossp" ;
3+
4+ -- Tabla de especies
15CREATE TABLE IF NOT EXISTS species (
26 id SERIAL PRIMARY KEY ,
37 comName VARCHAR (255 ) NOT NULL ,
48 sciName VARCHAR (255 ) NOT NULL ,
5- CONSTRAINT species_comname_sciname_unique UNIQUE (comName, sciName) -- Restricción combinada
9+ CONSTRAINT species_comname_sciname_unique UNIQUE (comName, sciName)
610);
711
12+ -- Observaciones
813CREATE TABLE IF NOT EXISTS observation (
914 id SERIAL PRIMARY KEY ,
1015 locationId VARCHAR (255 ),
1116 locationName VARCHAR (255 ),
12- lat DECIMAL (9 ,6 ), -- Asumiendo una precisión adecuada para coordenadas geográficas
17+ lat DECIMAL (9 ,6 ),
1318 lng DECIMAL (9 ,6 ),
14- date TIMESTAMP , -- Usa TIMESTAMP para almacenar tanto fecha como hora
19+ date TIMESTAMP ,
1520 numObservation INT ,
16- speciesId INT NULL , -- Hacer opcional el speciesId
21+ speciesId INT NULL ,
1722 CONSTRAINT fk_species
1823 FOREIGN KEY (speciesId)
1924 REFERENCES species(id)
20- ON DELETE SET NULL
25+ ON DELETE SET NULL
2126);
2227
28+ -- Grabaciones
2329CREATE TABLE IF NOT EXISTS recording (
2430 id SERIAL PRIMARY KEY ,
25- recordingId VARCHAR (255 ) UNIQUE, -- Asegurarse de que recordingId sea único si se usa en lógicas de inserción condicionales
31+ recordingId VARCHAR (255 ) UNIQUE,
2632 location VARCHAR (255 ),
2733 quality VARCHAR (255 ),
2834 lat DECIMAL (9 ,6 ),
2935 lng DECIMAL (9 ,6 ),
3036 alt INT ,
3137 file VARCHAR (255 ),
3238 fileName VARCHAR (255 ),
33- time VARCHAR (255 ), -- Si es un timestamp, considerar cambiar el tipo a TIME o TIMESTAMP
39+ time VARCHAR (255 ),
3440 date TIMESTAMP ,
35- observationId INT NULL , -- Hacer opcional el observationId
41+ observationId INT NULL ,
3642 CONSTRAINT fk_observation
3743 FOREIGN KEY (observationId)
3844 REFERENCES observation(id)
39- ON DELETE SET NULL
45+ ON DELETE SET NULL
4046);
4147
48+ -- Usuarios
4249CREATE TABLE IF NOT EXISTS users (
4350 id SERIAL PRIMARY KEY ,
4451 name VARCHAR (255 ) NOT NULL ,
@@ -50,11 +57,50 @@ CREATE TABLE IF NOT EXISTS users (
5057 active BOOLEAN DEFAULT FALSE
5158);
5259
60+ -- Estado del dispositivo
5361CREATE TABLE IF NOT EXISTS device_status (
5462 id SERIAL PRIMARY KEY ,
5563 gps_latitude DECIMAL (9 ,6 ) NOT NULL ,
5664 gps_longitude DECIMAL (9 ,6 ) NOT NULL ,
57- status VARCHAR (255 ) NOT NULL , -- Estado del dispositivo
58- storage_status DECIMAL (5 ,2 ) NOT NULL , -- Almacenamiento libre en GB, con dos decimales
59- last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Última vez que se recibió la actualización
65+ status VARCHAR (255 ) NOT NULL ,
66+ storage_status DECIMAL (5 ,2 ) NOT NULL ,
67+ last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP
68+ );
69+
70+ -- Estadísticas de aves
71+ CREATE TABLE IF NOT EXISTS bird_statistics (
72+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
73+ camera_id VARCHAR NOT NULL ,
74+ bird_name VARCHAR NOT NULL ,
75+ count INT NOT NULL DEFAULT 1 ,
76+ last_seen TIMESTAMP NOT NULL DEFAULT now(),
77+ created_at TIMESTAMP NOT NULL DEFAULT now(),
78+ CONSTRAINT unique_camera_bird UNIQUE (camera_id, bird_name)
79+ );
80+
81+ -- Segmentos de datos
82+ CREATE TABLE IF NOT EXISTS segment_data (
83+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
84+ camera_id VARCHAR ,
85+ segment_idx INT ,
86+ colatitude FLOAT,
87+ azimuth FLOAT,
88+ zoom_level INT ,
89+ average_area FLOAT,
90+ total_big_birds INT ,
91+ frames JSONB,
92+ received_at TIMESTAMP NOT NULL DEFAULT now(),
93+ CONSTRAINT fk_camera_segment
94+ FOREIGN KEY (camera_id)
95+ REFERENCES bird_statistics(camera_id)
96+ ON DELETE CASCADE
97+ );
98+
99+ -- Imágenes de mapas de calor
100+ CREATE TABLE IF NOT EXISTS heatmap_image (
101+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
102+ camera_id VARCHAR ,
103+ heatmap_for TEXT ,
104+ image_url TEXT ,
105+ generated_at TIMESTAMP NOT NULL DEFAULT now()
60106);
0 commit comments