Project

General

Profile

1 56326 michele.ar
DROP VIEW organizations_view;
2 57674 michele.ar
DROP VIEW organizations_info_view;
3 56360 michele.ar
DROP VIEW organizations_simple_view;
4 57542 michele.ar
DROP VIEW users_view;
5 57670 michele.ar
DROP VIEW conflicts_view;
6 56326 michele.ar
7
DROP TABLE IF EXISTS other_ids;
8 56332 michele.ar
DROP TABLE IF EXISTS other_names;
9
DROP TABLE IF EXISTS acronyms;
10 56326 michele.ar
DROP TABLE IF EXISTS relationships;
11
DROP TABLE IF EXISTS urls;
12 56503 michele.ar
DROP TABLE IF EXISTS openaire_simrels;
13 56326 michele.ar
DROP TABLE IF EXISTS organizations;
14 57097 michele.ar
DROP TABLE IF EXISTS org_types;
15 57289 michele.ar
16
DROP TABLE IF EXISTS user_countries;
17
DROP TABLE IF EXISTS users;
18
19
DROP TABLE IF EXISTS user_roles;
20
DROP TABLE IF EXISTS countries;
21 57097 michele.ar
DROP TABLE IF EXISTS id_types;
22 57099 michele.ar
DROP TABLE IF EXISTS languages;
23 56326 michele.ar
24 57304 michele.ar
DROP SEQUENCE IF EXISTS organizations_id_seq;
25 57212 michele.ar
26 57097 michele.ar
CREATE TABLE org_types (val text PRIMARY KEY);
27 57304 michele.ar
INSERT INTO org_types VALUES ('Archive'), ('Company'), ('Education'), ('Facility'), ('Government'), ('Healthcare'), ('Nonprofit'), ('Other'), ('UNKNOWN');
28 56503 michele.ar
29 57097 michele.ar
CREATE TABLE id_types (val text PRIMARY KEY);
30
INSERT INTO id_types VALUES ('CNRS'), ('FundRef'), ('HESA'), ('ISNI'), ('OrgRef'), ('UCAS'), ('UKPRN'), ('Wikidata'), ('grid.ac');
31 56503 michele.ar
32 57099 michele.ar
CREATE TABLE languages (val text PRIMARY KEY);
33
INSERT INTO languages VALUES ('UNKNOWN'), ('aa'), ('af'), ('am'), ('ar'), ('as'), ('az'), ('ba'), ('be'), ('bg'), ('bn'), ('br'), ('bs'), ('ca'), ('ch'), ('co'), ('cs'), ('cy'), ('da'),
34
			('de'), ('dv'), ('dz'), ('el'), ('en'), ('eo'), ('es'), ('et'), ('eu'), ('fa'), ('fi'), ('fr'), ('fy'), ('ga'), ('gd'), ('gl'), ('gu'), ('he'), ('hi'), ('hr'), ('hu'), ('hy'), ('id'), ('is'),
35
			('it'), ('iu'), ('ja'), ('jv'), ('ka'), ('kk'), ('kl'), ('km'), ('kn'), ('ko'), ('ku'), ('ky'), ('la'), ('lb'), ('lo'), ('lt'), ('lv'), ('mg'), ('mi'), ('mk'), ('ml'), ('mn'), ('mr'), ('ms'),
36
			('mt'), ('my'), ('nb'), ('ne'), ('nl'), ('nn'), ('no'), ('oc'), ('or'), ('pa'), ('pl'), ('ps'), ('pt'), ('rm'), ('ro'), ('ru'), ('rw'), ('sa'), ('sd'), ('si'), ('sk'), ('sl'), ('so'), ('sq'),
37
			('sr'), ('sv'), ('sw'), ('ta'), ('te'), ('tg'), ('th'), ('tk'), ('tl'), ('tr'), ('tt'), ('ug'), ('uk'), ('ur'), ('uz'), ('vi'), ('xh'), ('yo'), ('zh'), ('zu');
