-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema.sql
245 lines (215 loc) · 6.24 KB
/
schema.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
-- Structural metadata
drop table if exists "location";
create table "location" (
id uuid primary key,
longitude float not null,
latitude float not null,
radius float default 0 not null,
elevation integer
);
drop table if exists "project";
create table project (
id uuid primary key,
name varchar(255),
location_id uuid,
description text
);
drop table if exists "activity";
create table "activity" (
id uuid primary key,
name varchar(255),
project_id uuid,
location_id uuid,
description text
);
drop table if exists "study";
create table "study" (
id uuid primary key,
name varchar(255),
description text,
owner_id uuid not null
);
drop table if exists "activitystudy";
create table "activitystudy" (
study_id uuid,
activity_id uuid,
primary key(study_id, activity_id)
);
drop table if exists lineage;
create table lineage (
id uuid primary key,
from_dataset_id uuid not null,
to_dataset_id uuid not null,
fork_type int not null, -- derived or corrected data from lineage
forked timestamp not null, -- timestamp of derivation
forked_by_id uuid not null, -- user id of the fork
unique (from_dataset_id, to_dataset_id)
);
-- DATASET
drop table if exists dataset;
create table dataset (
"id" uuid primary key,
"type" varchar(255) not null,
"study_id" uuid not null,
"created" timestamp not null,
"creator_id" uuid not null,
"closed" timestamp,
"curation_status" int,
"curated_by_id" uuid,
"curated" timestamp,
"description" text
);
-- METADATA
drop table if exists metadata;
create table metadata (
"id" uuid primary key,
"dataset_id" uuid not null, -- dataset uuid
"metadata_type" int,
"metadata_handler" int, -- handled by the specific data type
"level" int, -- dataset top level or a part of the data
"created" timestamp not null, -- time created
"created_by_id" uuid -- uuid of user that created the dataset
);
drop table if exists metadata_annotation;
create table metadata_annotation (
"id" uuid primary key,
"metadata_id" uuid not null,
"annotation" text not null
);
drop table if exists metadata_tag;
create table metadata_tag (
"id" uuid primary key,
"metadata_id" uuid not null,
"tag" varchar(255) not null
);
drop table if exists metadata_keyvalue;
create table metadata_keyvalue (
"id" uuid primary key,
"metadata_id" uuid not null,
"key" varchar(255),
"holds" int,
"value_float" float,
"value_int" int,
"value_string" text,
unique ("metadata_id", "key")
);
-- DATA TYPE: FILE
drop table if exists dataset_file;
create table dataset_file (
id uuid primary key,
filename text,
mimetype varchar(255)
);
-- DATA TYPE: SEQUENCE
drop table if exists dataset_sequence;
create table dataset_sequence (
id uuid primary key,
dataset_id uuid not null,
index_type_id uuid not null,
index_marker_type integer,
index_marker_location integer
);
drop table if exists dataset_type;
create table dataset_type (
id uuid primary key,
name varchar(255) unique,
unit varchar(50),
description text
);
drop table if exists dataset_sequence_parameter;
create table dataset_sequence_parameter (
index int not null,
sequence_id uuid not null,
type_id uuid,
uncertainty_value float,
uncertainty_type int,
storage int,
primary key(index, sequence_id)
);
drop table if exists dataset_sequence_index;
create table dataset_sequence_index (
id uuid primary key,
sequence_id uuid not null,
location float not null,
span float
);
drop table if exists dataset_sequence_point;
create table dataset_sequence_point (
id uuid primary key,
parameter_index integer not null,
index_id uuid not null,
"value" float not null,
uncertainty_value float
);
create index dataset_sequence_point_parameter on dataset_sequence_point(parameter_index);
create index dataset_sequence_point_index on dataset_sequence_point(index_id);
drop table if exists dataset_sequence_metadata;
create table dataset_sequence_metadata (
id uuid primary key,
metadata_id uuid not null,
sequence_id uuid,
parameter_index int,
index_id uuid,
point_id uuid
);
-- AUTH
drop table if exists "user";
create table "user" (
id uuid primary key not null,
username varchar(50) not null,
fullname varchar(255),
email varchar(255) not null,
password varchar(60) not null,
userlevel integer not null
);
drop table if exists "user_settings";
create table "user_settings" (
"id" uuid primary key not null,
"user_id" uuid not null,
"setting" varchar(255) not null,
"value" varchar(255)
);
drop table if exists "token";
create table "token" (
"id" varchar(32) primary key not null,
"user_id" uuid not null,
"timestamp" integer not null,
"validity" integer -- seconds of validity of this token, if NULL, always valid
);
drop table if exists "group";
create table "group" (
"id" uuid primary key,
"parent_id" uuid,
"name" varchar(50)
);
drop table if exists "group_member";
create table "group_member" (
"user_id" uuid not null,
"group_id" uuid not null,
primary key("user_id", "group_id")
);
drop table if exists permission;
create table permission (
user_id uuid,
granted_by_id uuid not null,
granted timestamp not null,
identifier varchar(255),
primary key("user_id", "identifier")
);
drop table if exists study_group;
create table study_group (
"study_id" uuid not null,
"group_id" uuid not null,
"role" int not null,
primary key("study_id", "group_id")
);
drop table if exists favorite;
create table favorite (
"id" uuid primary key,
"name" varchar(255) not null,
"user_id" uuid not null,
"ref_id" uuid not null,
"ref_type" int not null,
unique("name", "user_id")
);
insert into "user" (id, username, fullname, email, password, userlevel) values ('12345678-90ab-cdef-1234-567890abcdef', 'admin', 'Database Administrator', 'user@example.com', '$2a$12$3xJErTM6NcJSNKSFP5Chxe9O3XnVmA6V8xXpTD2Jr8Srrst.np4AS', 10);