Objective
Create a system for managing university lecture recordings, including scheduling, multi-camera capture, automatic transcription, and content searchability.
Step 1: Create Academic Terms Table
Define academic calendar.
CREATE TABLE academic_terms (
id INTEGER PRIMARY KEY,
term_code VARCHAR(20) NOT NULL UNIQUE,
term_name VARCHAR(100),
start_date DATE,
end_date DATE,
academic_year VARCHAR(20),
is_current BOOLEAN DEFAULT FALSE
);
Step 2: Create Courses Table
Define course offerings.
CREATE TABLE lecture_courses (
id INTEGER PRIMARY KEY,
course_code VARCHAR(20) NOT NULL,
course_name VARCHAR(200),
department VARCHAR(100),
term_id INTEGER NOT NULL,
instructor_id VARCHAR(50),
instructor_name VARCHAR(200),
credits INTEGER,
enrolled_students INTEGER,
recording_enabled BOOLEAN DEFAULT TRUE,
auto_publish BOOLEAN DEFAULT FALSE,
retention_days INTEGER DEFAULT 365,
FOREIGN KEY (term_id) REFERENCES academic_terms(id)
);
Step 3: Create Lecture Rooms Table
Define recording-enabled classrooms.
CREATE TABLE lecture_rooms (
id INTEGER PRIMARY KEY,
room_code VARCHAR(50) NOT NULL UNIQUE,
building VARCHAR(100),
room_number VARCHAR(20),
capacity INTEGER,
has_presenter_camera BOOLEAN DEFAULT TRUE,
has_audience_camera BOOLEAN DEFAULT FALSE,
has_document_camera BOOLEAN DEFAULT TRUE,
has_screen_capture BOOLEAN DEFAULT TRUE,
microphone_type VARCHAR(50),
status VARCHAR(50) DEFAULT 'active'
);
Step 4: Create Lecture Schedule Table
Schedule recurring lectures.
CREATE TABLE lecture_schedule (
id INTEGER PRIMARY KEY,
course_id INTEGER NOT NULL,
room_id INTEGER NOT NULL,
day_of_week INTEGER,
start_time TIME,
end_time TIME,
recording_preset VARCHAR(50) DEFAULT 'standard',
is_active BOOLEAN DEFAULT TRUE,
FOREIGN KEY (course_id) REFERENCES lecture_courses(id),
FOREIGN KEY (room_id) REFERENCES lecture_rooms(id)
);
Step 5: Create Lecture Recordings Table
Store recorded lectures.
CREATE TABLE lecture_recordings (
id INTEGER PRIMARY KEY,
course_id INTEGER NOT NULL,
room_id INTEGER NOT NULL,
lecture_date DATE NOT NULL,
lecture_number INTEGER,
title VARCHAR(200),
description TEXT,
presenter_video VIDEO(MP4),
screen_capture VIDEO(MP4),
combined_video VIDEO(MP4),
audio_only AUDIO(MP3),
duration_seconds INTEGER,
file_size_mb DECIMAL(10, 2),
recording_quality VARCHAR(20),
status VARCHAR(50) DEFAULT 'processing',
published_at TIMESTAMP,
view_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (course_id) REFERENCES lecture_courses(id),
FOREIGN KEY (room_id) REFERENCES lecture_rooms(id)
);
Step 6: Create Transcripts Table
Store searchable transcripts.
CREATE TABLE lecture_transcripts (
id INTEGER PRIMARY KEY,
recording_id INTEGER NOT NULL,
full_transcript TEXT,
transcript_language VARCHAR(20) DEFAULT 'en',
word_count INTEGER,
confidence_score DECIMAL(3, 2),
processing_time_seconds INTEGER,
is_reviewed BOOLEAN DEFAULT FALSE,
reviewed_by VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (recording_id) REFERENCES lecture_recordings(id)
);
Step 7: Create Transcript Segments Table
Enable timestamp navigation.
CREATE TABLE transcript_segments (
id INTEGER PRIMARY KEY,
transcript_id INTEGER NOT NULL,
segment_number INTEGER,
start_time_seconds INTEGER,
end_time_seconds INTEGER,
speaker_label VARCHAR(50),
text_content TEXT,
confidence DECIMAL(3, 2),
FOREIGN KEY (transcript_id) REFERENCES lecture_transcripts(id)
);
Step 8: Create Lecture Slides Table
Track presentation materials.
CREATE TABLE lecture_slides (
id INTEGER PRIMARY KEY,
recording_id INTEGER NOT NULL,
slide_number INTEGER,
timestamp_seconds INTEGER,
slide_image IMAGE(PNG),
slide_text TEXT,
FOREIGN KEY (recording_id) REFERENCES lecture_recordings(id)
);
Step 9: Insert Sample Data
Add academic structure.
INSERT INTO academic_terms (id, term_code, term_name, start_date, end_date, academic_year, is_current) VALUES
(1, 'FALL2023', 'Fall 2023', '2023-09-01', '2023-12-15', '2023-2024', FALSE),
(2, 'SPR2024', 'Spring 2024', '2024-01-15', '2024-05-15', '2023-2024', TRUE),
(3, 'SUM2024', 'Summer 2024', '2024-06-01', '2024-08-15', '2023-2024', FALSE);
INSERT INTO lecture_rooms (id, room_code, building, room_number, capacity, has_presenter_camera, has_audience_camera, has_document_camera, has_screen_capture, microphone_type) VALUES
(1, 'SCI-101', 'Science Building', '101', 150, TRUE, TRUE, TRUE, TRUE, 'ceiling_array'),
(2, 'SCI-205', 'Science Building', '205', 80, TRUE, FALSE, TRUE, TRUE, 'lapel'),
(3, 'ENG-301', 'Engineering Hall', '301', 200, TRUE, TRUE, TRUE, TRUE, 'ceiling_array'),
(4, 'LIB-AUDIT', 'Library', 'Auditorium', 500, TRUE, TRUE, TRUE, TRUE, 'wireless_handheld'),
(5, 'ART-110', 'Arts Center', '110', 60, TRUE, FALSE, FALSE, TRUE, 'desk');
INSERT INTO lecture_courses (id, course_code, course_name, department, term_id, instructor_id, instructor_name, credits, enrolled_students, recording_enabled) VALUES
(1, 'CS101', 'Introduction to Computer Science', 'Computer Science', 2, 'PROF-001', 'Dr. Alice Chen', 4, 145, TRUE),
(2, 'MATH201', 'Calculus II', 'Mathematics', 2, 'PROF-002', 'Dr. Robert Brown', 4, 78, TRUE),
(3, 'PHYS101', 'Physics I', 'Physics', 2, 'PROF-003', 'Dr. Emily Wilson', 4, 120, TRUE),
(4, 'BIO150', 'Introduction to Biology', 'Biology', 2, 'PROF-004', 'Dr. Michael Lee', 3, 95, TRUE),
(5, 'ENG102', 'English Composition', 'English', 2, 'PROF-005', 'Dr. Sarah Davis', 3, 55, TRUE);