38 57097 michele.ar
39 57099 michele.ar
CREATE TABLE countries (val text PRIMARY KEY);
40
INSERT INTO countries VALUES ('UNKNOWN'), ('AD'), ('AE'), ('AF'), ('AG'), ('AL'), ('AM'), ('AO'), ('AR'), ('AT'), ('AU'), ('AW'), ('AX'), ('AZ'), ('BA'), ('BB'), ('BD'), ('BE'), ('BF'), ('BG'), ('BH'), ('BI'),
41
			('BJ'), ('BM'), ('BN'), ('BO'), ('BQ'), ('BR'), ('BS'), ('BT'), ('BW'), ('BY'), ('BZ'), ('CA'), ('CD'), ('CF'), ('CG'), ('CH'), ('CI'), ('CL'), ('CM'), ('CN'), ('CO'), ('CR'),
42
			('CU'), ('CV'), ('CW'), ('CY'), ('CZ'), ('DE'), ('DJ'), ('DK'), ('DM'), ('DO'), ('DZ'), ('EC'), ('EE'), ('EG'), ('EH'), ('ER'), ('ES'), ('ET'), ('FI'), ('FJ'), ('FM'), ('FO'),
43
			('FR'), ('GA'), ('GB'), ('GD'), ('GE'), ('GF'), ('GH'), ('GI'), ('GL'), ('GM'), ('GN'), ('GP'), ('GQ'), ('GR'), ('GT'), ('GW'), ('GY'), ('HN'), ('HR'), ('HT'), ('HU'), ('ID'),
44
			('IE'), ('IL'), ('IM'), ('IN'), ('IQ'), ('IR'), ('IS'), ('IT'), ('JE'), ('JM'), ('JO'), ('JP'), ('KE'), ('KG'), ('KH'), ('KN'), ('KP'), ('KR'), ('KW'), ('KY'), ('KZ'), ('LA'),
45
			('LB'), ('LC'), ('LI'), ('LK'), ('LR'), ('LS'), ('LT'), ('LU'), ('LV'), ('LY'), ('MA'), ('MC'), ('MD'), ('ME'), ('MG'), ('MK'), ('ML'), ('MM'), ('MN'), ('MO'), ('MQ'), ('MR'),
46
			('MS'), ('MT'), ('MU'), ('MV'), ('MW'), ('MX'), ('MY'), ('MZ'), ('NA'), ('NC'), ('NE'), ('NG'), ('NI'), ('NL'), ('NO'), ('NP'), ('NU'), ('NZ'), ('OM'), ('PA'), ('PE'), ('PF'),
47
			('PG'), ('PH'), ('PK'), ('PL'), ('PS'), ('PT'), ('PW'), ('PY'), ('QA'), ('RE'), ('RO'), ('RS'), ('RU'), ('RW'), ('SA'), ('SB'), ('SC'), ('SD'), ('SE'), ('SG'), ('SI'), ('SJ'),
48
			('SK'), ('SL'), ('SM'), ('SN'), ('SO'), ('SR'), ('SS'), ('ST'), ('SV'), ('SX'), ('SY'), ('SZ'), ('TC'), ('TD'), ('TG'), ('TH'), ('TJ'), ('TL'), ('TM'), ('TN'), ('TO'), ('TR'),
49
			('TT'), ('TV'), ('TW'), ('TZ'), ('UA'), ('UG'), ('US'), ('UY'), ('UZ'), ('VA'), ('VC'), ('VE'), ('VG'), ('VN'), ('WS'), ('XK'), ('YE'), ('ZA'), ('ZM'), ('ZW');
