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ı
| Domain | Tablo Sayısı | Açıklama |
|---|---|---|
| Schools | ~38 | Core iş varlığı |
| Users | ~15 | D2C kullanıcılar (veliler, adaylar) |
| Customers | ~14 | B2B müşteriler (okul sahipleri / yöneticiler) |
| Leads & Sales | ~14 | Lead lifecycle, Pipedrive CRM sync |
| Payments | ~12 | Ödeme işlemleri, sözleşmeler |
| Content | ~12 | Makale, duyuru, medya |
| Education | ~10 | Üniversite, fakülte, lise, kolej |
| Communication | ~6 | Bildirimler, video odaları |
| Config & Meta | ~12 | Sistem konfig, referans verileri |
| Logging & Audit | ~7 | Loglama, audit trail |
| Family | ~5 | Aile yönetimi (K-12) |
| Misc | ~18 | Auth, 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 NULL2. 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 listesicustomer_agreements.product_arge— AR-GE ürün bilgisipipedrive_deals.details— CRM verinotifications.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
| Kavram | Açıklama |
|---|---|
| YÖK Kodu | Türk Yükseköğretim Kurulu resmi okul kodu |
| IYS | İleti Yönetim Sistemi — Türk GDPR eşdeğeri |
| Plaka Kodu | locations tablosundaki il kodu (01=Adana, 34=İstanbul…) |
| Inflation Rate | Enflasyona bağlı fiyat güncelleme sistemi |
| ERP Kodu | Müşteri firmalarının muhasebe entegrasyon kodu |
| Py (Proje Yönetim) | İç CRM projesi — py_schools, py_profile_point vs. |
İlgili Notlar
Related
- database-data-scientist-guide — DS için pratik sorgu rehberi
- database-schools-domain — Schools domain detayı
- database-leads-payments-domain — Leads & payments detayı
- api-school-filter-search — school_filters kullanım detayı
- api-b2b-vs-b2c — B2B ve D2C farkları