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ı.