50
51 57253 michele.ar
CREATE TABLE user_roles(role text PRIMARY KEY);
52 57661 michele.ar
INSERT INTO user_roles VALUES ('ADMIN'), ('NATIONAL_ADMIN'), ('USER'), ('PENDING'), ('NOT_AUTHORIZED');
53 57253 michele.ar
54 57212 michele.ar
CREATE TABLE users (
55
	email     text PRIMARY KEY,
56 57304 michele.ar
	valid     boolean DEFAULT true,
57 57253 michele.ar
	role      text NOT NULL default 'USER' REFERENCES user_roles(role)
58 57212 michele.ar
);
59 57099 michele.ar
60 57212 michele.ar
CREATE TABLE user_countries (
61
	email     text REFERENCES users(email),
62
	country   text  REFERENCES countries(val),
63
	PRIMARY KEY(email, country)
64
);
65
66 57304 michele.ar
CREATE SEQUENCE organizations_id_seq;
67
68 56326 michele.ar
CREATE TABLE organizations (
69 57304 michele.ar
    id                text PRIMARY KEY DEFAULT 'openorgs____::'||lpad(nextval('organizations_id_seq')::text,10,'0'),
70 56642 michele.ar
    name              text,
71 57304 michele.ar
   	type              text NOT NULL DEFAULT 'UNKNOWN' REFERENCES org_types(val),
72 56642 michele.ar
    lat               double precision,
73
	lng               double precision,
74
	city              text,
75 57099 michele.ar
	country           text REFERENCES countries(val),
76 56642 michele.ar
	created_by        text,
77
	creation_date     timestamp with time zone DEFAULT now(),
78
	modified_by       text,
79
	modification_date timestamp with time zone DEFAULT now()
80 56326 michele.ar
);
81 57304 michele.ar
CREATE INDEX organizations_type_idx ON organizations(type);
82
CREATE INDEX organizations_country_idx ON organizations(country);
83 56326 michele.ar
84
CREATE TABLE other_ids (
85 57304 michele.ar
	id      text REFERENCES organizations(id) ON UPDATE CASCADE,
86 56326 michele.ar
	otherid text,
87 57097 michele.ar
	type    text REFERENCES id_types(val),
88 56326 michele.ar
	PRIMARY KEY (id, otherid, type)
89
);
90 57304 michele.ar
CREATE INDEX other_ids_id_idx ON other_ids(id);
91 56326 michele.ar
92 56332 michele.ar
CREATE TABLE other_names (
93 57304 michele.ar
	id    text REFERENCES organizations(id) ON UPDATE CASCADE,
94 56332 michele.ar
	name  text,
95 57099 michele.ar
	lang  text REFERENCES languages(val),
96 56332 michele.ar
	PRIMARY KEY (id, name, lang)
97 56326 michele.ar
);
98 57304 michele.ar
CREATE INDEX other_names_id_idx ON other_names(id);
99 56326 michele.ar
100 56332 michele.ar
CREATE TABLE acronyms (
101 57304 michele.ar
	id text  REFERENCES organizations(id) ON UPDATE CASCADE,
102 56332 michele.ar
	acronym text,
103
	PRIMARY KEY (id, acronym)
104
);
105 57304 michele.ar
CREATE INDEX acronyms_id_idx ON acronyms(id);
106 56332 michele.ar
107 56326 michele.ar
CREATE TABLE relationships (
108 57304 michele.ar
	id1     text REFERENCES organizations(id) ON UPDATE CASCADE,
109 57130 michele.ar
	reltype text,
110 57304 michele.ar
	id2     text REFERENCES organizations(id) ON UPDATE CASCADE,
111 56326 michele.ar
    PRIMARY KEY (id1, reltype, id2)
112
);
113 57304 michele.ar
CREATE INDEX relationships_id1_idx ON relationships(id1);
114
CREATE INDEX relationships_id2_idx ON relationships(id2);
115 56326 michele.ar
116
CREATE TABLE urls (
117 57304 michele.ar
	id  text REFERENCES organizations(id) ON UPDATE CASCADE,
118 56326 michele.ar
	url text,
119
	PRIMARY KEY (id, url)
120
);
121 57304 michele.ar
CREATE INDEX urls_id_idx ON urls(id);
122 56326 michele.ar
123 56503 michele.ar
CREATE TABLE openaire_simrels (
124 57304 michele.ar
	local_id         text REFERENCES organizations(id) ON UPDATE CASCADE,
125 57435 michele.ar
	oa_original_id   text NOT NULL,
126
	oa_name          text NOT NULL,
127 56503 michele.ar
	oa_acronym       text,
128
	oa_country       text,
129
	oa_url           text,
130
	oa_collectedfrom text,
131 57435 michele.ar
	reltype          text NOT NULL DEFAULT 'suggested',
132 57518 michele.ar
	PRIMARY KEY (local_id, oa_original_id)
133 56503 michele.ar
);
134 57304 michele.ar
CREATE INDEX openaire_simrels_local_id_idx ON openaire_simrels(local_id);
135 56503 michele.ar
136 56326 michele.ar
CREATE VIEW organizations_view AS SELECT
137
    org.id,
138
    org.name,
139 57289 michele.ar
    org.type,
140 56326 michele.ar
    org.lat,
141
	org.lng,
142
	org.city,
143
	org.country,
144 56672 michele.ar
	COALESCE(jsonb_agg(DISTINCT jsonb_build_object('id', oid.otherid, 'type', oid.type)) FILTER (WHERE oid.otherid IS NOT NULL), '[]') AS other_ids,
