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