209 lines
8.0 KiB
SQL
209 lines
8.0 KiB
SQL
-- CreateTable
|
|||
|
|
CREATE TABLE "User" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"username" TEXT NOT NULL,
|
||
|
|
"passwordHash" TEXT NOT NULL,
|
||
|
|
"name" TEXT NOT NULL,
|
||
|
|
"role" TEXT NOT NULL DEFAULT 'STUDENT',
|
||
|
|
"classId" TEXT,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "User_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Class" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"name" TEXT NOT NULL,
|
||
|
|
"grade" TEXT NOT NULL,
|
||
|
|
"teacherId" TEXT NOT NULL,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "Class_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "ClassTeacher" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"teacherId" TEXT NOT NULL,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
CONSTRAINT "ClassTeacher_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "ClassTeacher_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Enrollment" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"userId" TEXT NOT NULL,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
CONSTRAINT "Enrollment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Enrollment_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Course" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"name" TEXT NOT NULL,
|
||
|
|
"teacherId" TEXT NOT NULL,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
CONSTRAINT "Course_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Course_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Schedule" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"courseId" TEXT NOT NULL,
|
||
|
|
"dayOfWeek" INTEGER NOT NULL,
|
||
|
|
"startTime" TEXT NOT NULL,
|
||
|
|
"endTime" TEXT NOT NULL,
|
||
|
|
"location" TEXT,
|
||
|
|
"weekStart" INTEGER NOT NULL DEFAULT 1,
|
||
|
|
"weekEnd" INTEGER NOT NULL DEFAULT 20,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "Schedule_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Schedule_courseId_fkey" FOREIGN KEY ("courseId") REFERENCES "Course" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Homework" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"courseId" TEXT,
|
||
|
|
"title" TEXT NOT NULL,
|
||
|
|
"content" TEXT NOT NULL,
|
||
|
|
"attachmentUrl" TEXT,
|
||
|
|
"dueAt" DATETIME,
|
||
|
|
"createdBy" TEXT NOT NULL,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "Homework_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Homework_courseId_fkey" FOREIGN KEY ("courseId") REFERENCES "Course" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Homework_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "HomeworkStatus" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"homeworkId" TEXT NOT NULL,
|
||
|
|
"userId" TEXT NOT NULL,
|
||
|
|
"completed" BOOLEAN NOT NULL DEFAULT false,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "HomeworkStatus_homeworkId_fkey" FOREIGN KEY ("homeworkId") REFERENCES "Homework" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "HomeworkStatus_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Notification" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"title" TEXT NOT NULL,
|
||
|
|
"content" TEXT NOT NULL,
|
||
|
|
"priority" TEXT NOT NULL DEFAULT 'NORMAL',
|
||
|
|
"createdBy" TEXT NOT NULL,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "Notification_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Notification_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "NotificationRead" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"notificationId" TEXT NOT NULL,
|
||
|
|
"userId" TEXT NOT NULL,
|
||
|
|
"readAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
CONSTRAINT "NotificationRead_notificationId_fkey" FOREIGN KEY ("notificationId") REFERENCES "Notification" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "NotificationRead_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "Grade" (
|
||
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
||
|
|
"classId" TEXT NOT NULL,
|
||
|
|
"courseId" TEXT,
|
||
|
|
"userId" TEXT NOT NULL,
|
||
|
|
"examName" TEXT NOT NULL,
|
||
|
|
"score" REAL NOT NULL,
|
||
|
|
"totalScore" REAL NOT NULL DEFAULT 100,
|
||
|
|
"publishedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" DATETIME NOT NULL,
|
||
|
|
CONSTRAINT "Grade_classId_fkey" FOREIGN KEY ("classId") REFERENCES "Class" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Grade_courseId_fkey" FOREIGN KEY ("courseId") REFERENCES "Course" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||
|
|
CONSTRAINT "Grade_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "User_classId_idx" ON "User"("classId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "User_role_idx" ON "User"("role");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Class_teacherId_idx" ON "Class"("teacherId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "ClassTeacher_teacherId_idx" ON "ClassTeacher"("teacherId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "ClassTeacher_classId_teacherId_key" ON "ClassTeacher"("classId", "teacherId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Enrollment_classId_idx" ON "Enrollment"("classId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "Enrollment_userId_classId_key" ON "Enrollment"("userId", "classId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Course_classId_idx" ON "Course"("classId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "Course_classId_name_key" ON "Course"("classId", "name");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Schedule_classId_dayOfWeek_idx" ON "Schedule"("classId", "dayOfWeek");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Schedule_courseId_idx" ON "Schedule"("courseId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Homework_classId_createdAt_idx" ON "Homework"("classId", "createdAt");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Homework_courseId_idx" ON "Homework"("courseId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Homework_dueAt_idx" ON "Homework"("dueAt");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "HomeworkStatus_userId_idx" ON "HomeworkStatus"("userId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "HomeworkStatus_homeworkId_userId_key" ON "HomeworkStatus"("homeworkId", "userId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Notification_classId_createdAt_idx" ON "Notification"("classId", "createdAt");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "NotificationRead_userId_idx" ON "NotificationRead"("userId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "NotificationRead_notificationId_userId_key" ON "NotificationRead"("notificationId", "userId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Grade_userId_publishedAt_idx" ON "Grade"("userId", "publishedAt");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Grade_classId_examName_idx" ON "Grade"("classId", "examName");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE INDEX "Grade_courseId_idx" ON "Grade"("courseId");
|