145
	COALESCE(jsonb_agg(DISTINCT jsonb_build_object('name', n.name, 'lang', n.lang))      FILTER (WHERE n.name      IS NOT NULL), '[]') AS other_names,
146
	COALESCE(jsonb_agg(DISTINCT a.acronym)                                               FILTER (WHERE a.acronym   IS NOT NULL), '[]') AS acronyms,
147
	COALESCE(jsonb_agg(DISTINCT u.url)                                                   FILTER (WHERE u.url       IS NOT NULL), '[]') AS urls
148 56326 michele.ar
FROM
149
    organizations org
150 56332 michele.ar
    LEFT OUTER JOIN other_ids oid    ON (org.id = oid.id)
151
    LEFT OUTER JOIN other_names n    ON (org.id = n.id)
152
    LEFT OUTER JOIN acronyms a       ON (org.id = a.id)
153
    LEFT OUTER JOIN urls u           ON (org.id = u.id)
154 56326 michele.ar
GROUP BY
155
    org.id,
156
    org.name,
157 57289 michele.ar
    org.type,
158 56326 michele.ar
    org.lat,
159
	org.lng,
160
	org.city,
161 57674 michele.ar
	org.country;
162
163
CREATE VIEW organizations_info_view AS SELECT
164
	org.id,
165 56642 michele.ar
	org.created_by,
166
	org.creation_date,
167
	org.modified_by,
168 57674 michele.ar
	org.modification_date,
169 57750 michele.ar
	count(DISTINCT r.id2)      as n_rels,
170
	count(DISTINCT e.oa_original_id) as n_enrichments,
171
	count(DISTINCT c.oa_original_id) as n_conflicts
172 57674 michele.ar
FROM organizations org
173 57750 michele.ar
	LEFT OUTER JOIN relationships r    ON (org.id = r.id1)
174 57674 michele.ar
	LEFT OUTER JOIN openaire_simrels e ON (org.id = e.local_id AND e.oa_original_id NOT LIKE 'openorgs____::%')
175
	LEFT OUTER JOIN openaire_simrels c ON (org.id = c.local_id AND c.oa_original_id LIKE 'openorgs____::%')
176
GROUP BY org.id;
177 56326 michele.ar
178 56360 michele.ar
CREATE VIEW organizations_simple_view AS SELECT
179
    org.id,
180
    org.name,
181 57289 michele.ar
    org.type,
182 56360 michele.ar
	org.city,
183
	org.country,
184 57289 michele.ar
	array_agg(DISTINCT a.acronym) FILTER (WHERE a.acronym IS NOT NULL) AS acronyms
185 56360 michele.ar
FROM
186
    organizations org
187 57269 michele.ar
    LEFT OUTER JOIN acronyms a ON (org.id = a.id)
188 56360 michele.ar
GROUP BY
189
    org.id,
190
    org.name,
191 57289 michele.ar
    org.type,
192 56360 michele.ar
	org.city,
193
	org.country;
194 57542 michele.ar
195
CREATE VIEW	users_view AS SELECT
196
	u.email,
197
	u.valid,
198
	u.role,
199 57596 michele.ar
	array_agg(uc.country) FILTER (WHERE uc.country IS NOT NULL) AS countries
200 57542 michele.ar
FROM
201
	users u
202
	LEFT OUTER JOIN user_countries uc ON (u.email = uc.email)
203
GROUP BY u.email, u.valid, u.role
204
ORDER BY u.email;
205
206 57670 michele.ar
CREATE VIEW conflicts_view AS SELECT
207 57607 michele.ar
    o1.id      AS id_1,
208
    o1.name    AS name_1,
209
    o1.type    AS type_1,
210
	o1.city    AS city_1,
211
	o1.country AS country_1,
212
    o2.id      AS id_2,
213
    o2.name    AS name_2,
214
    o2.type    AS type_2,
215
	o2.city    AS city_2,
216
	o2.country AS country_2
217
FROM
218
	openaire_simrels s
219
	LEFT OUTER JOIN organizations o1 ON (s.local_id = o1.id)
220
    LEFT OUTER JOIN organizations o2 ON (s.oa_original_id = o2.id)
221
WHERE
222
	s.oa_original_id LIKE 'openorgs____::%' AND o1.id IS NOT NULL AND O2.id IS NOT NULL;
223
224 57542 michele.ar
225 57607 michele.ar