Proje: Okul API · Hub: Okul API — Architecture

Database Schema — Genel Bakış

Okul.com.tr platformunun tüm veritabanı şeması. API repo’daki 220 migration’dan türetilmiştir. Tablo sayısı: ~150 tablo, 12 domain.


Domain Haritası

DomainTablo SayısıAçıklama
Schools~38Core iş varlığı
Users~15D2C kullanıcılar (veliler, adaylar)
Customers~14B2B müşteriler (okul sahipleri / yöneticiler)
Leads & Sales~14Lead lifecycle, Pipedrive CRM sync
Payments~12Ödeme işlemleri, sözleşmeler
Content~12Makale, duyuru, medya
Education~10Üniversite, fakülte, lise, kolej
Communication~6Bildirimler, video odaları
Config & Meta~12Sistem konfig, referans verileri
Logging & Audit~7Loglama, audit trail
Family~5Aile yönetimi (K-12)
Misc~18Auth, kuyruk, kısa URL vb.

En Kritik Tablolar (Tier 1)

schools           → Tüm analizlerin hub'ı
school_filters    → Denormalize/materialized view (~100 kolon) — büyük join yerine bunu kullan
leads             → Sales pipeline ve lead analizi
customer_agreements → Gelir ve sözleşme analizi
payments          → Transaction-level finansal veri
users             → Kullanıcı aktivitesi ve demografik
school_interactions → CRM aktivite logu

Kritik Mimari Kararlar

1. Soft Delete Everywhere

Hemen tüm tablolarda deleted_at kolonunu var. Sorgularda mutlaka filtrele:

WHERE deleted_at IS NULL

2. school_filters — Denormalize Cache Tablosu

schools tablosuna 20+ tablo join etmek yerine school_filters kullan. 100+ kolon içerir: sektör, ürün, engagement istatistikleri, profil kalite puanları.

3. Compound Index Stratejisi

school_interactions tablosunda 8 compound index var. Temporal sorgular için tasarlanmış. school_filters tablosunda: (sector_id, is_customer, deleted_at, school_id) composite index.

4. JSON Kolonlar

Bazı tablolarda JSON içerik var — düz SQL’de parse gerekir:

  • customer_agreements.products — ürün listesi
  • customer_agreements.product_arge — AR-GE ürün bilgisi
  • pipedrive_deals.details — CRM veri
  • notifications.options — bildirim konfig

5. B2B + D2C Hibrit Yapı

  • users → D2C kullanıcılar (veliler, adaylar)
  • customers → B2B firmalar (okullar / yönetici firmalar)
  • customer_users → B2B portal kullanıcıları (M2M: customers ↔ users)
  • Leadler her iki kanaldan gelebilir

Core İlişki Şeması

customers ──< customer_users >── users
     │               │
     │               └──< customer_user_schools >── schools
     │
     └──< customer_agreements ──< payments
                                      └──< payment_transactions

users ──< leads ──> schools
       └──< user_details
       └──< (via customer_users) customers

schools ──< school_filters          (denormalize)
        ──< school_statistics       (analytics copy)
        ──< school_interactions     (CRM log)
        ──< school_daily_logs       (günlük metrikler)
        ──< school_comments         (kullanıcı yorumları)
        ──< school_product_prices   (fiyatlandırma)
        ──< school_fees             (eğitim ücretleri)

Platforma Özel Kavramlar

KavramAçıklama
YÖK KoduTürk Yükseköğretim Kurulu resmi okul kodu
IYSİleti Yönetim Sistemi — Türk GDPR eşdeğeri
Plaka Kodulocations tablosundaki il kodu (01=Adana, 34=İstanbul…)
Inflation RateEnflasyona bağlı fiyat güncelleme sistemi
ERP KoduMüşteri firmalarının muhasebe entegrasyon kodu
Py (Proje Yönetim)İç CRM projesi — py_schools, py_profile_point vs.

İlgili Notlar