Data scientist için birincil analiz tablosu. ~100 kolon, join gerektirmez.
Neden Var?
schools tablosu normalize edilmiş — 20+ tabloya FK. Arama ve browse sorguları için çok yavaş. school_filters tüm metadata’yı async olarak önceden hesaplayıp tutar. API, okul verisi değiştiğinde bu tabloyu günceller.
Önemli:school_filters ile schools arasında kısa bir async güncelleme lag’ı olabilir (saniyeler). Finansal kesinlik gereken sorgularda doğrudan kaynak tabloya bak.
Kolon Grupları
Kimlik & İlişkiler
Kolon
Tip
Açıklama
id
bigIncrements
PK
school_id
unsignedInt
→ schools.id (UNIQUE)
school_type_id
int
→ schools_types.id
sector_id
int
→ sectors.id
college_id
int nullable
→ colleges.id
customer_id
int nullable
→ customers.id
campus_id
int nullable
→ campuses.id
Kimlik & Adres (Denormalize)
Kolon
Tip
Açıklama
name
varchar
Okul adı (schools.name kopyası)
slug
varchar
URL slug
city_id
int
→ locations.id (il)
county_id
int
→ locations.id (ilçe)
city_name
varchar
İl adı (join gerekmez)
county_name
varchar
İlçe adı (join gerekmez)
sector_name
varchar
Sektör adı (join gerekmez)
school_type_name
varchar
Okul tipi adı (join gerekmez)
Ürün & Müşteri Durumu
Kolon
Tip
Açıklama
is_customer
tinyInt
1 = B2B müşteri, 0 = müşteri değil
product_id
int nullable
Aktif ürün ID
product_price_id
int nullable
Aktif fiyat planı ID
product_name
varchar nullable
Aktif ürün adı (denormalize)
agreement_end_date
date nullable
Sözleşme bitiş tarihi
Engagement Metrikleri
Kolon
Tip
Açıklama
lead_count
int
Toplam lead (tüm zamanlar)
comment_count
int
Onaylanmış yorum sayısı
view_count
int
Profil sayfa görüntüleme
phone_view_count
int
Telefon numarası tıklama
monthly_lead_count
int
Son 30 gündeki lead
Profil Kalite Puanları (Py Sistemi)
Kolon
Tip
Açıklama
py_profile_point
int
Toplam profil tamamlanma puanı
py_about_quality
tinyInt
Hakkında bölümü kalite skoru
py_gallery_quality
tinyInt
Galeri kalite skoru
py_fee_quality
tinyInt
Ücret bilgisi doluluğu
py_contact_quality
tinyInt
İletişim bilgisi doluluğu
Ücret Bilgileri
Kolon
Tip
Açıklama
fee_min
decimal
En düşük yıllık ücret (TL)
fee_max
decimal
En yüksek yıllık ücret (TL)
scholarship_available
tinyInt
1 = burs imkânı var
discount_available
tinyInt
1 = indirim var
Filtre Bayrakları
Kolon
Tip
Değerler
Açıklama
is_boarding
tinyInt
0/1
Yatılı okul mu
is_foreign
tinyInt
0/1
Yabancı uyruklu okul mu
has_kindergarten
tinyInt
0/1
Bünyesinde anaokul var mı
is_active
tinyInt
0/1
Aktif mi
is_deleted
tinyInt
0/1
Silinmiş mi (schools.deleted_at senkronik)
School Annoucement & Badges
Kolon
Tip
Açıklama
has_most_commented_badge
tinyInt
İlçede en çok yorum badge
has_most_contacted_badge
tinyInt
İlçede en çok lead badge
has_most_viewed_badge
tinyInt
İlçede en çok görüntülenen badge
Kritik Composite Index
-- En önemli index (sırayı WHERE'de koru)INDEX (sector_id, is_customer, deleted_at, school_id)
Bu index sector_id → is_customer → deleted_at sırasıyla çalışır. WHERE koşullarında bu sırayı koru.
Örnek Sorgular
-- Özel okul müşteri dağılımı, şehir bazlıSELECT city_name, COUNT(*) as okul_sayisi, AVG(lead_count) as ort_lead, AVG(py_profile_point) as ort_profil_puaniFROM school_filtersWHERE sector_id = 2 -- Özel AND is_customer = 1 AND deleted_at IS NULLGROUP BY city_id, city_nameORDER BY okul_sayisi DESC;-- Profil kalitesi düşük aktif müşterilerSELECT school_id, name, city_name, py_profile_point, lead_countFROM school_filtersWHERE is_customer = 1 AND deleted_at IS NULL AND py_profile_point < 50ORDER BY lead_count DESC;-- Ücret aralığı analizi, okul tipi bazlıSELECT school_type_name, COUNT(*) as n, AVG(fee_min) as ort_min_ucret, AVG(fee_max) as ort_max_ucret, MIN(fee_min) as en_ucuz, MAX(fee_max) as en_pahaliFROM school_filtersWHERE deleted_at IS NULL AND fee_min > 0GROUP BY school_type_id, school_type_name;