--- title: VYS SQL Öğrenme emoji: 🗃️ colorFrom: blue colorTo: indigo sdk: gradio app_file: app.py pinned: false short_description: Adım adım SQL öğreten ders uygulaması --- # 🗃️ VYS SQL Öğrenme Uygulaması BÖTE lisans öğrencileri için, en basit `SELECT`'ten çok tablolu `JOIN` ve alt sorgulara kadar **25 konuluk** sıralı bir SQL kursu. Her konuda öğrenci: 1. Kavramı kısa bir anlatımla okur, 2. **Çalıştırılmış bir örnek** ve onun sonucunu görür, 3. Kendi **görevini** yazar, 4. Sınırsız deneme yapar; hata alırsa açıklama ve ipucu alır. Her 5 konuda bir **⭐ Geriyayılım görevi** gelir: o ana kadar öğrenilen her şeyi tek bir sorguda birleştiren kapsamlı tekrar. ## Mimari — neden bu şekilde **Doğru/yanlış kararını dil modeli vermez.** Öğrencinin SQL'i gerçek bir SQLite veritabanında çalışır; sonucu, referans çözümün aynı veriler üzerindeki sonucuyla karşılaştırılır. Farklı yazılmış ama aynı sonucu üreten çözümler de doğru sayılır. **Dil modelinin tek işi öğretmek:** hata mesajını Türkçeleştirmek ve cevabı söylemeden ipucu vermek. Bu ayrım önemli — model "bu sorgu doğru mu" sorusuna güvenilir cevap vermez, ama "bu hata ne demek" sorusuna verir. **Maliyet:** SQL çalıştırma ve görev kontrolü yereldir, ücretsizdir, kotadan düşmez. Yalnızca `💡 İpucu İste` butonu model çağırır. ## Dosyalar | Dosya | İşi | |---|---| | `app.py` | Gradio arayüzü, giriş, ipucu kotası | | `ilerleme.py` | İlerlemenin HF Dataset'e kaydı | | `mufredat.py` | 25 konunun anlatımı, örneği, görevi, referans çözümü | | `veritabani.py` | Yalıtılmış SQLite kum havuzu ve tohum veri | | `degerlendirme.py` | Deterministik görev doğrulaması | | `kullanici_uret.py` | Öğrenci hesaplarını üretir (yerel araç, Space'e yükleme) | | `rapor.py` | Sınıf ilerleme raporu çıkarır (yerel araç, Space'e yükleme) | ## Kurulum ### 1. Öğrenci hesapları ```bash python kullanici_uret.py 45 ``` `ogrenciler.csv` → dağıtacağın liste. Ekrana basılan satır → `APP_USERS`. ### 2. Space secret ve variable'ları | Ad | Tür | Değer | |---|---|---| | `HF_TOKEN` | Secret | Fine-grained token — aşağıdaki iki izin | | `APP_USERS` | Secret | `ogr01:abc123,ogr02:def456,...` | | `ILERLEME_DEPOSU` | Variable | `SSSAssist/vys-sql-ilerleme` | | `MODEL` | Variable | `openai/gpt-oss-120b` | | `IPUCU_GUNLUK_LIMIT` | Variable | `40` | | `IPUCU_TOPLAM_LIMIT` | Variable | `2000` | Zorunlu olanlar `HF_TOKEN` ve `APP_USERS`. `ILERLEME_DEPOSU` boş bırakılırsa uygulama çalışır ama ilerleme kaydedilmez (öğrenciye uyarı gösterilir). ### Token izinleri Fine-grained token, org olarak `SSSAssist/*` seçili, **iki** kutu işaretli: - **Inference** → `Make calls to Inference Providers on behalf of selected orgs` - **Repositories** → `Write access to contents/settings of repos in selected orgs` İkincisi ilerleme kaydı için gerekli. Yalnızca ipucu isteniyorsa birincisi yeter. ### İlerleme deposu Önce bir **private dataset** oluşturun: huggingface.co/new-dataset → owner `SSSAssist`, ad `vys-sql-ilerleme`, görünürlük **Private**. Her öğrenci kendi dosyasına yazar: `ilerleme/ogr01.json`. Ayrı dosya olmasının sebebi yarış koşulu: tek ortak dosyada aynı anda çalışan öğrenciler birbirinin kaydını ezerdi. Kayıt iki anda yapılır: bir görev **ilk kez doğru** çözüldüğünde ve öğrenci **konu değiştirdiğinde**. Her ipucunda yazmak gereksiz commit üretirdi. ### Sınıf raporu ```bash export HF_TOKEN=hf_... python rapor.py SSSAssist/vys-sql-ilerleme ``` Kim nerede, kaç deneme yapmış, kaç ipucu almış, sınıfın en çok zorlandığı konular hangileri — hepsini ekrana basar ve `sinif_raporu.csv` üretir. ### 3. Space'e yüklenecek dosyalar `app.py`, `mufredat.py`, `veritabani.py`, `degerlendirme.py`, `ilerleme.py`, `requirements.txt`, `README.md` `kullanici_uret.py` ve `rapor.py` yerel araçlardır, yüklemeyin. ### 4. Yerelde deneme ```bash pip install -r requirements.txt export HF_TOKEN=hf_... export APP_USERS="test:test123" export ILERLEME_DEPOSU=SSSAssist/vys-sql-ilerleme # istege bagli python app.py ``` ## Veritabanı şeması | Tablo | Sütunlar | |---|---| | `ogrenciler` | `id`, `ad`, `soyad`, `sinif`, `sehir`, `dogum_yili` | | `dersler` | `id`, `ad`, `kredi`, `ogretmen` | | `notlar` | `id`, `ogrenci_id`, `ders_id`, `puan` | 12 öğrenci, 5 ders, 30 not kaydı. Veriler bilinçli olarak Türkçe karaktersiz yazıldı; öğrenci `WHERE sehir = 'Eskisehir'` yazarken karakter sorunu yaşamasın. Sınır değerleri (tam 50 ve tam 60 puan) kasten eklendi: `<` ile `<=` arasındaki farkı görev kontrolü yakalayabilsin diye. ## Konu sırası 1-9 Temel sorgulama · **10 ⭐** · 11-14 Özetleme ve gruplama · **15 ⭐** · 16-19 Tablo oluşturma ve değiştirme · **20 ⭐** · 21-24 JOIN ve alt sorgu · **25 ⭐** ## Bilinen sınırlar - **İlerleme dataset'e yazılıyor**, ama depo erişilemezse öğrenci uyarı görür ve o oturum bellekte çalışır. Sessizce sıfırlama yapılmaz. - Dönem boyunca dataset'te yüzlerce commit birikir (öğrenci başına ~25-50). Bu HF için sorun değil ama depo geçmişi uzun olur. - **İpucu kotası bellekte.** Space yeniden başlarsa sıfırlanır; asıl bütçe koruması `IPUCU_TOPLAM_LIMIT`'tir. - Ücretsiz CPU donanımında 48 saat ziyaretçi olmazsa Space uyur. - Parolalar `APP_USERS` içinde düz metindir. Sınıf içi erişim kontrolüdür, gerçek bir kimlik doğrulama sistemi değildir.