• 14-12-2021, 15:12:51
    #1
    Merhaba arkadaşlar,

    Aşağıdaki resimdeki gibi bir tablom var bu tablodaki verileri veritabanına kayıt ederken performans kaybı yaşanmaması için nasıl bir tablo yapısı oluşturmamı tavsiye edersiniz. 2024 Yılı ilerleyen süreçte günü geldikçe çoğalacak 2025-2026-2027 vs.

  • 14-12-2021, 15:22:20
    #2
    odemeler tablosu oluşturur içersine ID, GYA, ODEME ve TARIH şeklinde kolanlar eklerdim. Seçilen tarihi unix tarih formatına çevirip veritabanında saklar ve GYA ve ODEME kolanları için 1 ve 0 parametlerine göre ekleme yapardım. Bence bu şekilde hem hızlı olur hemde yönetmesi kolay olur.
  • 14-12-2021, 15:36:24
    #3
    yanlış anlamadımsa resimde gösterdiğim gibi dediniz. Bu mantık ile örnek olarak sadece 25 numaralı id nin 2017 yılına ait 24 verisi olacak diğer yıllarıda eklersek tek bir id ye ait çok veri oluyor bunu id sayısını çoğalttıkça diye düşünürsek veri sayısı çok aşırı oluyor

  • 14-12-2021, 15:49:40
    #4
    ID değeri auto olacak, siz oraya müdahale etmeyin. YIL şeklinde yazdığınız kolunu TARIH olarak değiştiriniz. Bir önceki fotoğrafınızda yer alan örneğin OCAK 2018 tarihini unix time formatına çevirip TARIH kolununa yazdırdığınızda sizin istediğiniz hale dönüşecektir.
  • 14-12-2021, 15:55:32
    #5
    hocam aslında benim istediğim az kayıt ile çok iş yapabilmek yani bir müşterinin sadece 2017 yılına ait 24 tablosu var.

    Müşterinin 10 yıllık hesabını tutarsak 24*10=240 veri girişi olacak tek bir müşteriye ait.

    Müşteri sayısını ortalama 1000 desek 1000*240= 240.000 veri girişi olacak. Bu sayıyı daha aza nasıl indirebilirim.
  • 14-12-2021, 16:04:25
    #6
    İndiremezsiniz, çünkü her müşterinin herhangi bir ayda bu ödemeyi yapıp yapmadığını bilmek istiyorsunuz. Bu nedenle bu veriyi eklemek zorundasınız. 240.000 veri gözünüzü korkutmasın ben şu an sadece log dosyamda yarım milyondan fazla satır veri tutuyorum. Önemli olan bu veriyi tutarlı şekilde çağırıp işleyebilmek.
  • 14-12-2021, 16:20:58
    #7
    Veritabanına kayıt ederken checbox ların value lerini şu şekilde yapsam

    value = "2017 Ocak GYA" -  value = "2017 Ocak odeme"
    value = "2017 Şubat GYA" - value  = "2017 Şubat  odeme"
    value = "2017 Mart GYA" - value = "2017 Mart odeme"
    value = "2017 Nisan GYA" - value  = "2017 Nisan odeme"
    Bu sayede seçili olmayan veritabanına eklenmeyecek sitede gösterirkende veritabanında bu valuede bir içerik varsa chacbox u işaretle diyeceğim.
  • 14-12-2021, 16:45:30
    #8
    Ustadım tarihleri böyle yaparsanız geçmişe dönük kayıtları listeletirken problemler yaşarsınız. Unixtime formatını kullanın bence... Karar sizin tabiki, başta yazdığınız gibi hız olmasını istiyorsanız benim önerdiğim yöntemi kullanabilirsiniz. Ayrıca 0 olan kayıtları tutmak zorunda değilsiniz. Bu şekilde satır sayınız azalabilir.
  • 15-12-2021, 08:07:12
    #9
    PARTITION kullanırsanız tablonuzdaki 240bin satır sizi performans olarak çok etkilemez. Yine de daha az satır sayısı olsun istiyorsanız inputları json verisi olarak tutabilirsiniz.

    id -- customer_id -- year -- confirmations
    1 -- 25 -- 2017 -- [{"ay": "Ocak", "gya": 1, "odeme": 0}, {"ay": "Şubat", "gya": 1, "odeme": 0}, {"ay": "Mart", "gya": 1, "odeme": 0}, ........]
    1 -- 25 -- 2018 -- [{"ay": "Ocak", "gya": 1, "odeme": 0}, {"ay": "Şubat", "gya": 1, "odeme": 0}, {"ay": "Mart", "gya": 1, "odeme": 0}, ........]
    1 -- 25 -- 2019 -- [{"ay": "Ocak", "gya": 1, "odeme": 0}, {"ay": "Şubat", "gya": 1, "odeme": 0}, {"ay": "Mart", "gya": 1, "odeme": 0}, ........]

    1000 müşteri X 10 yıllık kayıt. Her yıl için 1 satır olacağı için sadece 10bin satır olur. Arayüzde json parse ederek istediğiniz işlemi yapabilirsiniz.

    SNDizayn adlı üyeden alıntı: mesajı görüntüle
    hocam aslında benim istediğim az kayıt ile çok iş yapabilmek yani bir müşterinin sadece 2017 yılına ait 24 tablosu var.

    Müşterinin 10 yıllık hesabını tutarsak 24*10=240 veri girişi olacak tek bir müşteriye ait.

    Müşteri sayısını ortalama 1000 desek 1000*240= 240.000 veri girişi olacak. Bu sayıyı daha aza nasıl indirebilirim.