Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
karakter kaldı

Veritabanında bir hücrede sıralı veri saklamak

Bu gereksinimii sık sık yaşıyorum. Örneğin bir kullanıcının verileri veritabanında genelde bir tek satırdaki hücrelerde saklanıyor.
id, adi, soyadi, mail, sifre, vs, vs,
Bir kullanıcı için örneğin beğendiği ürünleri, arkadaş olduğu kişileri saklarken nasıl bir yol izlemeli. Ben genelde kullanıcı bilgilerini içeren satıra bir sütun daha açıp (örneğin `favorileri`) favori ürünlerinin id'lerini burada aralara virgül koyarak sıralıyorum. Yani şu şekilde;

id adi soyadi mail sifre favorileri
1 Ali x x x 1,2,12,43,43
2 Veli x x x 8,2,6,12,43

Verileri bu hücreden çekip virgüle göre ayırarak diziye atıyorum ve ordan işlem yapıyorum. Bu da bazı sıkıntılara yol açıyor. Örneğin 43 id'li ürünün kaç kişi tarafından beğenildiğini hesaplamak veritabanının anasını ağlatıyor. Ya da kullanıcının beğendiği ürünlerde ekleme, çıkarma, değiştirme yapması da bir o kadar zahmetli :( Ya da 2 numaralı ürün kayıtlardan kaldırıldığında tek tek tüm hücrelerden bunun bulunması silinmesi ve virgüllerde ayraçlarda hata olmaması gerekiyor. Çünkü o sütun varchar. Yani string yapıda :(

Bunun yerine ürünün satırında ekleyenler gibi bir sütun oluştursak ve id leri orada listelesek yine aynı sıkıntılar devam ediyor. Ne yapmalı, bunun çözümü nedir?
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap Doğru Cevap

  • Avatar of altinburak
    2 yıl önce
    cevap - soru
    Kullanıcılar Tablosu
    ---------------------------
    kulid
    ad
    soyad

    Begenilenler Tablosu
    ---------------------------------
    urunid
    kulid

    Urunler Tablosu
    ----------------------
    urunid
    ad


    Şeklinde bir yapı ile hem sorguların rahat olur hemde daha profesyonel bir yapı ile çalışmış olursun

Cevaplar

  • Avatar of kursattokpinar
    2 yıl önce
    5 cevap - 24 soru
    tablo göstermek istemiştim ama aradaki boşluklar silinmiş sanırım. Demek istediğim anlaşılmılştır umarım :(
    • Avatar of caglaror caglaror
      Eğer çok önemli bir yazılım ise (ticari veya pro) ayrı tablolar yaratmanı öneririm. Ürünler, Üyeler, Beğeniler, Puanlar, vb...
      SQL ile bu sayede istediğin hesaplamaları daha hızlı yaptırabilirsin.
      Ama şu an kullandığın sistem de de yükü SQL'e yıkman mümkün. Bunun için kayıt esnasında virgüllerle ayırmanın yanı sıra her kayıt tipine bir işaret ekleyebilirsin.
      Örneğin:
      ürünidsi eklerken başına $U$ yazdır, bu vt de kalabalığa (ve yer kaybına) neden olsa da SQL ile aramalarda (Ortalama, toplam, toplamsayı alma işlemlerinde) işini netleştirecektir.

      En sağlıklı çözüm yine de ayrı tablolardır. Bu teknik benimde kullandığım sağlam bir teknik. Ayrıca hesapta olmayan yeni alanlar için (en beğenilmeyen ürün diye bir alan gerekirse örneğin) yine SQL ile bir tablo yaratabilir ve verileri orada tutmaya devam edebilirsin.
      İyi çalışmalar
      2 yıl önce yazılmış
  • Avatar of fthkck
    2 yıl önce
    20 cevap - 6 soru
    "favori_urunler" adında bir tablo daha açıp,kullanıcı “id” ve ürünler “id” alanlarına satır satır ekleme yapılabilinir..Bu şekilde ki bir yapıda kullanıcının favori ürünlerini kolay şekilde listeleme,silme,toplamını alma,tarihe göre belirleme gibi vb. işlemleri yapabilinir.
  • Avatar of zugur
    2 yıl önce
    21 cevap - 0 soru
    Kullanıcının özellikleri ayrı tabloda ürünler ile olan bilgileri ise ayrı tabloda olmalıdır.
    Yani kullanıcı tablosunda her kullanıcıya ait tekil bir id ve kullanıcının adı, soyadı, mail gibi bilgileri olmalıdır.

    Yine ürünler içinde ürünün özelliklerini belirten ayrı bir tablo olması gerekir. Örneğin ürünün adı, fiyatı, barkodu gibi. Daha sonra kullanıcı ile ürün arasındaki ilişkiyi de yapılan hareketleri izlemek amacıyla başka tabloda tutmanız gerekir.

    örnegin

    kullanıcı tablonuz

    kullaniciId adı soyadı
    1 ali can

    ürün tablonuz
    urunId urunAdi fiyat
    5 kalem 5

    kullanıcıUrunHareket
    hareketId kullanıcıId urunId puan
    1 1 5 90

    gibi olduğunda gerekli raporlamaları daha hızlı alabilirsiniz ve string parçalama işlemleri ile uğraşmanıza gerek kalmaz.