Şema
Isar koleksiyonlarıyla veri modellerinizi tanımlayın
Şema
Isar ile uygulama verinizi sakladığınızda koleksiyonlarla çalışırsınız. Koleksiyon, veritabanı tablosu gibidir ve yalnızca tek bir Dart nesne türünü içerebilir.
Koleksiyonun Anatomisi
Her Isar koleksiyonunu @collection veya @Collection() ile anotasyonlayarak tanımlarsınız.
@collection
class User {
Id? id;
String? firstName;
String? lastName;
}Bir alanı kalıcı kılmak için Isar'ın ona erişebilmesi gerekir. Alanı public yapın veya getter/setter sağlayın.
Veri Türleri
Isar aşağıdaki veri türlerini destekler:
Primitif Türler
@collection
class PrimitiveTypes {
PrimitiveTypes(this.id);
final int id;
bool? boolValue;
int? intValue;
double? doubleValue;
DateTime? dateValue;
String? stringValue;
}Listeler
@collection
class ListTypes {
ListTypes(this.id);
final int id;
List<bool>? boolList;
List<int>? intList;
List<double>? doubleList;
List<DateTime>? dateList;
List<String>? stringList;
}Listeler null değer içeremez. Bunun yerine nullable türler kullanın.
Enum'lar
enum Status { active, inactive, pending }
@collection
class Task {
Task(this.id);
final int id;
@enumerated
Status? status;
@Enumerated(EnumType.ordinal)
Status? ordinalStatus;
@Enumerated(EnumType.name)
Status? namedStatus;
}Enum değerinin indeksini saklar (varsayılan).
// Status.active = 0
// Status.inactive = 1
// Status.pending = 2Enum değerinin adını String olarak saklar.
// Status.active = 'active'
// Status.inactive = 'inactive'Enum içinde tanımlanan özel değeri saklar.
enum Status {
@EnumValue(1) active,
@EnumValue(2) inactive,
@EnumValue(3) pending,
}Gömülü Nesneler
@embedded
class Address {
String? street;
String? city;
String? country;
}
@collection
class Person {
Person(this.id);
final int id;
String? name;
Address? address;
List<Address>? addresses;
}Id'ler
Her koleksiyon nesneleri benzersiz tanımlamak için bir Id alanına ihtiyaç duyar.
@collection
class User {
User(this.id);
final int id;
String? name;
}Otomatik artan ID'ler için, ekleme sırasında collection.autoIncrement() metodunu kullanın:
isar.write((isar) {
final user = User(isar.users.autoIncrement());
isar.users.put(user);
});Özel ID'ler
@collection
class User {
User(this.id);
final int id; // ID'yi siz yönetirsiniz
String? name;
}Alan Anotasyonları
@Index
Sorgu performansını iyileştirmek için indeks oluşturun:
@collection
class User {
User(this.id);
final int id;
@Index()
String? email;
@Index(type: IndexType.value)
String? username;
@Index(caseSensitive: false)
String? name;
}@Ignore
Alanları depolamadan hariç tutun:
@collection
class User {
User(this.id);
final int id;
String? name;
@ignore
String? temporaryData; // Saklanmaz
}@Name
Veritabanında alan adını değiştirin:
@collection
class User {
User(this.id);
final int id;
@Name("user_name")
String? name;
}@Size
String boyutunu sınırlandırın:
@collection
class User {
User(this.id);
final int id;
@Size(max: 100)
String? shortText;
@Size(max: 1000)
String? longText;
}Bileşik İndeksler
Birden fazla alan üzerinde indeks oluşturun:
@collection
@Index(composite: ['lastName', 'age'])
class User {
User(this.id);
final int id;
String? firstName;
String? lastName;
int? age;
}İlişkileri Modellemek
Isar Plus v4, çalışma zamanı link tipleri yerine gömülü nesneler ve açık ID alanlarıyla ilişkileri modeller. Depodan alınmış örnekler görmek için İlişkiler sayfasına göz atın.
Migration
Isar çoğu durumda şema geçişlerini otomatik yönetir:
- Yeni alan eklemek
- Alan kaldırmak
- Alan türünü değiştirmek (veri kaybıyla)
- İndeks eklemek/kaldırmak
Var olan bir alanın türünü değiştirmek, o alan için veri kaybına yol açar.
Sonraki Adımlar
Son Güncelleme