diff --git a/server/sql_db/icedb b/server/sql_db/icedb index 71aeb6857a09efb0d2d1b93f743e20fdaed071ed..f4914b4c4464c891c8d94884568fc5289c996d8e 100644 Binary files a/server/sql_db/icedb and b/server/sql_db/icedb differ diff --git a/server/sql_db/schema.sql b/server/sql_db/schema.sql index 3ac83acef029146dd4341548e86ee161273aeda3..864076dc7399c9f23a2f787497c922c608db7b2d 100644 --- a/server/sql_db/schema.sql +++ b/server/sql_db/schema.sql @@ -1,96 +1,62 @@ -CREATE TABLE Measurement ( - MeasurementID INT PRIMARY KEY, - SensorID INT, - TimeMeasured DATETIME, - WaterBodyName TEXT, - FOREIGN KEY (SensorID) REFERENCES Sensor(SensorID), - FOREIGN KEY (WaterBodyName) REFERENCES BodyOfWater(Name) +-- Body of water +CREATE TABLE BodyOfWater ( + Name TEXT PRIMARY KEY ); +-- Single sensor CREATE TABLE Sensor ( - SensorID INTEGER PRIMARY KEY, + SensorID INT PRIMARY KEY, SensorType TEXT CHECK(SensorType IN ('LiDar', 'Magnetic', 'Other')), Active BOOLEAN ); -CREATE TABLE Data ( - MeasurementID INT, - Latitude FLOAT, - Longitude FLOAT, - IceTop FLOAT, - IceBottom FLOAT, - CalculatedThickness FLOAT, - Accuracy FLOAT, - PRIMARY KEY (MeasurementID, Longitude, Latitude), - FOREIGN KEY (MeasurementID) REFERENCES Measurement(MeasurementID) +-- Measurement taken at a given time +CREATE TABLE Measurement ( + MeasurementID INT PRIMARY KEY, + SensorID INT NOT NULL, + TimeMeasured DATETIME NOT NULL, + WaterBodyName TEXT NOT NULL, + WholeAverageThickness FLOAT NOT NULL, + FOREIGN KEY (SensorID) REFERENCES Sensor(SensorID), + FOREIGN KEY (WaterBodyName) REFERENCES BodyOfWater(Name) ); -CREATE TABLE Corner ( - CornerID INT, +CREATE TABLE SubDivision ( MeasurementID INT, - CornerLatitude FLOAT, - CornerLongitude FLOAT, - PRIMARY KEY (CornerID, MeasurementID), - FOREIGN KEY (MeasurementID) REFERENCES Measurement(MeasurementID) + SubDivisionID INT, + GroupID INT NOT NULL, + MinimumThickness FLOAT NOT NULL, + AverageThickness FLOAT NOT NULL, + CenterLatitude FLOAT NOT NULL, + CenterLongitude FLOAT NOT NULL, + Accuracy FLOAT, + FOREIGN KEY (MeasurementID) REFERENCES Measurement(MeasurementID), + PRIMARY KEY (MeasurementID, SubDivisionID) ); -CREATE TABLE BodyOfWater ( - Name TEXT PRIMARY KEY -); +-- Indexes +CREATE INDEX idx_measurement_waterbodyname ON Measurement(WaterBodyName); +CREATE INDEX idx_measurement_timemeasured ON Measurement(TimeMeasured); +-- Test data INSERT INTO Sensor (SensorID, SensorType, Active) VALUES (1, 'LiDar', 1), (2, 'Magnetic', 1), (3, 'Other', 0); -INSERT INTO Measurement (MeasurementID, SensorID, TimeMeasured, WaterBodyName) VALUES -(1, 2, '2024-01-01 10:00:00', 'Mjosa'), -(2, 2, '2024-02-04 11:00:00', 'Mjosa'), -(3, 1, '2024-02-13 12:00:00', 'Mjosa'); - --- Measurement 1 -INSERT INTO Data (MeasurementID, Latitude, Longitude, IceTop, IceBottom, CalculatedThickness, Accuracy) VALUES -(1, 60.7070, 10.9771, 8.0, 3.0, 5.0, 1.0), -(1, 60.7066, 10.9772, 7.5, 2.5, 5.0, 1.0), -(1, 60.7067, 10.9773, 7.5, 2.5, 5.0, 1.0), -(1, 60.7062, 10.9774, 7.5, 2.5, 5.0, 1.0), -(1, 60.7067, 10.9775, 7.0, 2.0, 5.0, 1.0); - -INSERT INTO Corner (CornerID, MeasurementID, CornerLatitude, CornerLongitude) VALUES -(1, 1, 60.7060, 10.9770), -(2, 1, 60.7061, 10.9771), -(3, 1, 60.7062, 10.9772), -(4, 1, 60.7063, 10.9773); - --- Measurement 2 -INSERT INTO Data (MeasurementID, Latitude, Longitude, IceTop, IceBottom, CalculatedThickness, Accuracy) VALUES -(2, 60.6366, 10.8171, 7.2, 2.2, 5.0, 1.5), -(2, 60.6367, 10.8172, 7.0, 2.0, 5.0, 1.5), -(2, 60.6368, 10.8172, 7.1, 2.1, 5.0, 1.5), -(2, 60.6369, 10.8172, 7.3, 2.3, 5.0, 1.5), -(2, 60.6367, 10.8173, 7.4, 2.4, 5.0, 1.5), -(2, 60.6367, 10.8179, 7.5, 2.5, 5.0, 1.5); +INSERT INTO BodyOfWater(Name) VALUES +('Mjosa'); -INSERT INTO Corner (CornerID, MeasurementID, CornerLatitude, CornerLongitude) VALUES -(1, 2, 60.6360, 10.8170), -(2, 2, 60.6361, 10.8171), -(3, 2, 60.6362, 10.8172), -(4, 2, 60.6363, 10.8173); +INSERT INTO Measurement (MeasurementID, SensorID, TimeMeasured, WaterBodyName, WholeAverageThickness) VALUES +(1, 2, '2024-01-01 10:00:00', 'Mjosa', 5.8), +(2, 2, '2024-02-04 11:00:00', 'Mjosa', 7.6), +(3, 1, '2024-02-13 12:00:00', 'Mjosa', 4.1); --- Measurement 3 -INSERT INTO Data (MeasurementID, Latitude, Longitude, IceTop, IceBottom, CalculatedThickness, Accuracy) VALUES -(3, 60.7366, 10.8471, 7.5, 2.5, 5.0, 2.5), -(3, 60.7369, 10.8471, 7.4, 2.4, 5.0, 2.5), -(3, 60.7367, 10.8480, 7.3, 2.3, 5.0, 2.5), -(3, 60.7368, 10.8481, 7.2, 2.2, 5.0, 2.5), -(3, 60.7370, 10.8475, 7.1, 2.1, 5.0, 2.5); +INSERT INTO SubDivision (MeasurementID, SubDivisionID, GroupID, MinimumThickness, AverageThickness, CenterLatitude, CenterLongitude, Accuracy) VALUES +(1, 1, 1, 3.2, 4.5, 60.765, 10.723, 1.2), +(1, 2, 1, 2.8, 4.3, 60.780, 10.776, 1.1), +(1, 3, 2, 4.1, 5.7, 60.768, 10.845, 1.3), +(1, 4, 2, 3.5, 5.0, 60.749, 10.783, 1.4); -INSERT INTO Corner (CornerID, MeasurementID, CornerLatitude, CornerLongitude) VALUES -(1, 3, 60.7360, 10.8470), -(2, 3, 60.7361, 10.8471), -(3, 3, 60.7362, 10.8472), -(4, 3, 60.7363, 10.8473); -INSERT INTO BodyOfWater(Name) VALUES -('Mjosa');