قاعدة البيانات مهندسة كـ نظام إدارة مدارس متعدد المستأجرين يدعم مدارس متعددة في قاعدة بيانات واحدة مع عزل بيانات كامل. مبنية على PostgreSQL مع Prisma ORM، توفر أساساً قوياً للمؤسسات التعليمية مع الحفاظ على حدود أمان صارمة بين المستأجرين.
تصميم قاعدة البيانات لدينا مُوجَّه بمبادئ أساسية تضمن قابلية التوسع والأمان وسهولة الصيانة:
schoolId يضمن عزل بيانات كامل بين المدارسhogwarts.hogwarts.app)تتبع قاعدة البيانات تصميماً علائقياً شاملاً يلتقط جميع جوانب إدارة المدرسة من البنية التحتية الأساسية إلى العمليات اليومية.
model School {
id String @id @default(cuid())
name String
domain String @unique // مثال: "hogwarts"
logoUrl String?
address String?
phoneNumber String?
email String?
timezone String @default("UTC")
// الاشتراك/الفوترة
planType String @default("basic")
maxStudents Int @default(100)
maxTeachers Int @default(10)
isActive Boolean @default(true)
}// صحيح - دائماً ضمّن schoolId
const students = await prisma.student.findMany({
where: { schoolId: "school_123" },
})
// خطأ - schoolId مفقود (خطر أمني)
const students = await prisma.student.findMany()كل نموذج يحتوي على بيانات عينة واقعية توضح العلاقات وهيكل البيانات.
يدعم النظام 8 أدوار مستخدم مميزة مع مستويات وصول متفاوتة.
كل استعلام قاعدة بيانات يجب أن يتضمن schoolId:
// إجراء خادم مع سياق المستأجر
export async function getStudents() {
const schoolId = getSchoolId() // من سياق الوسيطة
return await prisma.student.findMany({
where: { schoolId },
})
}جميع القيود الفريدة تتضمن schoolId:
// المعلمون يمكن أن يكون لهم نفس البريد عبر مدارس مختلفة
@@unique([schoolId, emailAddress])
// الأقسام يمكن أن يكون لها نفس الأسماء عبر المدارس
@@unique([schoolId, departmentName])-- فهارس حرجة لاستعلامات متعددة المستأجرين
CREATE INDEX idx_students_school_id ON students(school_id);
CREATE INDEX idx_teachers_school_id ON teachers(school_id);
CREATE INDEX idx_classes_school_id ON classes(school_id);# إنشاء عميل Prisma
pnpm prisma generate
# إنشاء وتطبيق الترحيلات
pnpm prisma migrate dev --name init
# النشر للإنتاج
pnpm prisma migrate deploy
# بذر البيانات النموذجية
pnpm prisma db seedهذه البنية الشاملة لقاعدة البيانات توفر الأساس لبناء أنظمة إدارة تعليمية قابلة للتوسع وآمنة وغنية بالميزات.