Skip to content

Instantly share code, notes, and snippets.

@muath-ye
Last active January 14, 2025 11:06
Show Gist options
  • Save muath-ye/9d20303e90990d1209f1ca9730bab520 to your computer and use it in GitHub Desktop.
Save muath-ye/9d20303e90990d1209f1ca9730bab520 to your computer and use it in GitHub Desktop.
الطلاب والجامعة

الجداول الرئيسية والعلاقات بينها مع مراعاة صلاحيات المستخدمين المختلفة (الطلاب، الدكاترة، والعمادة).

تصميم قاعدة البيانات

1. الجداول الرئيسية

جدول المستخدمين (users)

يحتوي على معلومات عامة عن جميع المستخدمين في النظام (طلاب، دكاترة، عمادة).

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    role ENUM('student', 'teacher', 'admin') NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

جدول الطلاب (students)

يحتوي على معلومات إضافية خاصة بالطلاب.

CREATE TABLE students (
    student_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    enrollment_date DATE,
    major VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);

جدول الدكاترة (teachers)

يحتوي على معلومات إضافية خاصة بالدكاترة.

CREATE TABLE teachers (
    teacher_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    department VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);

جدول العمادة (admins)

يحتوي على معلومات إضافية خاصة بالعمادة.

CREATE TABLE admins (
    admin_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);

جدول المواد الدراسية (courses)

يحتوي على معلومات عن المواد الدراسية.

CREATE TABLE courses (
    course_id INT AUTO_INCREMENT PRIMARY KEY,
    course_code VARCHAR(20) NOT NULL UNIQUE,
    course_name VARCHAR(100) NOT NULL,
    description TEXT,
    credit_hours INT NOT NULL,
    teacher_id INT,
    FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id) ON DELETE SET NULL
);

جدول تسجيل الطلاب في المواد (enrollments)

يربط بين الطلاب والمواد الدراسية.

CREATE TABLE enrollments (
    enrollment_id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT NOT NULL,
    course_id INT NOT NULL,
    enrollment_date DATE DEFAULT CURRENT_DATE,
    status ENUM('enrolled', 'dropped') DEFAULT 'enrolled',
    FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE,
    FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
);

جدول الجداول الدراسية (schedules)

يحتوي على معلومات عن الجدول الدراسي لكل مادة.

CREATE TABLE schedules (
    schedule_id INT AUTO_INCREMENT PRIMARY KEY,
    course_id INT NOT NULL,
    day_of_week ENUM('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') NOT NULL,
    start_time TIME NOT NULL,
    end_time TIME NOT NULL,
    location VARCHAR(100),
    FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
);

جدول النتائج (grades)

يحتوي على درجات الطلاب في المواد الدراسية.

CREATE TABLE grades (
    grade_id INT AUTO_INCREMENT PRIMARY KEY,
    enrollment_id INT NOT NULL,
    exam_type ENUM('midterm', 'final', 'assignment') NOT NULL,
    grade DECIMAL(5,2) NOT NULL,
    FOREIGN KEY (enrollment_id) REFERENCES enrollments(enrollment_id) ON DELETE CASCADE
);

جدول الإشعارات (notifications)

يحتوي على الإشعارات المرسلة من العمادة أو الدكاترة.

CREATE TABLE notifications (
    notification_id INT AUTO_INCREMENT PRIMARY KEY,
    sender_id INT NOT NULL,
    recipient_role ENUM('student', 'teacher', 'admin', 'all') NOT NULL,
    title VARCHAR(255) NOT NULL,
    message TEXT NOT NULL,
    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (sender_id) REFERENCES users(user_id) ON DELETE CASCADE
);

جدول الرسائل (messages)

يحتوي على الرسائل بين الطلاب والعمادة أو الدكاترة.

