Migrasi IOS DBAccess ke struktur tabel baru

Saya membaca dokumentasi DBAccess untuk memahami apakah itu sesuai dengan kebutuhan saya.

Pertanyaan saya adalah tentang migrasi.

Misalnya: Saya memiliki aplikasi yang sudah ada, diimplementasikan dengan DBAccess, menggunakan tabel "Orang" dengan bidang berikut:
- id
- nama
- nama keluarga
- alamat

Apa yang terjadi pada database jika saya menambahkan dua kolom lain ke kelas Person:
- email
- nomor_telepon
?
Apakah DBAccess secara otomatis menambahkan kolom baru ke tabel database?
Apakah ada cara untuk menentukannya? nilai default untuk bidang baru yang ditambahkan?


person Patrik    schedule 14.04.2015    source sumber


Jawaban (1)


Ya, jika Anda menambahkan dua properti tambahan tersebut, DBAccess akan secara otomatis menambahkan kolom tambahan.

Saat ini, tidak ada kemampuan untuk menentukan nilai default untuk kolom baru, semuanya akan diinisialisasi dengan NULL seperti yang Anda harapkan.

Saran Anda tentang nilai default menarik, saya terkejut hal itu belum pernah muncul sebelumnya. Tampaknya mudah diterapkan dan merupakan fitur yang cukup logis. Satu-satunya hal kecil yang aneh adalah jika saya menambahkan metodenya

+ (id)defaultValueForProperty:(NSString*)propertyName;

ke kerangka kerja, dan kemudian dipanggil saat membuat kolom baru, apakah pengguna mungkin mengharapkan hal ini terjadi per baris dan tidak sekali saat membuat kolom, sehingga mereka dapat menyesuaikan nilai itu, mungkin menghitungnya dari konten di tempat lain.

Saya akan menikmati masukan Anda mengenai apa yang menurut Anda merupakan solusi yang tepat.

Saya pribadi condong ke arah metode kelas dan metode instan, dan jika pengembang mengimplementasikan metode instan, maka setiap baris akan diurai dan ditulis ulang yang mungkin lambat, tetapi juga merupakan fitur yang sangat berguna.

Apa pun yang terjadi, tidak akan memakan waktu lebih dari satu jam atau lebih untuk menambahkan fitur sederhana seperti itu. Kita hanya perlu melihat apakah kita bisa melihat adanya jebakan.

Terima kasih

person Adrian_H    schedule 14.04.2015
comment
Menurut saya, metode kelas akan sangat berguna, khususnya saat menambahkan bidang baru (atau membuat) yang tidak boleh nol. - person Patrik; 14.04.2015
comment
Metode contoh, seperti yang Anda katakan, bisa sangat lambat untuk tabel besar. Mungkin lebih baik memberikan cara menjalankan beberapa query sql sebagai perbaikan untuk data yang ada, ini bisa lebih cepat. Atau kemungkinan untuk mengimplementasikan fungsi kelas yang dipanggil setiap kali tabel diubah. - person Patrik; 14.04.2015
comment
Saya menerimanya, jadi saya memahami alasan Anda di balik ini adalah untuk membuat pertanyaan berperilaku sendiri. Seperti WHERE nama keluarga == '' ATAU nama keluarga IS NULL. Sebab, semua objek akan memiliki nilai properti defaultnya. Misalnya, jika Anda menambahkan usia kolom, meskipun nilai kolom di SQLite adalah NULL, nilai di kelasnya adalah 0. Ketika objek tersebut dipertahankan, maka objek tersebut akan disimpan dengan 0 dan bukan NULL. Saya akan melakukan perubahan karena sederhana, tetapi saya ingin tahu apakah ada skenario lain yang harus saya pikirkan, yang belum saya pertimbangkan. - person Adrian_H; 14.04.2015
comment
Kami sedang menerapkan mekanisme peningkatan, ini adalah masalah yang sulit untuk diselesaikan. Kami sebenarnya memiliki sistem revisi, di mana entitas dipanggil dengan revisi saat ini dan Anda dapat menjalankan beberapa SQL terhadapnya, tetapi ini merusak sifat kaku DBAccess. Saya akan menjelaskan dengan cepat hal itu. Kami memeriksa integritas setiap properti yang disetel dan karena tidak ada cara untuk melakukan apa pun yang dapat merusak integritas langsung dengan DB (Anda bisa melakukannya, tetapi tidak menggunakan kerangka kerja), kami tahu bahwa selain kesalahan SQLite internal yang serius, komitmen dijamin berhasil. - person Adrian_H; 14.04.2015
comment
Saya memahami penjelasan Anda dan saya setuju dengan Anda mengenai masalah integritas. Saya akan mulai menggunakan DBAccess di proyek saya berikutnya, jawaban Anda membantu saya mengambil keputusan, jadi... terima kasih atas dukungan Anda :) - person Patrik; 15.04.2015
comment
Hai @Patrik, v1.06.1 memiliki perubahan yang dibahas di atas. Sedikit berubah karena kami merasa kamus adalah implementasi yang lebih bersih. Berikut ini tautan ke dokumentasi dan contohnya. Terima kasih, Adrian. db-access.org/default-property-values - person Adrian_H; 15.04.2015