Pyqt5 ve sqlite ile bir alışkanlık/yapılacaklar takibi yapan ufak bir uygulama yapıyorum. Tüm alışkanlıkları içeren bir alışkanlıklar tablosu ve kullanıcının oluşturduğu hafta tabloları var. Kullanıcı yeni bir hafta oluşturunca alışkanlıkların hepsi o tabloya ekleniyor ve kullanıcı yeni alışkanlıklar (her iki tabloya da ekleniyor) ve yapılacaklar (sadece hafta tablolarına ekleniyor) ekleyebiliyor. Sorun şu:
Alışkanlıkları haftalarla ne zaman senkronize etmeliyim?
Bir kullanıcı yeni bir alışkanlık oluşturduğunda, bunu nereye eklemeliyim? Tüm yeni tablolara ekliyorum, ancak haftanın 11.08.2025 ile başladığını varsayalım. Bir kullanıcı, herhangi bir nedenle 18.08.2025 haftasını zaten oluşturmuş. Şimdi yeni bir alışkanlık oluşturursa, bu 18.08.2025 haftasında görünmeyecek.
Eksik tüm alışkanlıkları tüm tablolara eklersem, kullanıcı o alışkanlığı o tablodan kasıtlı olarak sildiğinde, tekrar eklenir.
O alışkanlığı hangi tarihten sonra ekleyeceğimi sorarsam, o tarihten sonraki tüm tarihleri bulup o alışkanlığı eklemem gerekir. Bu çok ağır ve yavaş olmaz mı?
Her degisimden sonra. Hatta mumkunse degisim esnasinda.
Bahsettiginiz yapiya sadik kalirsak, mevcut hafta tablolarinin tamamina eklemelisiniz. Veya belki sadece su anda ve gelecektekilere.
18.08 haftasinda neden gorunmeyecek? Senkronize etmenin amaci bu haftada gorunmesi degil mi?
O zaman bunu yapmayiniz. Senkronizasyon, her seyi her yere eklemek demek degil. Baglami mesela sadece yeni eklenenlere, aliskanligin mevcut bulundugu tablolara, vb. kisitlayabilirsiniz.
Bilmem?
Sistemin kodu elinde olan birinden deneyip olcmesini isteyebilirsiniz.
Sahsen benzer bir sistemi yaptigimda kullanicinin haftalik programi bir tabloda degildi. Tekrar eden olaylar ile tek seferlik degisimler ayri tablolarda tutuluyor, haftalik programlar bunlardan olusturuluyordu.
böyle durumlarda en iyi yöntem, alışkanlığı eklerken başlangıç tarihini de kaydetmek. Her haftayı görüntülerken, sadece başlangıç tarihi o haftadan önce veya o hafta olan alışkanlıkları listeleyebilirsin. Böylece mevcut haftalara alışkanlık eklemeye gerek kalmaz, veritabanı daha temiz ve hızlı olur. Ayrıca, kullanıcının sildiği alışkanlıkları tekrar ekleme sorunu da ortadan kalkar.