160 lines
4.4 KiB
SQL
160 lines
4.4 KiB
SQL
-- Удалить сперва таблицы, затем типы.
|
|
--DROP TYPE prog_lang;
|
|
--DROP TYPE prog_level;
|
|
|
|
|
|
CREATE TYPE prog_level AS ENUM (
|
|
'Нулевой',
|
|
'Начальный',
|
|
'Базовый',
|
|
'Средний',
|
|
'Продвинутый',
|
|
'Эксперт',
|
|
'Архитектор'
|
|
);
|
|
|
|
|
|
CREATE TYPE prog_lang AS ENUM (
|
|
'Go',
|
|
'Js',
|
|
'Ts',
|
|
'Python',
|
|
'Java',
|
|
'C++',
|
|
'C',
|
|
'PHP',
|
|
'SQL'
|
|
);
|
|
|
|
|
|
DROP TABLE "role_rules";
|
|
CREATE TABLE "role_rules" (
|
|
"id_roles" INTEGER NOT NULL,
|
|
"id_rules" INTEGER NOT NULL,
|
|
PRIMARY KEY ("id_roles", "id_rules")
|
|
);
|
|
|
|
|
|
DROP TABLE "rules";
|
|
CREATE TABLE "rules" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"id_rules" INTEGER,
|
|
"name" VARCHAR(255) NOT NULL,
|
|
"body" JSONB NOT NULL
|
|
);
|
|
|
|
|
|
DROP TABLE "role_account";
|
|
CREATE TABLE "role_account" (
|
|
"id_role" INTEGER NOT NULL,
|
|
"id_accont" INTEGER NOT NULL,
|
|
PRIMARY KEY ("id_role", "id_accont")
|
|
);
|
|
|
|
DROP TABLE "role";
|
|
CREATE TABLE "role" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" VARCHAR(255) NOT NULL
|
|
);
|
|
|
|
|
|
DROP TABLE "solution";
|
|
CREATE TABLE "solution" (
|
|
"id_tasks" INTEGER NOT NULL,
|
|
"id_students" INTEGER NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"status" INTEGER,
|
|
"dt_check" TIMESTAMP,
|
|
PRIMARY KEY ("id_tasks", "id_students")
|
|
);
|
|
|
|
|
|
DROP TABLE "task_for_student";
|
|
CREATE TABLE "task_for_student" (
|
|
"id_task" INTEGER NOT NULL,
|
|
"id_student" INTEGER NOT NULL,
|
|
"dt_of_delivery" DATE,
|
|
PRIMARY KEY ("id_task", "id_student")
|
|
);
|
|
|
|
|
|
|
|
DROP TABLE "task";
|
|
CREATE TABLE "task" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"id_category" INTEGER,
|
|
"id_profile" INTEGER,
|
|
"tp_level" PROG_LEVEL NOT NULL,
|
|
"tp_lang" PROG_LANG NOT NULL,
|
|
"name" VARCHAR(255),
|
|
"description" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"unit_test" TEXT NOT NULL,
|
|
"dt_create" TIMESTAMP
|
|
);
|
|
|
|
|
|
DROP TABLE "profile";
|
|
CREATE TABLE "profile" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"id_account" INTEGER NOT NULL,
|
|
"name" VARCHAR(100) NOT NULL,
|
|
"suname" VARCHAR(100) NOT NULL,
|
|
"git" VARCHAR(255) NOT NULL,
|
|
"dt_create" DATE
|
|
);
|
|
|
|
|
|
DROP TABLE "account";
|
|
CREATE TABLE "account" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"login" VARCHAR(50) NOT NULL,
|
|
"pswd" VARCHAR(255) NOT NULL,
|
|
"is_block" BOOLEAN NOT NULL,
|
|
"dt_create" DATE NOT NULL,
|
|
"token" VARCHAR(255),
|
|
"refresh" VARCHAR(255)
|
|
);
|
|
|
|
|
|
|
|
-- TABLE "role_rules"
|
|
-- DROP INDEX "idx_role_rules__id_rules";
|
|
CREATE INDEX "idx_role_rules__id_rules" ON "role_rules" ("id_rules");
|
|
ALTER TABLE "role_rules" ADD CONSTRAINT "fk_role_rules__id_roles" FOREIGN KEY ("id_roles") REFERENCES "role" ("id") ON DELETE CASCADE;
|
|
ALTER TABLE "role_rules" ADD CONSTRAINT "fk_role_rules__id_rules" FOREIGN KEY ("id_rules") REFERENCES "rules" ("id") ON DELETE CASCADE;
|
|
|
|
|
|
-- TABLE "profile"
|
|
-- DROP INDEX "idx_profile__id_account";
|
|
CREATE INDEX "idx_profile__id_account" ON "profile" ("id_account");
|
|
ALTER TABLE "profile" ADD CONSTRAINT "fk_profile__id_account" FOREIGN KEY ("id_account") REFERENCES "account" ("id");
|
|
|
|
|
|
-- TABLE "rules"
|
|
-- DROP INDEX "idx_rules__id_rules";
|
|
CREATE INDEX "idx_rules__id_rules" ON "rules" ("id_rules");
|
|
ALTER TABLE "rules" ADD CONSTRAINT "fk_rules__id_rules" FOREIGN KEY ("id_rules") REFERENCES "rules" ("id") ON DELETE SET NULL;
|
|
|
|
|
|
-- TABLE "task_for_student"
|
|
-- DROP INDEX "idx_task_for_student__id_student";
|
|
CREATE INDEX "idx_task_for_student__id_student" ON "task_for_student" ("id_student");
|
|
ALTER TABLE "task_for_student" ADD CONSTRAINT "fk_task_for_student__id_student" FOREIGN KEY ("id_student") REFERENCES "profile" ("id") ON DELETE CASCADE;
|
|
ALTER TABLE "task_for_student" ADD CONSTRAINT "fk_task_for_student__id_task" FOREIGN KEY ("id_task") REFERENCES "task" ("id") ON DELETE CASCADE;
|
|
|
|
|
|
-- TABLE "role_account"
|
|
-- DROP INDEX "idx_role_account__id_accont";
|
|
CREATE INDEX "idx_role_account__id_accont" ON "role_account" ("id_accont");
|
|
ALTER TABLE "role_account" ADD CONSTRAINT "fk_role_account__id_accont" FOREIGN KEY ("id_accont") REFERENCES "account" ("id") ON DELETE CASCADE;
|
|
ALTER TABLE "role_account" ADD CONSTRAINT "fk_role_account__id_role" FOREIGN KEY ("id_role") REFERENCES "role" ("id") ON DELETE CASCADE;
|
|
|
|
|
|
-- TABLE "solution"
|
|
-- DROP INDEX "idx_solution__id_students";
|
|
CREATE INDEX "idx_solution__id_students" ON "solution" ("id_students");
|
|
ALTER TABLE "solution" ADD CONSTRAINT "fk_solution__id_students" FOREIGN KEY ("id_students") REFERENCES "profile" ("id") ON DELETE CASCADE;
|
|
ALTER TABLE "solution" ADD CONSTRAINT "fk_solution__id_tasks" FOREIGN KEY ("id_tasks") REFERENCES "task" ("id") ON DELETE CASCADE;
|