| 1 | -- dml.sql
|
|---|
| 2 | -- Скрипта за пополнување на табелите со податоци.
|
|---|
| 3 |
|
|---|
| 4 | SET synchronous_commit = OFF;
|
|---|
| 5 |
|
|---|
| 6 | INSERT INTO Regions (name) VALUES
|
|---|
| 7 | ('Скопски'), ('Пелагониски'), ('Вардарски'), ('Источен'),
|
|---|
| 8 | ('Североисточен'), ('Југозападен'), ('Полошки'), ('Југоисточен');
|
|---|
| 9 |
|
|---|
| 10 | INSERT INTO Site_Types (name) VALUES
|
|---|
| 11 | ('Антички локалитет'), ('Опсерваторија'),
|
|---|
| 12 | ('Средновековен локалитет'), ('Археолошки парк'),('Тумба (Неолитска населба)'),('Наколна населба'),
|
|---|
| 13 | ('Мегалитска опсерваторија'),('Антички град'),('Некропола'),('Римски терми'),('Аквадукт'),('Вила Рустика'),
|
|---|
| 14 | ('Тврдина (Кале)'),('Ранохристијанска базилика'),('Средновековен манастир'),('Антички рудник');
|
|---|
| 15 |
|
|---|
| 16 | INSERT INTO Protection_Status (name) VALUES
|
|---|
| 17 | ('Заштитен'), ('Делумно заштитен'), ('Незаштитен');
|
|---|
| 18 |
|
|---|
| 19 | INSERT INTO Roles (role_name) VALUES
|
|---|
| 20 | ('Admin'), ('Researcher'), ('Conservator'), ('Visitor');
|
|---|
| 21 |
|
|---|
| 22 | INSERT INTO Status_Types (status_name, type) VALUES
|
|---|
| 23 | ('Изложен', 'object'),
|
|---|
| 24 | ('Депониран', 'object'),
|
|---|
| 25 | ('На конзервација', 'object'),
|
|---|
| 26 | ('Објавено', 'publication'),
|
|---|
| 27 | ('Во подготовка', 'publication'),
|
|---|
| 28 | ('Одобрено', 'access'),
|
|---|
| 29 | ('Во обработка', 'access'),
|
|---|
| 30 | ('Одбиено', 'access');
|
|---|
| 31 |
|
|---|
| 32 | INSERT INTO Materials (name) VALUES
|
|---|
| 33 | ('Керамика'), ('Бронза'), ('Железо'),
|
|---|
| 34 | ('Камен'), ('Стакло'), ('Злато'),
|
|---|
| 35 | ('Сребро'), ('Коска'), ('Дрво');
|
|---|
| 36 |
|
|---|
| 37 | UPDATE Materials
|
|---|
| 38 | SET description_materials = CASE
|
|---|
| 39 | WHEN material_id % 4 = 0 THEN 'Природен материјал со широка употреба во изработка на предмети.'
|
|---|
| 40 | WHEN material_id % 4 = 1 THEN 'Често користен материјал во традиционални и модерни техники.'
|
|---|
| 41 | WHEN material_id % 4 = 2 THEN 'Материјал со специфични физички и хемиски својства.'
|
|---|
| 42 | ELSE 'Историски значаен материјал со културна вредност.'
|
|---|
| 43 | END;
|
|---|
| 44 |
|
|---|
| 45 | INSERT INTO Categories (name, description_category) VALUES
|
|---|
| 46 | ('Орудија и оружје', 'Предмети користени за работа, лов и војување, изработени од камен, коска или метал.'),
|
|---|
| 47 | ('Накит', 'Декоративни предмети (фибули, обетки, прстени) изработени од злато, сребро, бронза или стакло.'),
|
|---|
| 48 | ('Садови и керамика', 'Предмети за секојдневна употреба, складирање храна (амфори, питоси) и обредни цели.'),
|
|---|
| 49 | ('Монети', 'Метални парични единици од различни периоди (пајонски, македонски, римски, византиски).'),
|
|---|
| 50 | ('Скулптури и пластика', 'Уметнички дела од мермер, камен или бронза, вклучувајќи статуи, бисти и релјефи.'),
|
|---|
| 51 | ('Теракотни предмети', 'Предмети од печена земја, вклучувајќи ги уникатните Винички икони и фигурини.'),
|
|---|
| 52 | ('Епиграфски споменици', 'Камени натписи, надгробни стели и почесни плочи со историски записи.'),
|
|---|
| 53 | ('Мозаици', 'Подни и ѕидни декорации изработени од мали камчиња (тесери), карактеристични за базиликите.'),
|
|---|
| 54 | ('Архитектонски елементи', 'Делови од градби како капители, столбови и мермерни прагови.'),
|
|---|
| 55 | ('Опрема за секојдневие', 'Светилки (луцерни), коскени игли, огледала и други предмети за домаќинството.');
|
|---|
| 56 |
|
|---|
| 57 | INSERT INTO Municipalities (name) VALUES
|
|---|
| 58 | ('Скопје'), ('Битола'), ('Охрид'), ('Виница'),('Штип'),('Кавадарци'),('Прилеп'), ('Гевгелија'), ('Струмица'), ('Куманово');
|
|---|
| 59 |
|
|---|
| 60 | INSERT INTO Institutions (name, address,city) VALUES
|
|---|
| 61 | ('Археолошки музеј на Македонија', 'Кеј Димитар Влахов бб', 'Скопје'),
|
|---|
| 62 | ('Музеј на Македонија', 'Куршумли Ан бб', 'Скопје'), -- Ова е националниот музеј во Старата Чаршија
|
|---|
| 63 | ('Музеј на град Скопје', 'Улица Македонија бб', 'Скопје'),
|
|---|
| 64 | ('Меморијален центар на Холокаустот на Евреите од Македонија', 'Улица Тетовска бб', 'Скопје'),
|
|---|
| 65 | ('Природонаучен музеј на Македонија', 'Булевар Илинден 86', 'Скопје'),
|
|---|
| 66 |
|
|---|
| 67 | ('НУ Завод и музеј Битола', 'Улица Климент Охридски бб', 'Битола'),
|
|---|
| 68 | ('НУ Завод и музеј Прилеп', 'Улица Александар Македонски 142', 'Прилеп'),
|
|---|
| 69 | ('НУ Завод и музеј Охрид', 'Улица Цар Самоил 62', 'Охрид'), -- Куќата на Робевци
|
|---|
| 70 | ('Национален парк Галичица - Музејски центар', 'Улица Наум Охридски 124', 'Охрид'),
|
|---|
| 71 | ('НУ Завод и музеј Струга', 'Улица Партизанска бб', 'Струга'),
|
|---|
| 72 |
|
|---|
| 73 | ('НУ Завод и музеј Струмица', 'Улица 27-ми Март бб', 'Струмица'),
|
|---|
| 74 | ('НУ Завод и музеј Штип', 'Улица Тошо Арсов 10', 'Штип'),
|
|---|
| 75 | ('Народен музеј Велес', 'Улица 8-ми Септември бб', 'Велес'),
|
|---|
| 76 | ('НУ Музеј на град Гевгелија', 'Улица Маршал Тито бб', 'Гевгелија'),
|
|---|
| 77 | ('НУ Музеј Радовиш', 'Улица 22-ри Октомври бб', 'Радовиш'),
|
|---|
| 78 | ('НУ Музеј на град Кочани', 'Улица Маршал Тито бб', 'Кочани'),
|
|---|
| 79 |
|
|---|
| 80 | ('НУ Музеј Куманово', 'Улица 11-ти Октомври бб', 'Куманово'),
|
|---|
| 81 | ('Музеј на Тетовскиот крај', 'Улица Иво Лола Рибар бб', 'Тетово'),
|
|---|
| 82 | ('Музеј на град Кратово', 'Улица Гоце Делчев бб', 'Кратово'),
|
|---|
| 83 | ('Музеј "Западна Македонија во НОВ"', 'Улица Ослободување бб', 'Кичево'),
|
|---|
| 84 | ('Музеј на град Дебар', 'Улица 8-ми Септември бб', 'Дебар');
|
|---|
| 85 |
|
|---|
| 86 | WITH first_names AS (
|
|---|
| 87 | SELECT ARRAY['Ivan','Ana','Marko','Elena','Stefan','Marija'] AS fn_arr
|
|---|
| 88 | ),
|
|---|
| 89 | last_names AS (
|
|---|
| 90 | SELECT ARRAY['Petrov','Stojanovska','Trajkov','Dimitrova','Nikolov','Ivanova'] AS ln_arr
|
|---|
| 91 | )
|
|---|
| 92 | INSERT INTO Users (username, full_name, email, password_hash, role_id)
|
|---|
| 93 | SELECT
|
|---|
| 94 | 'user_' || i,
|
|---|
| 95 | fn_arr[ceil(random()*array_length(fn_arr,1))] || ' ' ||
|
|---|
| 96 | ln_arr[ceil(random()*array_length(ln_arr,1))],
|
|---|
| 97 | 'user' || i || '@mail.com',
|
|---|
| 98 | 'pass',
|
|---|
| 99 | floor(random()*4 + 1)
|
|---|
| 100 | FROM generate_series(1, 2000) s(i), first_names, last_names;
|
|---|
| 101 |
|
|---|
| 102 | INSERT INTO User_Details (user_id,institution_id,specialization)
|
|---|
| 103 | SELECT
|
|---|
| 104 | user_id,
|
|---|
| 105 | floor(random()*21+1),
|
|---|
| 106 | CASE floor(random()*7)
|
|---|
| 107 | WHEN 0 THEN 'Aрхеологија'
|
|---|
| 108 | WHEN 1 THEN 'Конзервација'
|
|---|
| 109 | WHEN 2 THEN 'Нумизматика'
|
|---|
| 110 | WHEN 3 THEN 'Етнологија'
|
|---|
| 111 | WHEN 4 THEN 'Историја на уметност'
|
|---|
| 112 | WHEN 5 THEN 'Подводна археологија'
|
|---|
| 113 | WHEN 6 THEN 'Емиграфика'
|
|---|
| 114 | END
|
|---|
| 115 | FROM Users u
|
|---|
| 116 | JOIN Roles r ON u.role_id=r.role_id
|
|---|
| 117 | WHERE r.role_name != 'Visitor';
|
|---|
| 118 |
|
|---|
| 119 | INSERT INTO Sites(site_name,site_type_id,region_id,
|
|---|
| 120 | protection_status_id,latitude,longitude,altitude,discovery_year,
|
|---|
| 121 | description,municipality_id,is_active,created_at)
|
|---|
| 122 | SELECT
|
|---|
| 123 | s.name || ' - ' || s.loc,
|
|---|
| 124 | s.type_id,
|
|---|
| 125 | floor(random()*8+1),
|
|---|
| 126 | floor(random()*3+1),
|
|---|
| 127 | 40.8+(random()*1.5),
|
|---|
| 128 | 20.5+(random()*2.5),
|
|---|
| 129 | (150+(random()*1100))::int,
|
|---|
| 130 | 1850+(random()*175)::int,
|
|---|
| 131 |
|
|---|
| 132 | CASE
|
|---|
| 133 | WHEN s.name IN ('Градиште', 'Кале', 'Кула') THEN
|
|---|
| 134 | 'Стратешко утврдување со остатоци од дефанзивни ѕидови и кули, датира од ' ||
|
|---|
| 135 | (ARRAY['антиката', 'доцната антика', 'средниот век'])[floor(random()*3+1)] || '.'
|
|---|
| 136 | WHEN s.name IN ('Тумба', 'Могила') THEN
|
|---|
| 137 | 'Повеќеслојна праисториска населба со богат инвентар на керамички наоди и остатоци од ' ||
|
|---|
| 138 | (ARRAY['неолитски', 'енеолитски', 'бронзени'])[floor(random()*2+1)]
|
|---|
| 139 | ELSE
|
|---|
| 140 | 'Археолошки комплекс со значајни архитектонски остатоци и фрагментирана подвижна керамика.'
|
|---|
| 141 | END,
|
|---|
| 142 |
|
|---|
| 143 | floor(random()*10+1),
|
|---|
| 144 | (random()>0.1),
|
|---|
| 145 | NOW()-(random()*interval '500 days')
|
|---|
| 146 |
|
|---|
| 147 | FROM(
|
|---|
| 148 | SELECT
|
|---|
| 149 | s.i,
|
|---|
| 150 | (ARRAY['Градиште', 'Тумба', 'Кале', 'Црквиште', 'Висока', 'Могила', 'Бања', 'Манастир', 'Чука', 'Кула'])
|
|---|
| 151 | [floor(random()*10+1)] as name,
|
|---|
| 152 | (ARRAY['с. Злокуќани', 'с. Моноспитово', 'с. Таор', 'с. Кожле', 'Битола', 'Прилеп', 'с. Возарци', 'с. Радолишта', 'с. Вевчани', 'с. Смолани'])
|
|---|
| 153 | [floor(random()*10+1)] || ' (' || s.i || ')' as loc,
|
|---|
| 154 | floor(random()*4+1) as type_id
|
|---|
| 155 | FROM generate_series(1,6000) s(i)
|
|---|
| 156 | )s;
|
|---|
| 157 |
|
|---|
| 158 | INSERT INTO Objects (
|
|---|
| 159 | inventory_number, title, current_status_id, site_id,
|
|---|
| 160 | creation_year, acquisition_date, found_by_user_id, description
|
|---|
| 161 | )
|
|---|
| 162 | SELECT
|
|---|
| 163 | 'INV-' || i,
|
|---|
| 164 | CASE
|
|---|
| 165 | WHEN random() < 0.3 THEN 'Керамички сад'
|
|---|
| 166 | WHEN random() < 0.6 THEN 'Бронзен предмет'
|
|---|
| 167 | WHEN random() < 0.8 THEN 'Монета'
|
|---|
| 168 | ELSE 'Фрагмент'
|
|---|
| 169 | END,
|
|---|
| 170 | (SELECT status_id FROM Status_Types WHERE type = 'object' LIMIT 1),
|
|---|
| 171 | floor(random() * 6000 + 1),
|
|---|
| 172 | (random() * 2000 + 1)::int,
|
|---|
| 173 | NOW() - (random() * interval '95 years'),
|
|---|
| 174 | floor(random() * 2000 + 1),
|
|---|
| 175 | (ARRAY[
|
|---|
| 176 | 'Одлично зачуван примерок.',
|
|---|
| 177 | 'Потребна е итна конзервација.',
|
|---|
| 178 | 'Видливи траги од горење.',
|
|---|
| 179 | 'Пронајден во станбен објект.',
|
|---|
| 180 | 'Специфична декорација.',
|
|---|
| 181 | NULL
|
|---|
| 182 | ])[floor(random() * 6 + 1)]
|
|---|
| 183 | FROM generate_series(1, 2000000) AS i;
|
|---|
| 184 |
|
|---|
| 185 | INSERT INTO Fragments (
|
|---|
| 186 | description, site_id, object_id, status_id, found_by_user_id, discovery_date, parent_fragment_id
|
|---|
| 187 | )
|
|---|
| 188 | SELECT
|
|---|
| 189 | CASE
|
|---|
| 190 | WHEN random() < 0.15 THEN 'Керамички фрагмент од сад'
|
|---|
| 191 | WHEN random() < 0.30 THEN 'Фрагмент од амфора'
|
|---|
| 192 | WHEN random() < 0.45 THEN 'Бронзен украсен дел'
|
|---|
| 193 | WHEN random() < 0.60 THEN 'Фрагмент од монета'
|
|---|
| 194 | WHEN random() < 0.75 THEN 'Камен архитектонски дел'
|
|---|
| 195 | WHEN random() < 0.90 THEN 'Фрагмент од римска керамика'
|
|---|
| 196 | ELSE 'Фрагмент од алат од железно време'
|
|---|
| 197 | END,
|
|---|
| 198 | st_site.ids[floor(random() * array_length(st_site.ids, 1) + 1)],
|
|---|
| 199 | st_object.ids[floor(random() * array_length(st_object.ids, 1) + 1)],
|
|---|
| 200 | st_status.ids[floor(random() * array_length(st_status.ids, 1) + 1)],
|
|---|
| 201 | st_user.ids[floor(random() * array_length(st_user.ids, 1) + 1)],
|
|---|
| 202 | NOW() - (floor(random() * 2000) * interval '1 day'),
|
|---|
| 203 | NULL
|
|---|
| 204 | FROM generate_series(1, 500000)
|
|---|
| 205 | CROSS JOIN (SELECT array_agg(site_id) AS ids FROM Sites) st_site
|
|---|
| 206 | CROSS JOIN (SELECT array_agg(object_id) AS ids FROM Objects) st_object
|
|---|
| 207 | CROSS JOIN (SELECT array_agg(status_id) AS ids FROM Status_Types WHERE type='object') st_status
|
|---|
| 208 | CROSS JOIN (SELECT array_agg(user_id) AS ids FROM Users) st_user;
|
|---|
| 209 |
|
|---|
| 210 | INSERT INTO Fragments (description, site_id, object_id, status_id, found_by_user_id, discovery_date, parent_fragment_id)
|
|---|
| 211 | SELECT
|
|---|
| 212 | 'Под-фрагмент',
|
|---|
| 213 | st_sites.ids[floor(random()*array_length(st_sites.ids,1)+1)],
|
|---|
| 214 | NULL,
|
|---|
| 215 | st_status.ids[floor(random()*array_length(st_status.ids,1)+1)],
|
|---|
| 216 | st_user.ids[floor(random()*array_length(st_user.ids,1)+1)],
|
|---|
| 217 | NOW() - (random()*500)*interval '1 day',
|
|---|
| 218 | st_parents.ids[floor(random()*array_length(st_parents.ids,1)+1)]
|
|---|
| 219 | FROM generate_series(1, 500000)
|
|---|
| 220 | CROSS JOIN (SELECT array_agg(fragment_id) as ids FROM (SELECT fragment_id FROM Fragments LIMIT 200000) p) st_parents
|
|---|
| 221 | CROSS JOIN (SELECT array_agg(site_id) as ids FROM Sites) st_sites
|
|---|
| 222 | CROSS JOIN (SELECT array_agg(status_id) as ids FROM Status_Types) st_status
|
|---|
| 223 | CROSS JOIN (SELECT array_agg(user_id) as ids FROM Users) st_user;
|
|---|
| 224 |
|
|---|
| 225 | INSERT INTO Fragments (description, site_id, object_id, status_id, found_by_user_id, discovery_date, parent_fragment_id)
|
|---|
| 226 | SELECT
|
|---|
| 227 | case
|
|---|
| 228 | WHEN random() < 0.15 THEN 'Генерален фрагмент'
|
|---|
| 229 | WHEN random() < 0.30 THEN 'Фрагмент од амфора'
|
|---|
| 230 | WHEN random() < 0.45 THEN 'Генерален фрагмент'
|
|---|
| 231 | WHEN random() < 0.60 THEN 'Фрагмент од монета'
|
|---|
| 232 | WHEN random() < 0.75 THEN 'Генерален фрагмент'
|
|---|
| 233 | WHEN random() < 0.90 THEN 'Фрагмент од римска керамика'
|
|---|
| 234 | end,
|
|---|
| 235 | st_sites.ids[floor(random()*array_length(st_sites.ids,1)+1)],
|
|---|
| 236 | CASE WHEN random() < 0.8 THEN st_objects.ids[floor(random()*array_length(st_objects.ids,1)+1)] ELSE NULL END,
|
|---|
| 237 | st_status.ids[floor(random()*array_length(st_status.ids,1)+1)],
|
|---|
| 238 | st_user.ids[floor(random()*array_length(st_user.ids,1)+1)],
|
|---|
| 239 | NOW() - (random()*1000)*interval '1 day',
|
|---|
| 240 | NULL
|
|---|
| 241 | FROM generate_series(1, 500000)
|
|---|
| 242 | CROSS JOIN (SELECT array_agg(site_id) as ids FROM Sites) st_sites
|
|---|
| 243 | CROSS JOIN (SELECT array_agg(object_id) as ids FROM Objects) st_objects
|
|---|
| 244 | CROSS JOIN (SELECT array_agg(status_id) as ids FROM Status_Types) st_status
|
|---|
| 245 | CROSS JOIN (SELECT array_agg(user_id) as ids FROM Users) st_user;
|
|---|
| 246 |
|
|---|
| 247 | INSERT INTO Authors (full_name)
|
|---|
| 248 | SELECT
|
|---|
| 249 | first_names.name || ' ' || last_names.surname
|
|---|
| 250 | FROM
|
|---|
| 251 | (SELECT unnest(ARRAY[
|
|---|
| 252 | 'Иван','Петар','Гоце','Марко','Никола','Александар',
|
|---|
| 253 | 'Елена','Марија','Даниела','Снежана','Тамара','Кристина',
|
|---|
| 254 | 'Влатко','Бојан','Љупчо','Стефан','Зоран','Кирил'
|
|---|
| 255 | ]) AS name) first_names,
|
|---|
| 256 |
|
|---|
| 257 | (SELECT unnest(ARRAY[
|
|---|
| 258 | 'Микулчиќ','Кузман','Манев','Алексов','Стојанов','Петров',
|
|---|
| 259 | 'Илиев','Георгиев','Марков','Тодоров','Димитров','Павлов',
|
|---|
| 260 | 'Костов','Ристов','Наумов','Спасов','Стојков','Цветков'
|
|---|
| 261 | ]) AS surname) last_names,
|
|---|
| 262 |
|
|---|
| 263 | generate_series(1, 50000) g(i)
|
|---|
| 264 | LIMIT 50000;
|
|---|
| 265 |
|
|---|
| 266 | INSERT INTO Publications (
|
|---|
| 267 | request_date,
|
|---|
| 268 | main_author_id,
|
|---|
| 269 | title,
|
|---|
| 270 | status_id,
|
|---|
| 271 | publisher_location
|
|---|
| 272 | )
|
|---|
| 273 | SELECT
|
|---|
| 274 | CURRENT_DATE - (random()*3000)::int,
|
|---|
| 275 |
|
|---|
| 276 | st_author.ids[floor(random()*array_length(st_author.ids,1)+1)],
|
|---|
| 277 | CASE
|
|---|
| 278 | WHEN random() < 0.2 THEN 'Археолошки истражувања во Вардарска долина'
|
|---|
| 279 | WHEN random() < 0.4 THEN 'Римски период на Балканот: анализа на наоди'
|
|---|
| 280 | WHEN random() < 0.6 THEN 'Средновековни утврдувања во Македонија'
|
|---|
| 281 | WHEN random() < 0.8 THEN 'Културно наследство на античка Македонија'
|
|---|
| 282 | ELSE 'Конзервација и реставрација на археолошки објекти'
|
|---|
| 283 | END,
|
|---|
| 284 | st_status.ids[floor(random()*array_length(st_status.ids,1)+1)],
|
|---|
| 285 | CASE
|
|---|
| 286 | WHEN random() < 0.3 THEN 'Skopje'
|
|---|
| 287 | WHEN random() < 0.5 THEN 'Bitola'
|
|---|
| 288 | WHEN random() < 0.7 THEN 'Ohrid'
|
|---|
| 289 | ELSE 'Strumica'
|
|---|
| 290 | END
|
|---|
| 291 | FROM generate_series(1, 500000)
|
|---|
| 292 | CROSS JOIN(SELECT array_agg(author_id) as ids FROM Authors)st_author
|
|---|
| 293 | CROSS JOIN(SELECT array_agg(status_id) as ids FROM Status_Types)st_status;
|
|---|
| 294 |
|
|---|
| 295 | INSERT INTO Culture (name, origin_region_id, description, period_from_year, period_to_year)
|
|---|
| 296 | VALUES
|
|---|
| 297 | -- PRAISTORIJA
|
|---|
| 298 | ('Палеолитска култура', 1, 'Рани човечки заедници и ловци-собирачи', -100000, -10000),
|
|---|
| 299 | ('Неолитска култура', 1, 'Први земјоделски заедници и села', -7000, -3000),
|
|---|
| 300 | ('Бронзено време', 2, 'Развој на металургија и племенски општества', -3000, -1200),
|
|---|
| 301 | ('Железно време', 3, 'Племенски култури пред антика', -1200, -500),
|
|---|
| 302 |
|
|---|
| 303 | -- ANTIKA
|
|---|
| 304 | ('Пајонска култура', 4, 'Античко племе во регионот на Вардар', -1000, -200),
|
|---|
| 305 | ('Античка македонска култура', 1, 'Кралството на Македонија', -800, -168),
|
|---|
| 306 | ('Хеленистичка култура', 1, 'Период по Александар Велики', -323, -31),
|
|---|
| 307 |
|
|---|
| 308 | -- RIMSKI PERIOD
|
|---|
| 309 | ('Римска провинциска култура', 2, 'Римска администрација и урбан развој', -168, 300),
|
|---|
| 310 | ('Доцноримска култура', 3, 'Криза и трансформација на Римската империја', 300, 600),
|
|---|
| 311 |
|
|---|
| 312 | -- VIZANTIJA
|
|---|
| 313 | ('Рановизантиска култура', 4, 'Рано христијанство и византиска уметност', 330, 800),
|
|---|
| 314 | ('Средновизантиска култура', 5, 'Развој на црква и феудализам', 800, 1200),
|
|---|
| 315 | ('Доцновизантиска култура', 5, 'Ослабување на Византија', 1200, 1453),
|
|---|
| 316 |
|
|---|
| 317 | -- SREDEN VEK
|
|---|
| 318 | ('Словенска култура', 6, 'Доаѓање на словенските племиња', 600, 1000),
|
|---|
| 319 | ('Средновековна балканска култура', 6, 'Феудални држави на Балканот', 1000, 1400),
|
|---|
| 320 |
|
|---|
| 321 | -- OSMANSKI PERIOD
|
|---|
| 322 | ('Османлиска култура', 7, 'Османлиско владеење на Балканот', 1400, 1912),
|
|---|
| 323 |
|
|---|
| 324 | -- MODERNO
|
|---|
| 325 | ('Современа култура', 8, 'Модерен период по ослободувањето', 1912, 2020);
|
|---|
| 326 |
|
|---|
| 327 | WITH obj AS (
|
|---|
| 328 | SELECT object_id FROM Objects
|
|---|
| 329 | ),
|
|---|
| 330 | mat AS (
|
|---|
| 331 | SELECT material_id FROM Materials
|
|---|
| 332 | ),
|
|---|
| 333 | pairs AS (
|
|---|
| 334 | SELECT
|
|---|
| 335 | obj.object_id,
|
|---|
| 336 | mat.material_id,
|
|---|
| 337 | row_number() OVER () AS rn
|
|---|
| 338 | FROM obj
|
|---|
| 339 | CROSS JOIN mat
|
|---|
| 340 | )
|
|---|
| 341 |
|
|---|
| 342 | INSERT INTO Materials_Objects (object_id, material_id)
|
|---|
| 343 | SELECT
|
|---|
| 344 | st_object_id.ids[floor(random()*array_length(st_object_id.ids,1)+1)],
|
|---|
| 345 | st_material_id.ids[floor(random()*array_length(st_material_id.ids,1)+1)]
|
|---|
| 346 | FROM generate_series(1,500000)
|
|---|
| 347 | CROSS JOIN(SELECT array_agg(object_id) as ids FROM Objects)st_object_id
|
|---|
| 348 | CROSS JOIN(SELECT array_agg(material_id) as ids FROM Materials)st_material_id
|
|---|
| 349 | on conflict do nothing;
|
|---|
| 350 |
|
|---|
| 351 | WITH obj AS (
|
|---|
| 352 | SELECT array_agg(object_id) AS oids FROM Objects
|
|---|
| 353 | ),
|
|---|
| 354 | inst AS (
|
|---|
| 355 | SELECT array_agg(institution_id) AS insts FROM Institutions
|
|---|
| 356 | )
|
|---|
| 357 |
|
|---|
| 358 | INSERT INTO Conservation_Projects (
|
|---|
| 359 | project_name,
|
|---|
| 360 | start_date,
|
|---|
| 361 | end_date,
|
|---|
| 362 | budget,
|
|---|
| 363 | description_project,
|
|---|
| 364 | institution_id,
|
|---|
| 365 | object_id
|
|---|
| 366 | )
|
|---|
| 367 | SELECT
|
|---|
| 368 | name || ' ' || i,
|
|---|
| 369 | t.start_d,
|
|---|
| 370 | t.start_d + (1 + floor(random()*1000)) * interval '1 day',
|
|---|
| 371 | (1000 + random()*99000)::numeric(10,2),
|
|---|
| 372 | name || ' - детално истражување и конзервација на артефактот.',
|
|---|
| 373 | inst.insts[1 + floor(random()*array_length(inst.insts,1))::int],
|
|---|
| 374 | obj.oids[1 + floor(random()*array_length(obj.oids,1))::int]
|
|---|
| 375 |
|
|---|
| 376 | FROM generate_series(1, 200000) i,
|
|---|
| 377 | obj, inst,
|
|---|
| 378 | LATERAL (
|
|---|
| 379 | SELECT
|
|---|
| 380 | CASE
|
|---|
| 381 | WHEN random() < 0.25 THEN 'Проект за конзервација на керамика'
|
|---|
| 382 | WHEN random() < 0.50 THEN 'Реставрација на антички објекти'
|
|---|
| 383 | WHEN random() < 0.75 THEN 'Археолошко истражување на локалитет'
|
|---|
| 384 | ELSE 'Дигитализација на културно наследство'
|
|---|
| 385 | END AS name,
|
|---|
| 386 | NOW() - (floor(random()*2000+i*0))*interval '30 days' AS start_d
|
|---|
| 387 | ) t;
|
|---|
| 388 |
|
|---|
| 389 | WITH obj AS (
|
|---|
| 390 | SELECT array_agg(object_id) AS oids FROM Objects
|
|---|
| 391 | )
|
|---|
| 392 | INSERT INTO Treatments (object_id, treatment_date,description)
|
|---|
| 393 | SELECT
|
|---|
| 394 | obj.oids[1 + floor(random()*array_length(obj.oids,1))::int],
|
|---|
| 395 | CURRENT_DATE - (floor(random()*1000))::int,
|
|---|
| 396 | CASE
|
|---|
| 397 | WHEN random() < 0.25 THEN 'Механичко чистење на површински наслоги и земја'
|
|---|
| 398 | WHEN random() < 0.40 THEN 'Хемиска стабилизација на кородирани метални делови'
|
|---|
| 399 | WHEN random() < 0.55 THEN 'Консолидација на кршлива керамика со паралоид B-72'
|
|---|
| 400 | WHEN random() < 0.70 THEN 'Превентивна десалинизација во дејонизирана вода'
|
|---|
| 401 | WHEN random() < 0.80 THEN 'Лепење на фрагменти со реверзибилен лепак'
|
|---|
| 402 | WHEN random() < 0.90 THEN 'Реставрација на недостатоци со гипс и ретуширање'
|
|---|
| 403 | ELSE 'Нанесување на заштитен микрокристален восок'
|
|---|
| 404 | END
|
|---|
| 405 | FROM obj, generate_series(1, 500000);
|
|---|
| 406 |
|
|---|
| 407 | WITH o AS (
|
|---|
| 408 | SELECT array_agg(object_id) AS oids FROM Objects
|
|---|
| 409 | ),
|
|---|
| 410 | s AS (
|
|---|
| 411 | SELECT array_agg(status_id) as ids FROM Status_Types WHERE type='object'
|
|---|
| 412 | )
|
|---|
| 413 | INSERT INTO Condition_Assessment (
|
|---|
| 414 | assessment_date,
|
|---|
| 415 | notes,
|
|---|
| 416 | object_id,
|
|---|
| 417 | status_id
|
|---|
| 418 | )
|
|---|
| 419 | SELECT
|
|---|
| 420 | CURRENT_DATE - (floor(random()*2000))::int,
|
|---|
| 421 | 'Condition note ' || i,
|
|---|
| 422 | o.oids[i],
|
|---|
| 423 | s.ids[floor(random()*array_length(s.ids,1)+1)]
|
|---|
| 424 | FROM o, s,
|
|---|
| 425 | generate_series(1, array_length((SELECT array_agg(object_id) FROM Objects),1)) i;
|
|---|
| 426 |
|
|---|
| 427 | INSERT INTO Treatment_Step_Log (
|
|---|
| 428 | treatment_id, step_number, step_description, observations,
|
|---|
| 429 | timestamp_performed, performed_by_user, researcher_access_id
|
|---|
| 430 | )
|
|---|
| 431 | SELECT
|
|---|
| 432 | st_treatment.ids[floor(random()*array_length(st_treatment.ids,1)+1)],
|
|---|
| 433 | floor(random()*5+1),
|
|---|
| 434 | (ARRAY['Инспекција', 'Чистење', 'Конзервација', 'Документација', 'Проверка'])[floor(random()*5+1)], -- Сигурен избор без NULL
|
|---|
| 435 | CASE WHEN random() < 0.5 THEN 'Процесот помина во најдобар ред.' ELSE 'Забележани ситни нечистотии.' END,
|
|---|
| 436 | NOW() - (random() * interval '30 days'),
|
|---|
| 437 | u.ids[floor(random() * array_length(u.ids, 1) + 1)],
|
|---|
| 438 | ra.ids[floor(random() * array_length(ra.ids, 1) + 1)]
|
|---|
| 439 | FROM generate_series(1, 7000000)
|
|---|
| 440 | CROSS JOIN (SELECT array_agg(user_id) AS ids FROM Users) u
|
|---|
| 441 | CROSS JOIN (SELECT array_agg(access_id) AS ids FROM Researcher_Access) ra
|
|---|
| 442 | CROSS JOIN (SELECT array_agg(treatment_id) AS ids FROM Treatments) st_treatment
|
|---|
| 443 | on conflict do nothing;
|
|---|
| 444 |
|
|---|
| 445 | WITH obj AS (
|
|---|
| 446 | SELECT array_agg(object_id) AS oids FROM Objects
|
|---|
| 447 | )
|
|---|
| 448 | INSERT INTO Object_Images (
|
|---|
| 449 | image_url,
|
|---|
| 450 | object_id,
|
|---|
| 451 | description,
|
|---|
| 452 | date_taken,
|
|---|
| 453 | is_primary
|
|---|
| 454 | )
|
|---|
| 455 | SELECT
|
|---|
| 456 | 'http://img/object_' || selected_id || '_' || i,
|
|---|
| 457 | selected_id,
|
|---|
| 458 | CASE
|
|---|
| 459 | WHEN i % 3 = 0 THEN 'Поглед од предна страна'
|
|---|
| 460 | WHEN i % 3 = 1 THEN 'Детален приказ на текстура'
|
|---|
| 461 | ELSE 'Профилна снимка на предметот'
|
|---|
| 462 | END,
|
|---|
| 463 | CURRENT_DATE - (random() * 730)::int,
|
|---|
| 464 | (random() < 0.15)
|
|---|
| 465 | FROM (
|
|---|
| 466 | SELECT
|
|---|
| 467 | obj.oids[floor(random() * array_length(obj.oids, 1) + 1)] AS selected_id,
|
|---|
| 468 | i
|
|---|
| 469 | FROM obj, generate_series(1, 1000000) i
|
|---|
| 470 | ) subquery;
|
|---|
| 471 |
|
|---|
| 472 | INSERT INTO Researcher_Access (
|
|---|
| 473 | access_date,
|
|---|
| 474 | access_status_id,
|
|---|
| 475 | user_id,
|
|---|
| 476 | object_id,
|
|---|
| 477 | institution_id,
|
|---|
| 478 | conservation_project_id
|
|---|
| 479 | )
|
|---|
| 480 | SELECT
|
|---|
| 481 | CURRENT_DATE - (floor(random()*1200))::int,
|
|---|
| 482 | st_arr.ids[floor(random() * array_length(st_arr.ids, 1) + 1)],
|
|---|
| 483 | u_arr.ids[floor(random() * array_length(u_arr.ids, 1) + 1)],
|
|---|
| 484 | o_arr.ids[floor(random() * array_length(o_arr.ids, 1) + 1)],
|
|---|
| 485 | i_arr.ids[floor(random() * array_length(i_arr.ids, 1) + 1)],
|
|---|
| 486 | CASE
|
|---|
| 487 | WHEN random() < 0.6 THEN p_arr.ids[floor(random() * array_length(p_arr.ids, 1) + 1)]
|
|---|
| 488 | ELSE NULL
|
|---|
| 489 | END
|
|---|
| 490 | FROM
|
|---|
| 491 | (SELECT array_agg(status_id) AS ids FROM Status_Types WHERE type = 'access') st_arr,
|
|---|
| 492 | (SELECT array_agg(user_id) AS ids FROM Users) u_arr,
|
|---|
| 493 | (SELECT array_agg(object_id) AS ids FROM Objects) o_arr,
|
|---|
| 494 | (SELECT array_agg(institution_id) AS ids FROM Institutions) i_arr,
|
|---|
| 495 | (SELECT array_agg(project_id) AS ids FROM Conservation_Projects) p_arr,
|
|---|
| 496 | generate_series(1, 500000) AS s;
|
|---|
| 497 |
|
|---|
| 498 | INSERT INTO Exhibitions (start_date, end_date, name, location_institution_id)
|
|---|
| 499 | SELECT
|
|---|
| 500 | base_date,
|
|---|
| 501 | CASE
|
|---|
| 502 | WHEN random() < 0.7
|
|---|
| 503 | THEN base_date + (floor(random()*1500))::int
|
|---|
| 504 | ELSE NULL
|
|---|
| 505 | END,
|
|---|
| 506 | CASE (i % 8)
|
|---|
| 507 | WHEN 0 THEN 'Праисториска Македонија'
|
|---|
| 508 | WHEN 1 THEN 'Античка Македонија'
|
|---|
| 509 | WHEN 2 THEN 'Римски период'
|
|---|
| 510 | WHEN 3 THEN 'Византија'
|
|---|
| 511 | WHEN 4 THEN 'Среден век'
|
|---|
| 512 | WHEN 5 THEN 'Османлиски период'
|
|---|
| 513 | WHEN 6 THEN 'Археологија'
|
|---|
| 514 | ELSE 'Модерна уметност'
|
|---|
| 515 | END || ' - Изложба ' || i,
|
|---|
| 516 | inst_arr.ids[floor(random() * array_length(inst_arr.ids, 1) + 1)]
|
|---|
| 517 | FROM generate_series(1, 5000) i
|
|---|
| 518 | CROSS JOIN (
|
|---|
| 519 | SELECT array_agg(institution_id) AS ids FROM Institutions
|
|---|
| 520 | ) inst_arr
|
|---|
| 521 | CROSS JOIN LATERAL (
|
|---|
| 522 | SELECT CURRENT_DATE - (floor(random()*4000+i*0))::int AS base_date
|
|---|
| 523 | ) d;
|
|---|
| 524 |
|
|---|
| 525 | INSERT INTO Exhibition_Object_Details (
|
|---|
| 526 | display_title,
|
|---|
| 527 | exhibition_description,
|
|---|
| 528 | language,
|
|---|
| 529 | object_id,
|
|---|
| 530 | exhibition_id
|
|---|
| 531 | )
|
|---|
| 532 | SELECT
|
|---|
| 533 | 'Објект во изложба ' || gs,
|
|---|
| 534 |
|
|---|
| 535 | CASE
|
|---|
| 536 | WHEN random() < 0.3 THEN 'Археолошки наод'
|
|---|
| 537 | WHEN random() < 0.6 THEN 'Музејски предмет'
|
|---|
| 538 | ELSE 'Културно наследство'
|
|---|
| 539 | END,
|
|---|
| 540 |
|
|---|
| 541 | CASE WHEN random() < 0.5 THEN 'mk' ELSE 'en' END,
|
|---|
| 542 |
|
|---|
| 543 | o.object_id,
|
|---|
| 544 | e.exhibition_id
|
|---|
| 545 |
|
|---|
| 546 | FROM generate_series(1, 10000) gs
|
|---|
| 547 |
|
|---|
| 548 | JOIN LATERAL (
|
|---|
| 549 | SELECT object_id
|
|---|
| 550 | FROM Objects
|
|---|
| 551 | ORDER BY object_id
|
|---|
| 552 | OFFSET (gs % (SELECT COUNT(*) FROM Objects))
|
|---|
| 553 | LIMIT 1
|
|---|
| 554 | ) o ON true
|
|---|
| 555 |
|
|---|
| 556 | JOIN LATERAL (
|
|---|
| 557 | SELECT exhibition_id
|
|---|
| 558 | FROM Exhibitions
|
|---|
| 559 | ORDER BY exhibition_id
|
|---|
| 560 | OFFSET (gs % (SELECT COUNT(*) FROM Exhibitions))
|
|---|
| 561 | LIMIT 1
|
|---|
| 562 | ) e ON true;
|
|---|
| 563 |
|
|---|
| 564 | INSERT INTO Object_Classification (
|
|---|
| 565 | object_id,
|
|---|
| 566 | category_id,
|
|---|
| 567 | culture_id,
|
|---|
| 568 | period_descr,
|
|---|
| 569 | style,
|
|---|
| 570 | iconography
|
|---|
| 571 | )
|
|---|
| 572 | SELECT
|
|---|
| 573 | o.object_id,
|
|---|
| 574 | cat.ids[floor(random() * array_length(cat.ids, 1) + 1)],
|
|---|
| 575 | cul.ids[floor(random() * array_length(cul.ids, 1) + 1)],
|
|---|
| 576 | (ARRAY['Ран неолит', 'Доцна антика', 'Среден век', 'Бронзено доба', 'Хеленистички период'])[floor(random() * 5 + 1)],
|
|---|
| 577 | (ARRAY['Доричен', 'Јонски', 'Византиски', 'Локален стил', 'Барок'])[floor(random() * 5 + 1)],
|
|---|
| 578 | (ARRAY['Религиозни мотиви', 'Геометриски фигури', 'Животински приказ', 'Растителни орнаменти'])[floor(random() * 4 + 1)]
|
|---|
| 579 | FROM Objects o
|
|---|
| 580 | CROSS JOIN (SELECT array_agg(category_id) AS ids FROM Categories) cat
|
|---|
| 581 | CROSS JOIN (SELECT array_agg(culture_id) AS ids FROM Culture) cul
|
|---|
| 582 | ON CONFLICT DO NOTHING;
|
|---|
| 583 |
|
|---|
| 584 | INSERT INTO Object_Exhibition (object_id, exhibition_id)
|
|---|
| 585 | SELECT
|
|---|
| 586 | o.object_id,
|
|---|
| 587 | ex.ids[floor(random() * array_length(ex.ids, 1) + 1)]
|
|---|
| 588 | FROM (
|
|---|
| 589 | SELECT object_id FROM Objects
|
|---|
| 590 | LIMIT 500000
|
|---|
| 591 | ) o
|
|---|
| 592 | CROSS JOIN (
|
|---|
| 593 | SELECT array_agg(exhibition_id) AS ids FROM Exhibitions
|
|---|
| 594 | ) ex
|
|---|
| 595 | ON CONFLICT DO NOTHING;
|
|---|
| 596 |
|
|---|
| 597 | INSERT INTO Object_Location_History (
|
|---|
| 598 | object_id,
|
|---|
| 599 | institution_id,
|
|---|
| 600 | start_date,
|
|---|
| 601 | end_date
|
|---|
| 602 | )
|
|---|
| 603 | SELECT
|
|---|
| 604 | o.object_id,
|
|---|
| 605 | inst.ids[floor(random() * array_length(inst.ids, 1) + 1)],
|
|---|
| 606 | start_d,
|
|---|
| 607 | CASE
|
|---|
| 608 | WHEN random() < 0.7
|
|---|
| 609 | THEN start_d + (random() * 500)::int
|
|---|
| 610 | ELSE NULL
|
|---|
| 611 | END
|
|---|
| 612 | FROM (
|
|---|
| 613 | SELECT
|
|---|
| 614 | object_id,
|
|---|
| 615 | CURRENT_DATE - (random() * 3000)::int AS start_d
|
|---|
| 616 | FROM Objects
|
|---|
| 617 | ) o
|
|---|
| 618 | CROSS JOIN (
|
|---|
| 619 | SELECT array_agg(institution_id) AS ids FROM Institutions
|
|---|
| 620 | ) inst
|
|---|
| 621 | ON CONFLICT DO NOTHING;
|
|---|
| 622 |
|
|---|
| 623 | INSERT INTO Object_Publication (
|
|---|
| 624 | object_id,
|
|---|
| 625 | publication_id,
|
|---|
| 626 | page_reference,
|
|---|
| 627 | notes
|
|---|
| 628 | )
|
|---|
| 629 | SELECT
|
|---|
| 630 | o.object_id,
|
|---|
| 631 | p.ids[floor(random() * array_length(p.ids, 1) + 1)],
|
|---|
| 632 | 'p.' || floor(random() * 500 + 1)::text,
|
|---|
| 633 | 'Археолошка публикација'
|
|---|
| 634 | FROM (
|
|---|
| 635 | SELECT object_id FROM Objects LIMIT 200000
|
|---|
| 636 | ) o
|
|---|
| 637 | CROSS JOIN (
|
|---|
| 638 | SELECT array_agg(publication_id) AS ids FROM Publications
|
|---|
| 639 | ) p
|
|---|
| 640 | ON CONFLICT DO NOTHING;
|
|---|
| 641 |
|
|---|
| 642 | INSERT INTO Publication_Authors (publication_id, author_id)
|
|---|
| 643 | SELECT
|
|---|
| 644 | p.publication_id,
|
|---|
| 645 | a.ids[floor(random()*array_length(a.ids,1)+1)]
|
|---|
| 646 | FROM Publications p
|
|---|
| 647 | CROSS JOIN(SELECT array_agg(author_id) as ids FROM Authors)a
|
|---|
| 648 | LIMIT 200000;
|
|---|
| 649 |
|
|---|
| 650 | INSERT INTO Treatment_Materials (treatment_id, material_id)
|
|---|
| 651 | SELECT
|
|---|
| 652 | t.treatment_id,
|
|---|
| 653 | COALESCE(
|
|---|
| 654 | CASE
|
|---|
| 655 | WHEN o.title ILIKE '%керами%' OR o.title ILIKE '%сад%'
|
|---|
| 656 | THEN (SELECT material_id FROM Materials WHERE name = 'Керамика' LIMIT 1)
|
|---|
| 657 | WHEN o.title ILIKE '%бронз%' OR o.title ILIKE '%фибул%'
|
|---|
| 658 | THEN (SELECT material_id FROM Materials WHERE name = 'Бронза' LIMIT 1)
|
|---|
| 659 | WHEN o.title ILIKE '%желез%' OR o.title ILIKE '%меч%' OR o.title ILIKE '%нож%'
|
|---|
| 660 | THEN (SELECT material_id FROM Materials WHERE name = 'Железо' LIMIT 1)
|
|---|
| 661 | WHEN o.title ILIKE '%монета%' OR o.title ILIKE '%пари%'
|
|---|
| 662 | THEN (SELECT material_id FROM Materials WHERE name IN ('Сребро', 'Злато', 'Бронза') ORDER BY random() LIMIT 1)
|
|---|
| 663 | WHEN o.title ILIKE '%камен%' OR o.title ILIKE '%стату%'
|
|---|
| 664 | THEN (SELECT material_id FROM Materials WHERE name = 'Камен' LIMIT 1)
|
|---|
| 665 | END,
|
|---|
| 666 | m_list.ids[floor(random() * array_length(m_list.ids, 1) + 1)]
|
|---|
| 667 | )
|
|---|
| 668 | FROM (
|
|---|
| 669 | SELECT treatment_id, object_id FROM Treatments LIMIT 1000000
|
|---|
| 670 | ) t
|
|---|
| 671 | JOIN Objects o ON o.object_id = t.object_id
|
|---|
| 672 | CROSS JOIN (
|
|---|
| 673 | SELECT array_agg(material_id) AS ids FROM Materials
|
|---|
| 674 | ) m_list
|
|---|
| 675 | ON CONFLICT DO NOTHING;
|
|---|