dumb.sql 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. CREATE TABLE faculties (
  2. faculty_id SERIAL PRIMARY KEY,
  3. faculty_name VARCHAR(100) NOT NULL UNIQUE
  4. );
  5. CREATE TABLE departments (
  6. department_id SERIAL PRIMARY KEY,
  7. faculty_id INTEGER NOT NULL REFERENCES faculties(faculty_id),
  8. department_name VARCHAR(150) NOT NULL
  9. );
  10. CREATE TABLE groups (
  11. group_id SERIAL PRIMARY KEY,
  12. faculty_id INTEGER NOT NULL REFERENCES faculties(faculty_id),
  13. group_name VARCHAR(20) NOT NULL,
  14. course INTEGER NOT NULL CHECK(course BETWEEN 1 AND 6)
  15. );
  16. CREATE TABLE students (
  17. student_id SERIAL PRIMARY KEY,
  18. group_id INTEGER NOT NULL REFERENCES groups(group_id),
  19. last_name VARCHAR(50) NOT NULL,
  20. first_name VARCHAR(50) NOT NULL,
  21. middle_name VARCHAR(50),
  22. gender VARCHAR(10) CHECK(gender IN ('М','Ж')),
  23. birth_date DATE NOT NULL,
  24. scholarship NUMERIC(10,2) DEFAULT 0,
  25. has_children BOOLEAN DEFAULT FALSE
  26. );
  27. CREATE TABLE teachers (
  28. teacher_id SERIAL PRIMARY KEY,
  29. department_id INTEGER NOT NULL REFERENCES departments(department_id),
  30. last_name VARCHAR(50) NOT NULL,
  31. first_name VARCHAR(50) NOT NULL,
  32. middle_name VARCHAR(50),
  33. category VARCHAR(50) NOT NULL,
  34. salary NUMERIC(10,2) NOT NULL CHECK(salary > 0),
  35. academic_degree VARCHAR(50)
  36. );
  37. CREATE TABLE disciplines (
  38. discipline_id SERIAL PRIMARY KEY,
  39. discipline_name VARCHAR(150) NOT NULL UNIQUE
  40. );
  41. CREATE TABLE semesters (
  42. semester_id SERIAL PRIMARY KEY,
  43. semester_number INTEGER NOT NULL CHECK(semester_number BETWEEN 1 AND 12),
  44. academic_year VARCHAR(20) NOT NULL
  45. );
  46. CREATE TABLE teaching_assignments (
  47. assignment_id SERIAL PRIMARY KEY,
  48. teacher_id INTEGER NOT NULL REFERENCES teachers(teacher_id),
  49. discipline_id INTEGER NOT NULL REFERENCES disciplines(discipline_id),
  50. group_id INTEGER NOT NULL REFERENCES groups(group_id),
  51. semester_id INTEGER NOT NULL REFERENCES semesters(semester_id),
  52. lecture_hours INTEGER DEFAULT 0,
  53. practice_hours INTEGER DEFAULT 0,
  54. lab_hours INTEGER DEFAULT 0
  55. );
  56. CREATE TABLE exams (
  57. exam_id SERIAL PRIMARY KEY,
  58. student_id INTEGER NOT NULL REFERENCES students(student_id),
  59. discipline_id INTEGER NOT NULL REFERENCES disciplines(discipline_id),
  60. teacher_id INTEGER NOT NULL REFERENCES teachers(teacher_id),
  61. semester_id INTEGER NOT NULL REFERENCES semesters(semester_id),
  62. exam_date DATE NOT NULL,
  63. grade INTEGER CHECK(grade BETWEEN 2 AND 5)
  64. );
  65. -- Заполнение таблицы students
  66. INSERT INTO students
  67. (group_id, last_name, first_name, middle_name, gender, birth_date, scholarship, has_children)
  68. VALUES
  69. (1, 'Иванов', 'Артём', 'Сергеевич', 'М', '2004-03-15', 15000, FALSE),
  70. (1, 'Петров', 'Даниил', 'Олегович', 'М', '2003-07-22', 12000, FALSE),
  71. (1, 'Смирнова', 'Анна', 'Игоревна', 'Ж', '2004-11-10', 18000, FALSE),
  72. (2, 'Кузнецов', 'Максим', 'Андреевич', 'М', '2005-01-18', 0, FALSE),
  73. (2, 'Васильева', 'Мария', 'Дмитриевна', 'Ж', '2004-05-30', 10000, FALSE),
  74. (2, 'Попов', 'Егор', 'Владимирович', 'М', '2003-12-09', 0, TRUE),
  75. (3, 'Соколова', 'Екатерина', 'Алексеевна', 'Ж', '2005-02-14', 13000, FALSE),
  76. (3, 'Морозов', 'Никита', 'Ильич', 'М', '2005-09-01', 0, FALSE);
  77. -- Заполнение таблицы teachers
  78. INSERT INTO teachers
  79. (department_id, last_name, first_name, middle_name, category, salary, academic_degree)
  80. VALUES
  81. (1, 'Сидоров', 'Павел', 'Викторович', 'Доцент', 120000, 'Кандидат наук'),
  82. (1, 'Орлов', 'Иван', 'Николаевич', 'Профессор', 180000, 'Доктор наук'),
  83. (2, 'Крылова', 'Елена', 'Сергеевна', 'Старший преподаватель', 95000, 'Кандидат наук'),
  84. (2, 'Фёдоров', 'Алексей', 'Петрович', 'Ассистент', 70000, NULL),
  85. (3, 'Новикова', 'Ольга', 'Ивановна', 'Доцент', 110000, 'Кандидат наук');
  86. -- Заполнение таблицы disciplines
  87. INSERT INTO disciplines (discipline_name)
  88. VALUES
  89. ('Базы данных'),
  90. ('Программирование'),
  91. ('Компьютерные сети'),
  92. ('Экономика предприятия'),
  93. ('Правоведение');
  94. -- Заполнение таблицы semesters
  95. INSERT INTO semesters (semester_number, academic_year)
  96. VALUES
  97. (1, '2025-2026'),
  98. (2, '2025-2026'),
  99. (3, '2026-2027');
  100. -- Заполнение таблицы teaching_assignments
  101. INSERT INTO teaching_assignments
  102. (teacher_id, discipline_id, group_id, semester_id,
  103. lecture_hours, practice_hours, lab_hours)
  104. VALUES
  105. (1, 1, 1, 1, 32, 16, 24),
  106. (1, 2, 2, 1, 40, 20, 30),
  107. (2, 2, 1, 2, 50, 20, 10),
  108. (3, 3, 2, 2, 24, 16, 32),
  109. (5, 4, 3, 1, 36, 18, 0);
  110. -- Заполнение таблицы exams
  111. INSERT INTO exams
  112. (student_id, discipline_id, teacher_id,
  113. semester_id, exam_date, grade)
  114. VALUES
  115. (1, 1, 1, 1, '2026-01-15', 5),
  116. (1, 2, 2, 2, '2026-06-10', 4),
  117. (2, 1, 1, 1, '2026-01-15', 3),
  118. (2, 2, 2, 2, '2026-06-10', 5),
  119. (3, 1, 1, 1, '2026-01-15', 5),
  120. (3, 2, 2, 2, '2026-06-10', 5),
  121. (4, 2, 1, 1, '2026-01-20', 2),
  122. (5, 3, 3, 2, '2026-06-18', 4),
  123. (6, 3, 3, 2, '2026-06-18', 3),
  124. (7, 4, 5, 1, '2026-01-25', 5),
  125. (8, 4, 5, 1, '2026-01-25', 2);