WiBlo Lab

WiBlo Lab (laboratory, developing, projects)

postgresql_1Zaprojektowałem wstępnie bazę danych, w której będą przechowywane odczytane dane ze stacji meteo. Na początku myślałem o dwóch tabelach (jedna do przechowywania nazw i opisów czujników, a druga do przechowywania danych z czujników) jednak po przemyśleniu struktury biorąc pod uwagę elastyczność i przyszłość rozbudowy postanowiłem stworzyć 4 tabele do przechowywania danych. Pozwoli to zachować elastyczność bazy oraz łatwość rozbudowy w przyszłości. Baza danych (silnik) jaki będzie tutaj używany to PostgreSQL (więcej info w wikipedi: https://pl.wikipedia.org/wiki/PostgreSQL). Jest to darmowa baza danych, którą może każdy wykorzystywać nawet w zamkniętych projektach komercyjnych. Poniżej opis, diagram, struktura bazy, którą zaprojektowałem na potrzeby stacji meteo.

Diagram poniżej przedstawia strukturę bazy oraz relacje pomiędzy tabelami. Baza ma 4 tabele: ws_sensors, ws_temperature, ws_humidity, ws_pressure.
db_diagramTabela ws_sensors jest tabelą do przechowywania nazw i opisów czujników. Pozwoli to określić czy np. pobrana temperatura jest temperaturą z czujnika umieszczonego wewnątrz czy na zewnątrz .
Pola tabeli ws_sensors:
id – identyfikator rekordu w tabeli
date_insert – data utworzenia rekordu
date_modify – data modyfikacji rekordu
sensor_name – nazwa czujnika
sensor_description – szczegółowy opis czujnika

Tabela ws_temperature jest do przechowywania odczytywanych temperatur z czujników.
Pola tabeli ws_temperature:
id – identyfikator rekordu w tabeli
date_insert – data dodania rekordu
sensor_id – ID czujnika z tabeli ws_sensors
temperature – zmierzona temperatura

Tabela ws_humidity jest do przechowywania odczytanej wilgotności powietrza, temperatury, obliczonego współczynnika heat_index (temperatura odczuwalna) oraz obliczonego punktu rosy. Do wyliczenia heat_index i dew_point jest potrzebna temperatura (która jest mierzona przez ten sam czujnik) i wilgotność dlatego w tej samej tabeli przechowywana jest wilgotność oraz temperatura.
Pola tabeli ws_humidity:
id – identyfikator rekordu w tabeli
date_insert – data dodania rekordu
sensor_id – ID czujnika z tabeli ws_sensors
humidity – zmierzona wilgotność powietrza
temperature -zmierzona temperatura przy danej wilgotności
heat_index – obliczona temperatura odczuwalna
dew_point –  obliczony punkt rosy

Tabela ws_pressure jest do przechowywania zmierzonego ciśnienia (przy okazji także zapisywana jest wysokość n.p.m. wyliczona na podstawie ciśnienia oraz rzeczywista wysokość n.p.m. na której znajduje się czujnik).
Pola tabeli ws_pressure:
id – identyfikator rekordu w tabeli
date_insert – data dodania rekordu
sensor_id – ID czujnika z tabeli ws_sensors
pressure – zmierzone ciśnienie
altitude – obliczona wysokość n.p.m. na podstawie ciśnienia (zgodnie z domyślnymi danymi czujnika)
sea_level – rzeczywista wysokość n.p.m. na której jest zamontowany czujnika

Zdaje się mi, że baza danych w takiej formie jest odpowiednia gdyby nawet zaszła w przyszłości potrzeba rozbudowy bazy o dodatkowe tabele. W przyszłości może dojść tabela ws_wind do zapisywania danych z anemometru, ale najpierw trzeba zbudować i wysterować anemometr (lub zdobyć jakiegoś gotowca, który będzie się nadawał do projektu) oraz może tabela ws_rainfall, która będzie służyła do przechowywania pomiarów opadu deszczu. Opisane powyżej tabele póki co wystarczą w mojej stacji meteo. Brakuje mi anemometru i po uruchomieniu stacji będę się starał jakoś temu zaradzić.

Dla zainteresowanych poniżej eksport struktury bazy. Owner to jak widać weather więc takiego użytkownika należy utworzyć albo zmienić na własnego:

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

--
-- Name: ws_humidity_id_seq; Type: SEQUENCE; Schema: public; Owner: weather
--

CREATE SEQUENCE ws_humidity_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.ws_humidity_id_seq OWNER TO weather;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: ws_humidity; Type: TABLE; Schema: public; Owner: weather; Tablespace: 
--

CREATE TABLE ws_humidity (
    id bigint DEFAULT nextval('ws_humidity_id_seq'::regclass) NOT NULL,
    date_insert timestamp without time zone NOT NULL,
    sensor_id bigint NOT NULL,
    humidity numeric(3,2) NOT NULL,
    temperature numeric(3,2) NOT NULL,
    heat_index numeric(3,2) NOT NULL,
    dew_point numeric(3,2) NOT NULL
);


ALTER TABLE public.ws_humidity OWNER TO weather;

--
-- Name: ws_pressure_id_seq; Type: SEQUENCE; Schema: public; Owner: weather
--

CREATE SEQUENCE ws_pressure_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.ws_pressure_id_seq OWNER TO weather;

--
-- Name: ws_pressure; Type: TABLE; Schema: public; Owner: weather; Tablespace: 
--

CREATE TABLE ws_pressure (
    id bigint DEFAULT nextval('ws_pressure_id_seq'::regclass) NOT NULL,
    date_insert timestamp without time zone NOT NULL,
    sensor_id bigint NOT NULL,
    pressure numeric(4,2) NOT NULL,
    altitude numeric(4,2) NOT NULL,
    sea_level numeric(4,2) NOT NULL
);


ALTER TABLE public.ws_pressure OWNER TO weather;

--
-- Name: ws_readings_id_seq; Type: SEQUENCE; Schema: public; Owner: weather
--

CREATE SEQUENCE ws_readings_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.ws_readings_id_seq OWNER TO weather;

--
-- Name: ws_sensors_id_seq; Type: SEQUENCE; Schema: public; Owner: weather
--

CREATE SEQUENCE ws_sensors_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.ws_sensors_id_seq OWNER TO weather;

--
-- Name: ws_sensors; Type: TABLE; Schema: public; Owner: weather; Tablespace: 
--

CREATE TABLE ws_sensors (
    id bigint DEFAULT nextval('ws_sensors_id_seq'::regclass) NOT NULL,
    date_insert timestamp without time zone DEFAULT now() NOT NULL,
    date_modify timestamp without time zone,
    sensor_name text NOT NULL,
    sensor_description text
);


ALTER TABLE public.ws_sensors OWNER TO weather;

--
-- Name: TABLE ws_sensors; Type: COMMENT; Schema: public; Owner: weather
--

COMMENT ON TABLE ws_sensors IS 'table for sensor names';


--
-- Name: ws_temperature_id_seq; Type: SEQUENCE; Schema: public; Owner: weather
--

CREATE SEQUENCE ws_temperature_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.ws_temperature_id_seq OWNER TO weather;

--
-- Name: ws_temperature; Type: TABLE; Schema: public; Owner: weather; Tablespace: 
--

CREATE TABLE ws_temperature (
    id bigint DEFAULT nextval('ws_temperature_id_seq'::regclass) NOT NULL,
    date_insert timestamp without time zone NOT NULL,
    sensor_id bigint NOT NULL,
    temperature numeric(3,2) NOT NULL
);


ALTER TABLE public.ws_temperature OWNER TO weather;

--
-- Name: ws_humidity_pkey; Type: CONSTRAINT; Schema: public; Owner: weather; Tablespace: 
--

ALTER TABLE ONLY ws_humidity
    ADD CONSTRAINT ws_humidity_pkey PRIMARY KEY (id);


--
-- Name: ws_pressure_pkey; Type: CONSTRAINT; Schema: public; Owner: weather; Tablespace: 
--

ALTER TABLE ONLY ws_pressure
    ADD CONSTRAINT ws_pressure_pkey PRIMARY KEY (id);


--
-- Name: ws_sensors_pkey; Type: CONSTRAINT; Schema: public; Owner: weather; Tablespace: 
--

ALTER TABLE ONLY ws_sensors
    ADD CONSTRAINT ws_sensors_pkey PRIMARY KEY (id);


--
-- Name: ws_temperature_pkey; Type: CONSTRAINT; Schema: public; Owner: weather; Tablespace: 
--

ALTER TABLE ONLY ws_temperature
    ADD CONSTRAINT ws_temperature_pkey PRIMARY KEY (id);


--
-- Name: ws_humidity_sensor_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: weather
--

ALTER TABLE ONLY ws_humidity
    ADD CONSTRAINT ws_humidity_sensor_id_fkey FOREIGN KEY (sensor_id) REFERENCES ws_sensors(id);


--
-- Name: ws_pressure_sensor_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: weather
--

ALTER TABLE ONLY ws_pressure
    ADD CONSTRAINT ws_pressure_sensor_id_fkey FOREIGN KEY (sensor_id) REFERENCES ws_sensors(id);


--
-- Name: ws_temperature_sensor_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: weather
--

ALTER TABLE ONLY ws_temperature
    ADD CONSTRAINT ws_temperature_sensor_id_fkey FOREIGN KEY (sensor_id) REFERENCES ws_sensors(id);


--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- PostgreSQL database dump complete
--

27 listopada, 2015

Posted In: Meteo station v2.0

Tagi: , , , , , , , ,

Dodaj komentarz