Skip to content
Snippets Groups Projects
Commit 53ec8807 authored by Martin Mareš's avatar Martin Mareš
Browse files

DB: Založeny indexy

Nepřidával jsem je k tabulkám, které by měly být dost malé na to,
aby full scan byl rychlý.

Closes #28.
parent 5e7f4d88
No related branches found
No related tags found
No related merge requests found
......@@ -38,12 +38,14 @@ CREATE TABLE places (
-- 4 škola / soutěžní místo
parent int REFERENCES places(place_id), -- NULL pro root
name varchar(255) COLLATE "cs_CZ", -- oficiální jméno
code varchar(255) COLLATE "cs_CZ", -- zkratka pro zadávání
code varchar(255) UNIQUE COLLATE "cs_CZ", -- zkratka pro zadávání
type place_type NOT NULL,
nuts varchar(255) UNIQUE DEFAULT NULL, -- evropský NUTS/LAU kód regionu
note text NOT NULL DEFAULT '' -- uživatelská poznámka
);
CREATE INDEX places_parent_index ON places (parent);
-- Rekurzivní dotaz na nadřazené regiony:
-- WITH RECURSIVE parent_regions(parent, place_id) AS (
-- SELECT parent, place_id FROM places WHERE place_id=...
......@@ -132,6 +134,8 @@ CREATE TABLE participations (
PRIMARY KEY (user_id, contest_id)
);
CREATE INDEX participations_contest_id_index ON participations (contest_id, place_id);
-- Úloha
CREATE TABLE tasks (
task_id serial PRIMARY KEY,
......@@ -161,6 +165,9 @@ CREATE TABLE papers (
note text NOT NULL DEFAULT '' -- komentář uploadujícího
);
CREATE INDEX papers_for_task_index ON papers (for_task);
CREATE INDEX papers_for_user_index ON papers (for_user);
-- Odevzdané řešení
CREATE TABLE solutions (
task_id int NOT NULL REFERENCES tasks(task_id),
......@@ -171,6 +178,8 @@ CREATE TABLE solutions (
PRIMARY KEY (task_id, user_id)
);
CREATE INDEX solutions_user_id_index ON solutions (user_id);
-- Historie přidělování bodů
CREATE TABLE points_history (
points_history_id serial PRIMARY KEY,
......@@ -181,6 +190,8 @@ CREATE TABLE points_history (
points_at timestamp with time zone NOT NULL -- a kdy
);
CREATE INDEX points_history_index ON points_history (task_id, participant_id);
-- Organizátorská role
CREATE TYPE role_type AS ENUM (
'garant', -- celostátní garant (může být omezený na kategorii)
......@@ -225,6 +236,8 @@ CREATE TABLE log (
details jsonb NOT NULL -- detaily (závislé na typu)
);
CREATE INDEX log_type_id_index ON log (type, id);
-- Asynchronní úlohy
CREATE TYPE job_type AS ENUM (
......
......@@ -54,3 +54,12 @@ CREATE TABLE jobs (
in_file varchar(255) DEFAULT NULL,
out_file varchar(255) DEFAULT NULL
);
ALTER TABLE places ADD CONSTRAINT "places_code_key" UNIQUE (code);
CREATE INDEX places_parent_index ON places (parent);
CREATE INDEX participations_contest_id_index ON participations (contest_id, place_id);
CREATE INDEX papers_for_task_index ON papers (for_task);
CREATE INDEX papers_for_user_index ON papers (for_user);
CREATE INDEX solutions_user_id_index ON solutions (user_id);
CREATE INDEX points_history_index ON points_history (task_id, participant_id);
CREATE INDEX log_type_id_index ON log (type, id);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment