SQL / README.md
mfirat007's picture
Upload 9 files
3fccbfd verified
|
Raw
History Blame Contribute Delete
5.63 kB
---
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.