59 lines
2.1 KiB
SQL
59 lines
2.1 KiB
SQL
-- Инициализационный скрипт для PostgreSQL для учебных упражнений
|
|
|
|
-- Создание таблицы студентов
|
|
CREATE TABLE IF NOT EXISTS students (
|
|
student_id SERIAL PRIMARY KEY,
|
|
first_name VARCHAR(50),
|
|
last_name VARCHAR(50),
|
|
email VARCHAR(100),
|
|
enrollment_date DATE,
|
|
grade INTEGER
|
|
);
|
|
|
|
-- Создание таблицы курсов
|
|
CREATE TABLE IF NOT EXISTS courses (
|
|
course_id SERIAL PRIMARY KEY,
|
|
course_name VARCHAR(100),
|
|
instructor VARCHAR(100),
|
|
credits INTEGER
|
|
);
|
|
|
|
-- Создание таблицы зачислений
|
|
CREATE TABLE IF NOT EXISTS enrollments (
|
|
enrollment_id SERIAL PRIMARY KEY,
|
|
student_id INTEGER REFERENCES students(student_id),
|
|
course_id INTEGER REFERENCES courses(course_id),
|
|
enrollment_date DATE,
|
|
grade CHAR(1)
|
|
);
|
|
|
|
-- Вставка тестовых данных
|
|
INSERT INTO students (first_name, last_name, email, enrollment_date, grade) VALUES
|
|
('Alice', 'Johnson', 'alice@example.com', '2023-09-01', 85),
|
|
('Bob', 'Smith', 'bob@example.com', '2023-09-01', 92),
|
|
('Charlie', 'Brown', 'charlie@example.com', '2023-09-01', 78),
|
|
('Diana', 'Prince', 'diana@example.com', '2023-09-01', 96),
|
|
('Eve', 'Wilson', 'eve@example.com', '2023-09-01', 8)
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
INSERT INTO courses (course_name, instructor, credits) VALUES
|
|
('Introduction to Data Science', 'Dr. Smith', 3),
|
|
('Python Programming', 'Dr. Johnson', 4),
|
|
('Database Systems', 'Dr. Williams', 3),
|
|
('Machine Learning', 'Dr. Brown', 4)
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
INSERT INTO enrollments (student_id, course_id, enrollment_date, grade) VALUES
|
|
(1, 1, '2023-09-01', 'A'),
|
|
(1, 2, '2023-09-01', 'B'),
|
|
(2, 1, '2023-09-01', 'A'),
|
|
(2, 3, '2023-09-01', 'A'),
|
|
(3, 2, '2023-09-01', 'B'),
|
|
(4, 4, '2023-09-01', 'A'),
|
|
(5, 1, '2023-09-01', 'A')
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- Создание индексов для улучшения производительности
|
|
CREATE INDEX IF NOT EXISTS idx_students_email ON students(email);
|
|
CREATE INDEX IF NOT EXISTS idx_enrollments_student ON enrollments(student_id);
|
|
CREATE INDEX IF NOT EXISTS idx_enrollments_course ON enrollments(course_id); |