Proje: OkulUp API · Hub: OkulUp API — Decisions
FK Tipi — unsignedInteger vs unsignedBigInteger Kuralı
Karar
schools ve users tabloları eski migration’larla increments('id') (unsigned int, 32-bit) olarak oluşturuldu. Yeni tablolar Laravel default’u olan id() (bigIncrements, unsigned bigint, 64-bit) kullanır. FK’lar referans edilen tablonun PK tipiyle eşleşmek ZORUNDA.
Kural
// schools.id → increments → FK: unsignedInteger
$table->unsignedInteger('school_id')->nullable();
// users.id → increments → FK: unsignedInteger
$table->unsignedInteger('user_id')->nullable();
// classes.id → id() (bigIncrements) → FK: unsignedBigInteger
$table->unsignedBigInteger('class_id')->nullable();
// YANLIŞ:
$table->foreignId('school_id') // bigint FK oluşturur → type mismatch hatasıNeden Bu Durum Oluştu
Projenin ilk migration’ları increments() kullandı (Laravel eski default). Sonraki tablolar Laravel 11+ default’u olan id() (bigIncrements) ile oluşturuldu. Geçiş döneminde iki farklı tip yan yana var.
Alternatif Düşünce
Schools ve users tablolarını bigint’e migrate etmek mümkün ama mevcut veri + test coverage riski nedeniyle yapılmadı.
Related
- veritabani-sema — tüm tablo ve FK tipleri
- api-kod-konvansiyonlari — migration yazım kuralları