From ecaf695cfb0965ebcaa46bf1a77cccfb219f7ddf Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Thu, 22 Feb 2024 10:36:25 +0100
Subject: [PATCH] update: schema & db

---
 server/sql_db/icedb      | Bin 40960 -> 45056 bytes
 server/sql_db/schema.sql | 112 ++++++++++++++-------------------------
 2 files changed, 39 insertions(+), 73 deletions(-)

diff --git a/server/sql_db/icedb b/server/sql_db/icedb
index 71aeb6857a09efb0d2d1b93f743e20fdaed071ed..f4914b4c4464c891c8d94884568fc5289c996d8e 100644
GIT binary patch
literal 45056
zcmeI*Pi)&%90zbe+fC|p+Z!BaRjAVwRh0x<NSXoC5USJG8_^O6(y%{Vf}6Olp-sB{
zDJv3(jSXpsN!-x5!i578M<!0(*<oBJap5pA2_Yl~V?$yGo}ZKMrAjL#E?xC~YU=0b
z=jZo6Kf9It5_jRvyx;cNQlq)%wpm6wtPrADj46r|<F66^>ZJ(J=)D!bBvO8-Y)pA!
z<LW{Bw-SpzqtIpg-Jxsr_<=tTogO)I;M>@zybuWj5P$##AOHafKwz&3d=QJ8_BgpX
z>ep-D1;2KovgWz1PSacS>g`I~U*j3EUMoB<ADJuJ*|N=Y&b)n=?Y0vuI!xLzQRWSH
z*K5fSji`B&AA4-zvEO&wUURWg+pN1=`vjee?RxOOy|y3yOwi;kZ_?pSCO>*M8a2nq
z$;TsYcX8EQ=q%3r8-B}g)TQij_h{wpY~E(l29}61o}|I$<~c}tQWQ%S<>HggMrS=N
zU{0~joVW7%aEF3l_t!dW<rTmBUfpZ8*ok~G%PaI%%5Hc~ciG#$(i}JPnt8YFw>vd&
zU_0F^jr#J=b+XlJr|DKV!v?}mo+y^=+)0O>vd^(Z-^i1!WS_80wlilh$R^urh0VNC
z$`!Jua|4>0l!bHi$yoBG;fR?VCyF>lTIW~!eN4sev>Rf*A~9Fe(u#4(9TKs<Vu;vE
zeU-A2zSv3|c8V>Ndftt*S8p|%10yP*>TI50F6CUo-WJfl6Oxtfv)dznW~H&}{im?^
z#b%+~t-i2?g^8_g17h0OpT3=gtERXlwkO2Z!$T9<Ei@8mB`vK)FFvP5&CyYE>BaD}
z6I~5ErS}CSEbGRi*X!UC+bIm?&2=wCoO|7#JJlVjD9t%65zqVcZZkf~;stlP?zR1D
zkT14Zyk<O^3^lUVw!h)A*<vwoXPsE`c|BszjP7{)iN5nQPb`Pdl1T9LWK)bw0+X_8
z-w34*-C+i_;Si)#jZ>?;QA^EK($b2?f5{97zi1Bf7oiUo{)Geq2tWV=5P$##AOHaf
zKmY;|fWZC|h!WK-yxVBG!6ZNK|MypLF&YR!00Izz00bZa0SG_<0uX>eS72B(4RQY;
z%>QfjM}_`H@A3r_1Rwwb2tWV=5P$##AOHafKmY<ylt4_=i8-u^4>256buwnCy$?4S
zL^n)BeC8pT|JUg63VlQ$@C6bCAOHafKmY;|fB*y_009U<00R3!U`QiG(}M4+s%eH1
z&i`Ll=xzEHy}S<wh#^1#0uX=z1Rwwb2tWV=5P$##_NYKyix4AYMz!hG^s%Yb^i(>-
z($mLNDgGtiq;DNw5-FiZ2;mh~wO2EBjHT0Z&7)z>IEfgdW>_&jl}fX8(B4*)W=15;
z|L@V00^NcD1Rwwb2tWV=5P$##AOHaf{11Ua^Zz=1S)n)Sbz0*YBnUtN0uX=z1Rwwb
z2tWV=5P$##x&o8BVGt4}(P&gxtpj1{kmXc<dbRfUm^Jaq&+lZfzB2P5oQ%)#_u2E>
zLDJOTT)uVW`yk!4oW;Tq_r82&O?>_N?bvJQXYPmP(<<M|5Id<>By7lfDx9>poGP!n
z{)IJhtr#3}=HB%neU>H$Phua-2#c(z!_HZb`|FjX-;}J0=G39n`smD`kLUk&dRL+U
z(EIc^o<V{D1Rwwb2tWV=5P$##AOHafK;Q`#i0J$e5V|fFnkE*is`Ec$7~%W>?<n*k
zzx%)Qgbokgh5!U0009U<00Izz00bZa0SG|A&`cs8BcN^N)UE&j7vBHhQ0Oo87QF#1
x2tWV=5P$##AOHafKmY;|fB*#clz^#aNbf0t((?i}xm<cWpn62h7y}*#_%BH5fFA$=

literal 40960
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
S009sHfe$=^u&k@>`TxJP7<2Ui

diff --git a/server/sql_db/schema.sql b/server/sql_db/schema.sql
index 3ac83ace..864076dc 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');
 
-- 
GitLab