Ben yaptığım sistemde 3 tane tablo oluşturdum.
1.Grup : RehberAlanlar = Bu tabloda Id,GrupId,Alanlar adında 3 tane alanım var. Id auto increment olarak ayarladım.GrupId yi aşağıda vereceğim RehberGruplar tablasundan alıyor.Alanlar sütununda ise json olarak rehberdeki alanların verilerini tutmaktayım.Örnek olarak (["AD","SOYAD","ADRES","İŞ","EV"]) bunu bu şekilde çoğaltıp dinamik alanlar oluşturabilirsin.
2.Grup : RehberGruplar = Bu tabloda Id,UyeId,GrupAdi,Durum adında sütunlarım var.Id autoincrement olacak 1. tablomdaki GrupId kısmına bu id atanacak.UyeId isteğe bağlı eklemeyebilirsin üyelik sistemin yoksa.GrupAdi kısmına grubun adını yazıyorum varchar yapabilirsin.Durum kısmınada 0,1 değerlerini veriyorum.Kullanıcı sildiğinde Durum 0 oluyor.Yanlışlıkla silmelere karşı 1 hafta sql de bekletiyorum grupları.Eğer geri getirilmesi istenirse tekrar Durum u 1 yapıyorum.
3. Grup : RehberNumaralar = Id,GrupId,Numara,Alanlar adında sütünlarım mevcut. Id autoincrement,GrupId RehberGruplar tablosundaki Id den geliyor,Numara alanı benim sistemimde gsm no şart olduğu için ayrı sütün olarak açtım kontrolü daha kolay oluyor benim için.Bu alanı int 10 olarak ayarladım başına 0 ekletmiyorum numaraların.Alanlar sütununda verileri yine json olarak tutuyorum.Burdaki mantık RehberAlanlar daki Alanlar sütünuyla bu tabladaki Alanlar sütunu elemanları eşit olmalı ve yukarıdaki gibi her alanın altına kendi elamanı gelmeli. Örnek olarak
RehberAlanlar : (["AD","SOYAD","ADRES","İŞ","EV"])
RehberGruplar: (["YUNUS","AKYOL","İZMİR...","0232XXXXXXX","0232XXXXXXX"])
Bu şekilde yapabilirsin tablolarını.Sorgularına görede indexlerini verirsin sistemin çok yorulmadan çalışır.Şuanda 400gb tan fazla rehber tablom var herhangi bir sıkıntı yaşamıyorum.