Veritabanı Tasarım Önerisi?
Merhaba arkadaşlar, öncelikle şuan hali hazırda güzellik salonum için bir satış takip sistemi yaptım.
Fakat benim yapmak istediğim daha detaylı bir durum çünkü şuan ki sistemde artık çok fazla aksaklık olmaya başladı ve sistem sıkıntı vermeye başladı.
Sistem Gereksinimleri
- Müşteriler kendi panelinden satın aldıkları hizmetleri, kimden satın aldıklarını, satın aldıkları ürünlerin kaç taksitinin kaldığını. Hangi taksitleri ödeyip ödemediğini ve sistem üzerinden iyzico sanal pos sayesinde kredi kartı ile ödeme ve randevu oluşturma yapabilecekler.
- Satış danışmanı üye kayıt, satış ekleme-çıkarma, ödeme takip(ekleme-çıkarma) yapabilecekler.
- Yönetici hizmet ekleme-çıkarma, satış danışmanı ekleme-çıkarma, mali kayıtları görme, site istatistiklerini görme ve diğer tüm işlemleri yapabilecekler.
- Ödeme takip kısmı ücretini ödemeyen müşterilere uyarı mesajı gitmesi - sistemde ödeme yapmayan üyeleri detaylı bir şekilde işlemlerine kadar gösterme.
Güncellenmiş sistem gereksinimleri tamamen bu şekildedir. Web ve Mobil üzerinden uygulamayı geliştireceğim için veritabanı tasarımı aşırı önemli. Çünkü satış işlemlerinde taksit seçeneği var ve ödemeleri şuan elle nakit şekilde alıyoruz. O yüzden sistemde nakit ve kredi kartı girdisi mevcut.
Benim tasarladığım veritabanı aşağıda ki şekildedir. Ödemeler toplasında satışta belirlenen taksit tutarı kadar o satiş id sine ait ödemelerin girdisi oluyor. Bu yüzden satış kısmında birden çok hatayla karşılaşabiliyorum. Sitede ki konularımdan bakabilirsiniz.
Ayrıyetten kapora muhabbeti de sistemde mevcuttur. Kayıt olan müşteri kapora verdiyse genel satıştan düşüp taksitlendirme yapılmaktadır.
Dükkan Tablosu
Müşteri Tablosu
Ödemeler Tablosu
Satışlar Tablosu
Ödeme Takip Tablosu
Ürünler Tablosu
Yönetim Tablosu
Birçok hatam olabilir siz değerli bilgili arkadaşlarımdan, abilerimden öğütler ve örnekler bekliyorum. Bende bu doğrultuda hatalarımı düzeltim daha sistematik bir uygulama geliştirmek istiyorum.
Sisteme kayıt alırken şu yöntemle şu verileri kayıt et gibi önerilerinize de açığım cevap veren, vermeyen herkese şimdiden teşekkür ederim.
siparişler
id, urun_id, musteri_id hizmet, fiyat, taksit, odemeyontemi, kapora, durum(ödemin bitip bitmediğini kontrol edecek), tarih(timestamp current), detay,
ödemeler
id, siparis_id, musteri_id, hizmet, satici, tarih(taksitin ödenmesi gereken tarih), tarih2(odemin yapıldığı tarih), odemeyontemi, ödeme, taksit, durum, notlar
müşteriler
musteriler, isim, soyisim, telefon vs.
sipariş kolonlarda gözüken yapıya uygun şekilde girilir.
siparişler tablosondaki sipariş id ile durum baz alınarak ödemeler sayfasında sorgu yapılır
ödenmemiş hizmetler listelenir
belli bir müşteriye ait ödenmemiş bilgileri listelemek için sorguya musteri id eklenebilir
tüm ödenmemişleri görüntülemek için durum baz alınarak listeleme yapılabilir
güncelleme kısmında muhtemelen olumsuz durumlarda kullanacağı için, notlar kullanılarak neden güncellendiği bilgisi kayıt edilir bu alanı text yapıp bir tinymce eklentisini form alanında kullanırsan şaşırtıcı derecede verimli olur senin için
ödeme alma gelirsek, insert için çekilen veriler form alanlarında gerekli koşula uygun hazırlanır örneğin <input type="hidden" name=siparis_id value="<php? echo row['siparis_id']; ?>"> (bu form olmadan da yapılabilir, basite indirgemek için form ekledim) ödeme tutarı muhtemelen manuel girileceği için bir form verisi girilir daha sonra mevcut taksit durumu +1 arttırılır ya da tam taksit verildiyse -1 düşürülür bu nasıl kolayınıza geliyorsa ve ödemeler tablosuna yeni bir kayıt eklenir
bu mantığa görede takistler 8 ile başlıyorsa ödemelerde 8 den 1 düşülür ya da 0 dan başlar 1 1 artar 8 olana kadar, ödeme hesaplamasınıda fiyat/taksit olarak tutacağını varsaydık tabiki 1000/5 ise her taksit 200 olacaktır vesaire burada veritabanının önemi kadar onu nasıl kullanacağın da önemli. bir önceki mesajımda tamamen matematiksel işlemler üzerinden tek tabloda 3 kolona bazı değişiklikler uygularak en basit haliyle kendimce bir şeyler anlatmaya çalışmıştım. yani veritabanı kadar, php tarafında da iyileştirmeler yapmanız gerekiyor.