tablo yapısı ve sql sorgusuna dair
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
tablo yapısı ve sql sorgusuna dair
merhaba
Mevcut bir program için sağlam raporlar yazmam ve ya yazılımı yeniden yapmam gerek.
lütfen sorulardan bildiğiniz varsa cevabı paylaşın
1. öğrencilerin değişik türlerden oluşan toplam tutarı ar. yemek servis eğitim gibi. ancak bunlar ücretler diye ayrı bir dosyada satırlar halinde öğrenci dosyasında kolon olsalar sorun yok ama ben bunları nasıl bir öğrencinin yanına sütün olarak çekerim. içiçe select geliyor aklıma ama çok yavaş olmazmı. kodla tek tek işlemeyide pek tercih etmiyorum. sizin öneriniz nedir
2.taksitli bir ödeme sistemi var. ödemeler çek senet kredi kartı mail order ve nakit yaılabiliyor. ayrıca bir çok indrim tipi de. nasıl bir ödeme planı ve data yapısı uygun olur.
3. hızlı bir içiçe select nasıl yazılmalı. bir çok örnek denedm baya yavaş geliyor sorgu sonuçları
Herkese iyi çalışmalar
Mevcut bir program için sağlam raporlar yazmam ve ya yazılımı yeniden yapmam gerek.
lütfen sorulardan bildiğiniz varsa cevabı paylaşın
1. öğrencilerin değişik türlerden oluşan toplam tutarı ar. yemek servis eğitim gibi. ancak bunlar ücretler diye ayrı bir dosyada satırlar halinde öğrenci dosyasında kolon olsalar sorun yok ama ben bunları nasıl bir öğrencinin yanına sütün olarak çekerim. içiçe select geliyor aklıma ama çok yavaş olmazmı. kodla tek tek işlemeyide pek tercih etmiyorum. sizin öneriniz nedir
2.taksitli bir ödeme sistemi var. ödemeler çek senet kredi kartı mail order ve nakit yaılabiliyor. ayrıca bir çok indrim tipi de. nasıl bir ödeme planı ve data yapısı uygun olur.
3. hızlı bir içiçe select nasıl yazılmalı. bir çok örnek denedm baya yavaş geliyor sorgu sonuçları
Herkese iyi çalışmalar
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: tablo yapısı ve sql sorgusuna dair
1. ve 2. sorunuzun cevabı indexlerdir, indexlerden yararlanın. Yine yavaşsa triggerlardan yararlanarak bu verileri kayıt girlme esnasında hesaplayarak başka bir tabloya yazılı halde bulundurun.
Ödemeleri ve indirimleri tek bir tabloda tutun, bu tablo üzerinde ayrıca işlemin tipi (nakit, kredi kardı, v.s. ) ve indirim tipini tutun (taksit vs.)
işlem tipi ve indirim tipi ayrıntılı bilgilerini farklı tablolarda tutun. böylece esneklik kazanmış olur.
Ödemeleri ve indirimleri tek bir tabloda tutun, bu tablo üzerinde ayrıca işlemin tipi (nakit, kredi kardı, v.s. ) ve indirim tipini tutun (taksit vs.)
işlem tipi ve indirim tipi ayrıntılı bilgilerini farklı tablolarda tutun. böylece esneklik kazanmış olur.
Re: tablo yapısı ve sql sorgusuna dair
Kendi tablolarınızı oluşturup dosyaları devamlı dinleyen ve güncellemeleri veritabanına yazan (istediğiniz yapıda) bir servis yazsanız olmuyormu. Bu devirde dosya mı kaldı yahuuu
zahar ben yanlış anladım soruyu.

