Eğitmen DB
Akademi Eğitim Platformu Eğitmen DB Dökümanı
Eğitmenler Tablosu (Instructors)
CREATE TABLE `instructors` (
`instructorId` INT NOT NULL AUTO_INCREMENT,
`userId` INT NULL, -- Opsiyonel: Eğer sistemde kullanıcı hesabı varsa bağlanabilir
`firstName` VARCHAR(100) NOT NULL,
`lastName` VARCHAR(100) NOT NULL,
`email` VARCHAR(255) NOT NULL UNIQUE,
`phone` VARCHAR(20) NULL,
`title` VARCHAR(200) NULL, -- Ünvan (Senior Developer, Data Scientist vb.)
`company` VARCHAR(255) NULL, -- Bağlı olduğu şirket/kurum
`bio` TEXT NULL,
`avatar` VARCHAR(500) NULL, -- Profil fotoğrafı URL'i
`expertise` JSON NULL, -- Uzmanlık alanları (array olarak: ["JavaScript", "React", "Python"])
`socialMedia` JSON NULL, -- Sosyal medya linkleri (linkedin, twitter, github, website)
`status` ENUM('active', 'pending', 'passive') DEFAULT 'pending',
`createdAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
`createdBy` INT NULL,
`updatedAt` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`updatedBy` INT NULL,
CONSTRAINT `pk_instructors_instructorId` PRIMARY KEY (`instructorId`),
CONSTRAINT `fk_instructors_userId` FOREIGN KEY (`userId`) REFERENCES `mobildev360.user`(`userId`) ON DELETE SET NULL,
CONSTRAINT `fk_instructors_createdBy` FOREIGN KEY (`createdBy`) REFERENCES `mobildev360.user`(`userId`),
CONSTRAINT `fk_instructors_updatedBy` FOREIGN KEY (`updatedBy`) REFERENCES `mobildev360.user`(`userId`)
) COMMENT='Kurs eğitmenleri';
Eğitmen - Kurs İlişki Tablosu
CREATE TABLE `instructor_courses` (
`instructorId` INT NOT NULL,
`courseId` INT NOT NULL,
`role` VARCHAR(100) NULL, -- Eğitmenin kurstaki rolü (Baş Eğitmen, Asistan, Mentor vb.)
`orderIndex` INT DEFAULT 0, -- Sıralama (birden fazla eğitmen varsa)
`isActive` BOOLEAN DEFAULT TRUE,
`assignedAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
`assignedBy` INT NULL,
CONSTRAINT `pk_instructor_courses` PRIMARY KEY (`instructorId`, `courseId`),
CONSTRAINT `fk_inst_courses_instructor` FOREIGN KEY (`instructorId`) REFERENCES `instructors`(`instructorId`) ON DELETE CASCADE,
CONSTRAINT `fk_inst_courses_course` FOREIGN KEY (`courseId`) REFERENCES `course`(`courseId`) ON DELETE CASCADE,
CONSTRAINT `fk_inst_courses_assignedBy` FOREIGN KEY (`assignedBy`) REFERENCES `mobildev360.user`(`userId`)
) COMMENT='Eğitmenlerin atandığı kurslar';
Eğitmen - İçerik İlişki Tablosu (Modül bazlı)
CREATE TABLE `instructor_content` (
`instructorId` INT NOT NULL,
`moduleId` INT NOT NULL, -- course_modules tablosuna referans
`contentType` ENUM('creator', 'contributor', 'reviewer') DEFAULT 'creator', -- İçerikteki rolü
`contributedAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT `pk_instructor_content` PRIMARY KEY (`instructorId`, `moduleId`),
CONSTRAINT `fk_inst_content_instructor` FOREIGN KEY (`instructorId`) REFERENCES `instructors`(`instructorId`) ON DELETE CASCADE,
CONSTRAINT `fk_inst_content_module` FOREIGN KEY (`moduleId`) REFERENCES `course_modules`(`moduleId`) ON DELETE CASCADE
) COMMENT='Eğitmenlerin oluşturduğu/katkıda bulunduğu modüller';
Eğitmen Değerlendirme Tablosu (Öğrenci değerlendirmeleri)
CREATE TABLE `instructor_reviews` (
`reviewId` INT NOT NULL AUTO_INCREMENT,
`instructorId` INT NOT NULL,
`userId` INT NOT NULL,
`courseId` INT NOT NULL, -- Hangi kurstaki değerlendirme
`rating` DECIMAL(2,1) NOT NULL, -- 1.0 - 5.0 arası
`comment` TEXT NULL,
`createdAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT `pk_instructor_reviews_reviewId` PRIMARY KEY (`reviewId`),
CONSTRAINT `fk_inst_reviews_instructor` FOREIGN KEY (`instructorId`) REFERENCES `instructors`(`instructorId`) ON DELETE CASCADE,
CONSTRAINT `fk_inst_reviews_user` FOREIGN KEY (`userId`) REFERENCES `mobildev360.user`(`userId`) ON DELETE CASCADE,
CONSTRAINT `fk_inst_reviews_course` FOREIGN KEY (`courseId`) REFERENCES `course`(`courseId`) ON DELETE CASCADE,
CONSTRAINT `uq_instructor_reviews` UNIQUE KEY (`instructorId`, `userId`, `courseId`) -- Bir kullanıcı bir kursta bir kez değerlendirme yapabilir
) COMMENT='Eğitmen değerlendirmeleri';
Eğitmen İstatistikleri Tablosu (Opsiyonel - performans için)
CREATE TABLE `instructor_stats` (
`statId` INT NOT NULL AUTO_INCREMENT,
`instructorId` INT NOT NULL,
`totalCourses` INT DEFAULT 0,
`totalModules` INT DEFAULT 0,
`totalStudents` INT DEFAULT 0,
`totalReviews` INT DEFAULT 0,
`averageRating` DECIMAL(2,1) DEFAULT 0.0,
`completionRate` DECIMAL(5,2) DEFAULT 0.00, -- Öğrencilerin kursu tamamlama oranı
`lastUpdated` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT `pk_instructor_stats_statId` PRIMARY KEY (`statId`),
CONSTRAINT `fk_inst_stats_instructor` FOREIGN KEY (`instructorId`) REFERENCES `instructors`(`instructorId`) ON DELETE CASCADE,
CONSTRAINT `uq_instructor_stats` UNIQUE KEY (`instructorId`)
) COMMENT='Eğitmen istatistikleri (güncellenebilir)';
Eğitmen Uzmanlık Alanları Tablosu (isteğe bağlı - expertise JSON yerine kullanılabilir)
CREATE TABLE `instructor_expertise` (
`instructorId` INT NOT NULL,
`skill` VARCHAR(100) NOT NULL,
`level` ENUM('beginner', 'intermediate', 'advanced', 'expert') DEFAULT 'expert',
`yearsOfExperience` INT NULL,
CONSTRAINT `pk_instructor_expertise` PRIMARY KEY (`instructorId`, `skill`),
CONSTRAINT `fk_inst_expertise_instructor` FOREIGN KEY (`instructorId`) REFERENCES `instructors`(`instructorId`) ON DELETE CASCADE
) COMMENT='Eğitmen uzmanlık alanları (detaylı)';
Eğitmen Akademi İlişkisi (Opsiyonel - eğitmen birden fazla akademide görev alabilir)
CREATE TABLE `instructor_academies` (
`instructorId` INT NOT NULL,
`academyId` INT NOT NULL,
`joinedAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
`isPrimary` BOOLEAN DEFAULT FALSE,
CONSTRAINT `pk_instructor_academies` PRIMARY KEY (`instructorId`, `academyId`),
CONSTRAINT `fk_inst_academies_instructor` FOREIGN KEY (`instructorId`) REFERENCES `instructors`(`instructorId`) ON DELETE CASCADE,
CONSTRAINT `fk_inst_academies_academy` FOREIGN KEY (`academyId`) REFERENCES `academy`(`academyId`) ON DELETE CASCADE
) COMMENT='Eğitmenlerin bağlı olduğu akademiler';
Örnek Index'ler
CREATE INDEX `idx_instructors_email` ON `instructors`(`email`);
CREATE INDEX `idx_instructors_status` ON `instructors`(`status`);
CREATE INDEX `idx_instructor_courses_course` ON `instructor_courses`(`courseId`);
CREATE INDEX `idx_instructor_reviews_rating` ON `instructor_reviews`(`rating`);
CREATE INDEX `idx_instructor_expertise_skill` ON `instructor_expertise`(`skill`);
Örnek Veri Ekleme
INSERT INTO `instructors` (`firstName`, `lastName`, `email`, `phone`, `title`, `company`, `bio`, `expertise`, `socialMedia`, `status`) VALUES
('Ahmet', 'Yılmaz', 'ahmet.yilmaz@techacademy.com', '+90 555 123 4567', 'Senior Frontend Developer', 'Tech Academy', '10 yılı aşkın frontend geliştirme deneyimi. Büyük ölçekli projelerde liderlik, modern JavaScript frameworkleri konusunda uzmanlık.', '["JavaScript", "React", "TypeScript", "Next.js"]', '{"linkedin": "linkedin.com/in/ahmetyilmaz", "github": "github.com/ahmetyilmaz", "twitter": "twitter.com/ahmetyilmaz"}', 'active'),
('Ayşe', 'Demir', 'ayse.demir@datacorp.com', '+90 555 987 6543', 'Data Scientist', 'DataCorp', 'Veri bilimi ve makine öğrenmesi alanında 8 yıllık deneyim. Python, SQL ve veri görselleştirme konularında uzman.', '["Python", "SQL", "Machine Learning", "Pandas"]', '{"linkedin": "linkedin.com/in/aysedemir", "github": "github.com/aysedemir"}', 'active'),
('Mehmet', 'Kaya', 'mehmet.kaya@devops.io', '+90 555 456 7890', 'DevOps Engineer', 'DevOps.io', 'Bulut teknolojileri ve DevOps süreçlerinde uzman. AWS, Docker, Kubernetes konularında sertifikalı.', '["AWS", "Docker", "Kubernetes", "CI/CD"]', '{"linkedin": "linkedin.com/in/mehmetkaya", "github": "github.com/mehmetkaya"}', 'pending');
Örnek Kurs Atamaları
INSERT INTO `instructor_courses` (`instructorId`, `courseId`, `role`, `orderIndex`) VALUES
(1, 1, 'Baş Eğitmen', 1),
(1, 3, 'Eğitmen', 1),
(2, 2, 'Baş Eğitmen', 1),
(3, 4, 'Eğitmen', 1);
Örnek İçerik Atamaları
INSERT INTO `instructor_content` (`instructorId`, `moduleId`, `contentType`) VALUES
(1, 1, 'creator'),
(1, 2, 'creator'),
(1, 3, 'contributor'),
(2, 4, 'creator');
Örnek Değerlendirmeler
INSERT INTO `instructor_reviews` (`instructorId`, `userId`, `courseId`, `rating`, `comment`) VALUES
(1, 101, 1, 4.8, 'Harika bir eğitmen, çok açıklayıcı anlatıyor.'),
(1, 102, 1, 5.0, 'Kesinlikle mükemmel, tüm sorularıma cevap buldum.'),
(2, 103, 2, 4.5, 'Çok iyi bir başlangıç kursu, tavsiye ederim.');