CREATE TABLE messages (
    message_id INT AUTO_INCREMENT PRIMARY KEY,
    sender_id INT NOT NULL,
    receiver_id INT NOT NULL,
    subject VARCHAR(255),
    body TEXT NOT NULL,
    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (sender_id) REFERENCES users(user_id) ON DELETE CASCADE,
    FOREIGN KEY (receiver_id) REFERENCES users(user_id) ON DELETE CASCADE
);

جدول الملفات الدراسية (academic_files)

يحتوي على الملفات والموارد الأكاديمية المتاحة للطلاب.

CREATE TABLE academic_files (
    file_id INT AUTO_INCREMENT PRIMARY KEY,
    uploader_id INT,
    file_name VARCHAR(255) NOT NULL,
    file_path VARCHAR(500) NOT NULL,
    uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (uploader_id) REFERENCES users(user_id) ON DELETE SET NULL
);

جدول الاستفسارات والشكاوى (inquiries)

يحتوي على استفسارات وشكاوى الطلاب.

CREATE TABLE inquiries (
    inquiry_id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT NOT NULL,
    subject VARCHAR(255) NOT NULL,
    message TEXT NOT NULL,
    status ENUM('pending', 'answered', 'closed') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL,
    FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE
);

جدول التقارير (reports)

يحتوي على التقارير الأكاديمية والإدارية التي تولدها العمادة.

CREATE TABLE reports (
    report_id INT AUTO_INCREMENT PRIMARY KEY,
    admin_id INT,
    report_type ENUM('academic', 'administrative') NOT NULL,
    content TEXT NOT NULL,
    generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (admin_id) REFERENCES admins(admin_id) ON DELETE SET NULL
);

2. العلاقات بين الجداول

  • المستخدمون (users) مرتبطون بالطلاب (students)، الدكاترة (teachers)، والعمادة (admins) بناءً على الدور (role).
  • الطلاب يمكنهم التسجيل في المواد الدراسية من خلال جدول التسجيلات (enrollments).
  • الدكاترة يمكنهم إدارة المقررات الدراسية وإدخال الدرجات.
  • العمادة تدير حسابات المستخدمين، الجداول الدراسية، النتائج، وتوليد التقارير.
  • الإشعارات يمكن أن تكون موجهة لمجموعات معينة من المستخدمين أو للجميع.
  • الرسائل تتيح التواصل المباشر بين المستخدمين المختلفين.
  • الملفات الدراسية يمكن للعمادة أو الدكاترة تحميلها ليتمكن الطلاب من الوصول إليها.
  • الاستفسارات والشكاوى تتيح للطلاب التواصل مع العمادة بشأن المسائل الأكاديمية أو الإدارية.
  • التقارير توفر للعمادة معلومات حول التفاعل الأكاديمي والإداري.

3. مثال على بعض العمليات

تسجيل مستخدم جديد (طالب)

-- إضافة المستخدم في جدول users
INSERT INTO users (username, password, email, role) 
VALUES ('student_username', 'hashed_password', '[email protected]', 'student');

-- الحصول على user_id الأخير
SET @last_user_id = LAST_INSERT_ID();

-- إضافة الطالب في جدول students
INSERT INTO students (user_id, first_name, last_name, enrollment_date, major)
VALUES (@last_user_id, 'اسم الطالب', 'اللقب', '2024-09-01', 'القسم');

إضافة مادة دراسية جديدة من قبل عمادة

INSERT INTO courses (course_code, course_name, description, credit_hours, teacher_id)
VALUES ('CS101', 'مقدمة في علوم الحاسوب', 'وصف المادة...', 3, NULL);

تسجيل طالب في مادة

INSERT INTO enrollments (student_id, course_id, enrollment_date)
VALUES (1, 1, CURDATE());

إضافة نتيجة امتحان

INSERT INTO grades (enrollment_id, exam_type, grade)
VALUES (1, 'final', 85.50);
@muath-ye
Copy link
Author

muath-ye commented Jan 12, 2025

lm

@muath-ye
Copy link
Author

db

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment