Database Schemas#

Here we will provide a list of schemas that can and should be used to log environmental data

Various databases are available, we have used SQLite3 for all our work

Code that will create this database and log to it is available at the repository text

Sensor data from Inator Devices#

The database will have the following schema:

devlist#

This table lists the devices/inators which are connected to the database. The columns are:

id - INTEGER NOT NULL, PRIMARY KEY & AUTOINCREMENT. This is the id number for the device

name - TEXT. This is the name of the sensor, this is what will be used for naming device based tables. This must be unique

num_sensors - INTEGER. How many sensors are attached to the device

info - TEXT. Any comments or info on the device, such as where it is to be found

type - TEXT. What type of data. For example is it a time series or individual files

location - TEXT. Where the device is located

active - INTEGER. Is the device in use, 1 yes 2 no.

The following SQL command will create the table

CREATE TABLE "devlist" ("id" INTEGER NOT NULL,"name" TEXT,"num_sensors" INTEGER,"info" TEXT, "type" TEXT, "location" TEXT, "active" INTEGER, PRIMARY KEY("id" AUTOINCREMENT))

id_<device>_details#

This table, where <device> is the name of the device as set in devlist and id is the device id, contains information on the sensors connected to the device, with a row per sensor. The columns are:

sens_id - INTEGER NOT NULL, PRIMARY KEY & AUTOINCREMENT. This is the id of the sensor attached to the device

sens_name - TEXT, the name of the sensor connected to the device.

measures - TEXT, description of what the sensor is measuring

returns - TEXT, what the sensor returns, e.g. a voltage or the actual value

calib - TEXT, any calibration that needs applying

range - TEXT, the range the measurement can cover

info - TEXT, info on the sensor. For example, make, serial number

comments - TEXT, any comments about the sensor, for example position

The following SQL command will create the table

CREATE TABLE "id_<device>_details"("sens_id" INTEGER NOT NULL, "sens_name" TEXT, "measures" TEXT, "returns" TEXT, "calib" TEXT, "range" TEXT, "info" TEXT, "comments" TEXT, PRIMARY KEY("sens_id" AUTOINCREMENT));

id_<device>#

This table, where <device> is the name of the device as set in devlist and id is the device id, where there is a row for each data entry. The columns are:

id - INTEGER NOT NULL, PRIMARY KEY & AUTOINCREMENT. The id of the data entry

timestamp - TIME, the time that the data entry was recorded

id_<sens_id> - INTEGER, the id of the sensor (as given in _details). There is one column for each sensor on the device

The following SQL command will create the table, adding a <sens_name> FLOAT for each sensor

CREATE TABLE "id_<device>"("id" INTEGER NOT NULL, timestamp Time, id_<sens_id> INTEGER, PRIMARY KEY("id" AUTOINCREMENT))

Setting up an Inator#

To set up an inator into the database the following method should be used.

This assumes that the database has been already set up and that the devlist table exists.

1 Add the Inator name to the devlist table

2 Create the \<device\>_details table for the Inator

3 Populate the \<device\>_details table with the sensor information for the Inator. This should be as full as possible.

4 Create the \<device\> table with a column for each sensor that is attached to the Inator

These steps can be chained together into one database transaction

Querying Database#

The Database can now be queried to find out what devices are reporting here and what sensors are connected.