Re: tablo yapısı ve sql sorgusuna dair
ramı.comfort yazdı:Kendi tablolarınızı oluşturup dosyaları devamlı dinleyen ve güncellemeleri veritabanına yazan (istediğiniz yapıda) bir servis yazsanız olmuyormu. Bu devirde dosya mı kaldı yahuuuzahar ben yanlış anladım soruyu.
program bir arkadaşın yazdığı php mysql programı. vt yapısı sakat olunca raporlamada böyle sıkıntılar oluyor.
öğrenci tablosu
1k. ali veli
ücretler
1ucretno. öğrenci no (1k) ücret tipi (yemek) tutar (500)
burada sorgu çekerken iki tabloyu 1k keyi ile bağlamak mümkün. ama her öğrencinin 3-4 ayı ücrti olunca sorgu birden fazla satır döndürüyor. benim istediğimse detay tablo satır verilerini sorguda koln olarak nasıl bağlarım
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: tablo yapısı ve sql sorgusuna dair
iç içe yazacağın her bir select için birer view oluşturup bunları joinle bağlarsan daha hızlı çalışır. Ama ben hayatımda böle bişey denemedim onu da söyliyim. Şuan aklıma geldi.
Re: tablo yapısı ve sql sorgusuna dair
ilk olarak kaç satır döndüğüne ve ücret tiplerine bak.sorgu1
daha sonra sorgu2 hazırlığı
sql ='select 1ucretno. öğrenci no '
for i=0 to sorgu1.recordcount //dönen satır kadar case blogunda sqle eklet.
sql= sql + 'case when ücret tipi= + sorgu1filed....value+ then tutar end' as +sorgu1filed....value
next
sql=sql + where öğrenci no = (1k)
gibi bir yapı ile sütunlara dönüştürebilirsiniz. Anladığım kadarı ile..
daha sonra sorgu2 hazırlığı
sql ='select 1ucretno. öğrenci no '
for i=0 to sorgu1.recordcount //dönen satır kadar case blogunda sqle eklet.
sql= sql + 'case when ücret tipi= + sorgu1filed....value+ then tutar end' as +sorgu1filed....value
next
sql=sql + where öğrenci no = (1k)
gibi bir yapı ile sütunlara dönüştürebilirsiniz. Anladığım kadarı ile..
Bir kelimenin anlamını öğretsen bile yeter..



