284 lines
8.4 KiB
SQL
284 lines
8.4 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "UserSex" AS ENUM ('MALE', 'FEMALE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "Day" AS ENUM ('MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Admin" (
|
|
"id" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Admin_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Student" (
|
|
"id" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"surname" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"address" TEXT NOT NULL,
|
|
"img" TEXT,
|
|
"bloodType" TEXT NOT NULL,
|
|
"sex" "UserSex" NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"parentId" TEXT NOT NULL,
|
|
"classId" INTEGER NOT NULL,
|
|
"gradeId" INTEGER NOT NULL,
|
|
"birthday" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Student_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Teacher" (
|
|
"id" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"surname" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"address" TEXT NOT NULL,
|
|
"img" TEXT,
|
|
"bloodType" TEXT NOT NULL,
|
|
"sex" "UserSex" NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"birthday" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Teacher_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Parent" (
|
|
"id" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"surname" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT NOT NULL,
|
|
"address" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Parent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Grade" (
|
|
"id" SERIAL NOT NULL,
|
|
"level" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "Grade_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Class" (
|
|
"id" SERIAL NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"capacity" INTEGER NOT NULL,
|
|
"supervisorId" TEXT,
|
|
"gradeId" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "Class_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Subject" (
|
|
"id" SERIAL NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Subject_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Lesson" (
|
|
"id" SERIAL NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"day" "Day" NOT NULL,
|
|
"startTime" TIMESTAMP(3) NOT NULL,
|
|
"endTime" TIMESTAMP(3) NOT NULL,
|
|
"subjectId" INTEGER NOT NULL,
|
|
"classId" INTEGER NOT NULL,
|
|
"teacherId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Lesson_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Exam" (
|
|
"id" SERIAL NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"startTime" TIMESTAMP(3) NOT NULL,
|
|
"endTime" TIMESTAMP(3) NOT NULL,
|
|
"lessonId" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "Exam_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Assignment" (
|
|
"id" SERIAL NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"startDate" TIMESTAMP(3) NOT NULL,
|
|
"dueDate" TIMESTAMP(3) NOT NULL,
|
|
"lessonId" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "Assignment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Result" (
|
|
"id" SERIAL NOT NULL,
|
|
"score" INTEGER NOT NULL,
|
|
"examId" INTEGER,
|
|
"assignmentId" INTEGER,
|
|
"studentId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Result_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Attendance" (
|
|
"id" SERIAL NOT NULL,
|
|
"date" TIMESTAMP(3) NOT NULL,
|
|
"present" BOOLEAN NOT NULL,
|
|
"studentId" TEXT NOT NULL,
|
|
"lessonId" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "Attendance_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Event" (
|
|
"id" SERIAL NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"startTime" TIMESTAMP(3) NOT NULL,
|
|
"endTime" TIMESTAMP(3) NOT NULL,
|
|
"classId" INTEGER,
|
|
|
|
CONSTRAINT "Event_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Announcement" (
|
|
"id" SERIAL NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"date" TIMESTAMP(3) NOT NULL,
|
|
"classId" INTEGER,
|
|
|
|
CONSTRAINT "Announcement_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "_SubjectToTeacher" (
|
|
"A" INTEGER NOT NULL,
|
|
"B" TEXT NOT NULL
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Admin_username_key" ON "Admin"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Student_username_key" ON "Student"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Student_email_key" ON "Student"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Student_phone_key" ON "Student"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Teacher_username_key" ON "Teacher"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Teacher_email_key" ON "Teacher"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Teacher_phone_key" ON "Teacher"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Parent_username_key" ON "Parent"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Parent_email_key" ON "Parent"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Parent_phone_key" ON "Parent"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Grade_level_key" ON "Grade"("level");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Class_name_key" ON "Class"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Subject_name_key" ON "Subject"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "_SubjectToTeacher_AB_unique" ON "_SubjectToTeacher"("A", "B");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "_SubjectToTeacher_B_index" ON "_SubjectToTeacher"("B");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Student" ADD CONSTRAINT "Student_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "Parent"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Student" ADD CONSTRAINT "Student_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Student" ADD CONSTRAINT "Student_gradeId_fkey" FOREIGN KEY ("gradeId") REFERENCES "Grade"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Class" ADD CONSTRAINT "Class_supervisorId_fkey" FOREIGN KEY ("supervisorId") REFERENCES "Teacher"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Class" ADD CONSTRAINT "Class_gradeId_fkey" FOREIGN KEY ("gradeId") REFERENCES "Grade"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Lesson" ADD CONSTRAINT "Lesson_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Lesson" ADD CONSTRAINT "Lesson_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Lesson" ADD CONSTRAINT "Lesson_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "Teacher"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Exam" ADD CONSTRAINT "Exam_lessonId_fkey" FOREIGN KEY ("lessonId") REFERENCES "Lesson"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Assignment" ADD CONSTRAINT "Assignment_lessonId_fkey" FOREIGN KEY ("lessonId") REFERENCES "Lesson"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Result" ADD CONSTRAINT "Result_examId_fkey" FOREIGN KEY ("examId") REFERENCES "Exam"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Result" ADD CONSTRAINT "Result_assignmentId_fkey" FOREIGN KEY ("assignmentId") REFERENCES "Assignment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Result" ADD CONSTRAINT "Result_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Attendance" ADD CONSTRAINT "Attendance_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Attendance" ADD CONSTRAINT "Attendance_lessonId_fkey" FOREIGN KEY ("lessonId") REFERENCES "Lesson"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Event" ADD CONSTRAINT "Event_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Announcement" ADD CONSTRAINT "Announcement_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "_SubjectToTeacher" ADD CONSTRAINT "_SubjectToTeacher_A_fkey" FOREIGN KEY ("A") REFERENCES "Subject"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "_SubjectToTeacher" ADD CONSTRAINT "_SubjectToTeacher_B_fkey" FOREIGN KEY ("B") REFERENCES "Teacher"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|