модуль миграции импорт "исх/бд/скуля" фн мигрировать*(картотека: скуля.Картотека) { пусть оплошность := "" картотека.выполнить(`PRAGMA foreign_keys = ON;`, оплошность) если оплошность # "" { авария(оплошность) } картотека.выполнить(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, first_name TEXT NOT NULL, last_name TEXT NOT NULL, middle_name TEXT NOT NULL, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL );`, оплошность) если оплошность # "" { авария(оплошность) } картотека.выполнить(` CREATE TABLE IF NOT EXISTS teachers ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL UNIQUE, education TEXT, avatar_url TEXT, FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE );`, оплошность) если оплошность # "" { авария(оплошность) } картотека.выполнить(` CREATE TABLE IF NOT EXISTS students ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL UNIQUE, mentor_id INTEGER, -- "чей ученик" — id учителя (может быть NULL) snils TEXT, passport TEXT, FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY(mentor_id) REFERENCES teachers(id) ON DELETE SET NULL );`, оплошность) картотека.выполнить(` CREATE TABLE IF NOT EXISTS classes ( id INTEGER PRIMARY KEY AUTOINCREMENT, number INTEGER NOT NULL, letter TEXT NOT NULL, creator_teacher_id INTEGER, FOREIGN KEY(creator_teacher_id) REFERENCES teachers(id) ON DELETE SET NULL );`, оплошность) если оплошность # "" { авария(оплошность) } картотека.выполнить(` CREATE TABLE IF NOT EXISTS class_students ( id INTEGER PRIMARY KEY AUTOINCREMENT, class_id INTEGER NOT NULL, student_id INTEGER NOT NULL, UNIQUE(class_id, student_id), FOREIGN KEY(class_id) REFERENCES classes(id) ON DELETE CASCADE, FOREIGN KEY(student_id) REFERENCES students(id) ON DELETE CASCADE );`, оплошность) если оплошность # "" { авария(оплошность) } картотека.выполнить(` CREATE TABLE IF NOT EXISTS lessons ( id INTEGER PRIMARY KEY AUTOINCREMENT, class_id INTEGER NOT NULL, date DATE NOT NULL, title TEXT NOT NULL, homework TEXT, FOREIGN KEY(class_id) REFERENCES classes(id) ON DELETE CASCADE );`, оплошность) если оплошность # "" { авария(оплошность) } картотека.выполнить(` INSERT OR IGNORE INTO users ( first_name, last_name, middle_name, username, password ) VALUES ( 'Админ', 'Админович', '', 'admin', 'correct horse battery staple' );`, оплошность) если оплошность # "" { авария(оплошность) } }