Re: tablo yapısı ve sql sorgusuna dair
merhabaconari yazdı:ilk olarak kaç satır döndüğüne ve ücret tiplerine bak.sorgu1
daha sonra sorgu2 hazırlığı
sql ='select 1ucretno. öğrenci no '
for i=0 to sorgu1.recordcount //dönen satır kadar case blogunda sqle eklet.
sql= sql + 'case when ücret tipi= + sorgu1filed....value+ then tutar end' as +sorgu1filed....value
next
sql=sql + where öğrenci no = (1k)
gibi bir yapı ile sütunlara dönüştürebilirsiniz. Anladığım kadarı ile..
conari bu yontemi biliyorum. ama fahrettin bi bir ara öyle bir sql yazmıştıki beyin durduracak cinsten. belki direckt hiç pascala girmeden sql bacağında olur diye açtım threadi.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: tablo yapısı ve sql sorgusuna dair
Aşagıdaki sql benzeri birşeyle yapılabilir.
Mysql i fazla bilmiyorum, ama aşagıdaki kod firebirdde çalışır.
Eğer null lar sorun olursa, mysql e ait bir fonksiyonla null bilgileri 0 a eşitlemen gerekebilir.
Performans açısından çok sorun olacağını sanmıyorum, ne yaparsan yap, sonuçta sum ile toplam almak zorundasın.
Mysql i fazla bilmiyorum, ama aşagıdaki kod firebirdde çalışır.
Eğer null lar sorun olursa, mysql e ait bir fonksiyonla null bilgileri 0 a eşitlemen gerekebilir.
Performans açısından çok sorun olacağını sanmıyorum, ne yaparsan yap, sonuçta sum ile toplam almak zorundasın.
Kod: Tümünü seç
select o.ogrencino, o.ogrenciadi,
(select sum (ucret) from harcama h where h.ogrencino = o.ogrencino and h.tur ='yemek') as yemek_ucreti,
(select sum (ucret) from harcama h where h.ogrencino = o.ogrencino and h.tur ='egitim') as egitim_ucreti
from ogrenci o
Re: tablo yapısı ve sql sorgusuna dair
evet bu yapıda bir sorgu işi görür. web tabanlı bir uygulama da hız sorunu olabilir ama sonuçta bundan iyisi şamda kayısı.emin_as yazdı:Aşagıdaki sql benzeri birşeyle yapılabilir.
Mysql i fazla bilmiyorum, ama aşagıdaki kod firebirdde çalışır.
Eğer null lar sorun olursa, mysql e ait bir fonksiyonla null bilgileri 0 a eşitlemen gerekebilir.
Performans açısından çok sorun olacağını sanmıyorum, ne yaparsan yap, sonuçta sum ile toplam almak zorundasın.Kod: Tümünü seç
select o.ogrencino, o.ogrenciadi, (select sum (ucret) from harcama h where h.ogrencino = o.ogrencino and h.tur ='yemek') as yemek_ucreti, (select sum (ucret) from harcama h where h.ogrencino = o.ogrencino and h.tur ='egitim') as egitim_ucreti from ogrenci o
yalnız:
vt benim özel merakımdır. söz böyle bir veri yapısı tsarlaydınız nasıl bir yapı kullanırdınız.
ben gömebileceğim kadar veriyi öğrenci verisinde tutardım kendi fikrimce. malum verileri depolamak kadar raporlamada önemli ve raporlama o şekilde daha basit olurdu.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: tablo yapısı ve sql sorgusuna dair
Selamlar.
1. MySQL'de sanırım 5 ve üzeri versiyonlarında SP desteği var, SP yazarak bunu çözebilirsin. Şöyle bir sonuç döndürmek çözüm olacaktır;
Öğrenci Adı-Soyadı
ikutluay
Ödemeler
Eğitim 500
Yemek 220
Toplam Ödeme : 720
Ahmet Sancaklı
.....
2. Taksitler, ödemeler ve indirimler farklı tabloda tutulmalı elbette doğru bir yapı kurulmuş. Sadece taksitlerde ödenip ödenmediğine dair bir işaret bulundurulabilir/bulundurulmalıdır.
3. İç içe hızlı sorgu nasıl yazılır şeklinde bir çıkış noktası hata olur. İç içe sorgu yazıyorsanız performanstan taviz vermeyi kabul ediyorsunuz demektir. Kayıt sayısı, tabloların yoğunluğu ve alan sayısına göre mutlaka performanstan taviz verilecektir ama hangi ölçüde olacağı söz konusu kriterlere göre değişkenlik arzeder.
Kolay gele.
1. MySQL'de sanırım 5 ve üzeri versiyonlarında SP desteği var, SP yazarak bunu çözebilirsin. Şöyle bir sonuç döndürmek çözüm olacaktır;
Öğrenci Adı-Soyadı
ikutluay
Ödemeler
Eğitim 500
Yemek 220
Toplam Ödeme : 720
Ahmet Sancaklı
.....
2. Taksitler, ödemeler ve indirimler farklı tabloda tutulmalı elbette doğru bir yapı kurulmuş. Sadece taksitlerde ödenip ödenmediğine dair bir işaret bulundurulabilir/bulundurulmalıdır.
3. İç içe hızlı sorgu nasıl yazılır şeklinde bir çıkış noktası hata olur. İç içe sorgu yazıyorsanız performanstan taviz vermeyi kabul ediyorsunuz demektir. Kayıt sayısı, tabloların yoğunluğu ve alan sayısına göre mutlaka performanstan taviz verilecektir ama hangi ölçüde olacağı söz konusu kriterlere göre değişkenlik arzeder.
Kolay gele.
Re: tablo yapısı ve sql sorgusuna dair
Olayı tam olarak anlamadım, sanırım ögrencilerin ödemelerini takip eden bir sistem. O nedenle şu tür tablolar yaratılabilir.
Okul - Tek kayıtlık tasarlanır, okulla ilgili temel bilgiler, telefon numalararı, adres vs.
Raporların altında okulun adı, yetkili müdür vs yazılması gerekbileceği için kullanıcılar bu tabloyu kullanarak gerekli bilgileri düzenleneyebilirler.
Sınıf - sinif_no - 4-C, sinif-ogretmeni-ahmet vs, sabahci - true gibi sinifla ilgili bilgler
Ogrenci - Ogrencino - 1511, sinif-no - 4-C, adi-soyadi - MEHMET VESAIRE, gerekli diğer bilgiler
Ödeme - ode_id - autoinc, ogrencino - 1511, odeme tarihi: 11-01-2010, odeme-turu: 1- yemek, 2 servis, 3-egitim, ödeme-periodu- 1- ocak, 2-şubat, 3-mart vs gibi
Bu şekilde ayrı tablolar yaratmak her zaman en iyisidir. Gereksiz tekrarlamalar olmaz. Bilgilerin eklenmesi ve düzenlenmesi son derece kolay olur.
Ödemeler mutlaka ayrı dosyada olmalıdır. Örneğin mart ayı için gerekli yemek ödemesi yapmayan ögrenciler aşagıdaki gibi sorgulanabilir.
select ogrencino, ogrenciadi from ogrenci where ogrencino not exists (select ogrencino from odeme where odemeturu=1 and odemeperiod = 3 )
Tabii veritabanı tasarlarken en önemli konu, ne tür raporların istendiği ve isteneceğidir. Genellikle müşteriler "bize sadece şu gerekli, başka birşeye gerek yok" derler. Ama program ortaya çıkınca "şu da olsa, bu da olsa" derler. O nedenle gereklilikleri tesbit edip, buna göre sorgulamaya cevap verecek tablo yapıları oluşturulmalıdır.
Herşeyi tek tabloda oluşturmak, ilk başta kolay görünse de programda ciddi hatalara neden olabilir. Ödemeler aylık girildiğini varsayıyoruz ve tüm ödemeler ögrenci dosyasında, ocaktan sonra şubat ayı ödemesini nasıl gireceksin, nasıl değiştireceksin.
Bu arada ben her ögrencinin aylık, farklı ödemeler yapabileceğini düşünerek yukarıdaki yapıyı oluşturdum. Eğer ödemeler sabitse, sadece ödemelerin aylık tutulduğu bir tablo oluşturulup, ögrencilerde içinde aylık ödedi, ödemedi alanları yaratılabilir.
Odeme-sabitleri : ay- 1,2,3..12 , yemek-tutari: 15,000, servis-tutari: 25,000, vs
Ogrenci-odeme : ogrencino -1411, ay- 3, yemek-odedi: true, servis-odedi: false vs (ogrencino ve aya göre primary key oluşturulmalıdır)
Benzer şekilde martta yemek parasini ödemeyen ögrenciler:
select o.ogrencino, o.ogrenciadi from ogrenci o, odeme h where h.ogrencino=o.ogrencino and h.ay = 3 and yemekodedi = false
İhtiyaçlara göre sistem kurulmalıdır. En önemli konu, veriyapısının raporlara cevap verebilmesidir. Örneğin ay bilgisi konulmazsa, aya göre hiçbir rapor alınamaz.
Okul - Tek kayıtlık tasarlanır, okulla ilgili temel bilgiler, telefon numalararı, adres vs.
Raporların altında okulun adı, yetkili müdür vs yazılması gerekbileceği için kullanıcılar bu tabloyu kullanarak gerekli bilgileri düzenleneyebilirler.
Sınıf - sinif_no - 4-C, sinif-ogretmeni-ahmet vs, sabahci - true gibi sinifla ilgili bilgler
Ogrenci - Ogrencino - 1511, sinif-no - 4-C, adi-soyadi - MEHMET VESAIRE, gerekli diğer bilgiler
Ödeme - ode_id - autoinc, ogrencino - 1511, odeme tarihi: 11-01-2010, odeme-turu: 1- yemek, 2 servis, 3-egitim, ödeme-periodu- 1- ocak, 2-şubat, 3-mart vs gibi
Bu şekilde ayrı tablolar yaratmak her zaman en iyisidir. Gereksiz tekrarlamalar olmaz. Bilgilerin eklenmesi ve düzenlenmesi son derece kolay olur.
Ödemeler mutlaka ayrı dosyada olmalıdır. Örneğin mart ayı için gerekli yemek ödemesi yapmayan ögrenciler aşagıdaki gibi sorgulanabilir.
select ogrencino, ogrenciadi from ogrenci where ogrencino not exists (select ogrencino from odeme where odemeturu=1 and odemeperiod = 3 )
Tabii veritabanı tasarlarken en önemli konu, ne tür raporların istendiği ve isteneceğidir. Genellikle müşteriler "bize sadece şu gerekli, başka birşeye gerek yok" derler. Ama program ortaya çıkınca "şu da olsa, bu da olsa" derler. O nedenle gereklilikleri tesbit edip, buna göre sorgulamaya cevap verecek tablo yapıları oluşturulmalıdır.
Herşeyi tek tabloda oluşturmak, ilk başta kolay görünse de programda ciddi hatalara neden olabilir. Ödemeler aylık girildiğini varsayıyoruz ve tüm ödemeler ögrenci dosyasında, ocaktan sonra şubat ayı ödemesini nasıl gireceksin, nasıl değiştireceksin.
Bu arada ben her ögrencinin aylık, farklı ödemeler yapabileceğini düşünerek yukarıdaki yapıyı oluşturdum. Eğer ödemeler sabitse, sadece ödemelerin aylık tutulduğu bir tablo oluşturulup, ögrencilerde içinde aylık ödedi, ödemedi alanları yaratılabilir.
Odeme-sabitleri : ay- 1,2,3..12 , yemek-tutari: 15,000, servis-tutari: 25,000, vs
Ogrenci-odeme : ogrencino -1411, ay- 3, yemek-odedi: true, servis-odedi: false vs (ogrencino ve aya göre primary key oluşturulmalıdır)
Benzer şekilde martta yemek parasini ödemeyen ögrenciler:
select o.ogrencino, o.ogrenciadi from ogrenci o, odeme h where h.ogrencino=o.ogrencino and h.ay = 3 and yemekodedi = false
İhtiyaçlara göre sistem kurulmalıdır. En önemli konu, veriyapısının raporlara cevap verebilmesidir. Örneğin ay bilgisi konulmazsa, aya göre hiçbir rapor alınamaz.
Re: tablo yapısı ve sql sorgusuna dair
evet değişik tablolar iyidir ama ben mesela kan gruplarını parametrik yapmak için bir tabloa yazar looktable ile seçtirip direkt stringi yazdırırım. kan grubunun en babası 10 harf tutsun. vatandaş 16 bylık guid kodu yazıyor. nerde bunun alan taarrufu diyorsun yani. işin yoksa birde join yap