DROP TABLE IF EXISTS value;
DROP TABLE IF EXISTS device_property;
DROP TABLE IF EXISTS device;
DROP TABLE IF EXISTS message;

DROP SEQUENCE IF EXISTS id_seq;

CREATE SEQUENCE id_seq;

CREATE TABLE message (
  timestamp TIMESTAMPTZ   NOT NULL,
  topic     VARCHAR(1000) NOT NULL,
  message   BYTEA         NOT NULL
);

CREATE TABLE device (
  id                BIGINT        NOT NULL DEFAULT nextval('id_seq'),
  key               VARCHAR(1000) NOT NULL,
  created_timestamp TIMESTAMPTZ   NOT NULL,
  name              VARCHAR(1000),
  description       VARCHAR(1000),

  PRIMARY KEY (id),
  CONSTRAINT uq_device__key UNIQUE (key)
);

CREATE TABLE device_property (
  id                BIGINT        NOT NULL DEFAULT nextval('id_seq'),
  device            BIGINT        NOT NULL REFERENCES device,
  key               VARCHAR(1000) NOT NULL,
  created_timestamp TIMESTAMPTZ   NOT NULL,
  name              VARCHAR(1000),
  description       VARCHAR(1000),
  last_value        VARCHAR(1000),

  PRIMARY KEY (id),
  CONSTRAINT uq_device_property__key_name UNIQUE (id, name)
);

-- no constraints!
CREATE TABLE value (
  property  BIGINT      NOT NULL,
  timestamp TIMESTAMPTZ NOT NULL,
  value     VARCHAR(1000)
);
