Firebird array
Firebird array
s.a
O kadar ugrastım array duzgun kullanamadım.
bu konuda bilgi nasıl alabilirim.
IBexpert destekmiyor sanırım.
istedigim
1 alana ait sayısını bilmediğimi 10 larca degişik bilgi smallint tipinde tanımlamak yani
Öğretme Adı ve bu örğretmen ait calışma notları
Ahmet Hoca, [1,2,7,9,11,100,14]
Mehmet Hoca, [2,45,23,13,10]
...
....
....
bu satır yaklasık 50 bin satır olacak. iyi bir sorgulama ve sorunsuz hızlı olmalı
bunları işlemek ve sorgulamak isiyorum bunu array ile nasıl yapparım yada arraysız
1 ve 9 no calısma kime ait digince ahmet hoca gelecek bunun gibi sorgular
O kadar ugrastım array duzgun kullanamadım.
bu konuda bilgi nasıl alabilirim.
IBexpert destekmiyor sanırım.
istedigim
1 alana ait sayısını bilmediğimi 10 larca degişik bilgi smallint tipinde tanımlamak yani
Öğretme Adı ve bu örğretmen ait calışma notları
Ahmet Hoca, [1,2,7,9,11,100,14]
Mehmet Hoca, [2,45,23,13,10]
...
....
....
bu satır yaklasık 50 bin satır olacak. iyi bir sorgulama ve sorunsuz hızlı olmalı
bunları işlemek ve sorgulamak isiyorum bunu array ile nasıl yapparım yada arraysız
1 ve 9 no calısma kime ait digince ahmet hoca gelecek bunun gibi sorgular
Re: Firebird array
Firebird de array var, ama sabit array var ve çogu bileşence tam desteklenmiyor. IBX desteklemiyor diye biliyorum.
Aslında senin array a ihtiyacın yok, tablodaki satirlar işini görür
Ogretmen tablosu:
Ogretmen no (int) Ogretmenadi ( varchar(40) ) digeralanlar ...
4101 Ahmet hoca ....
4102 Mehmet Hoca ...
Calisma Tablosu :
Calisma No -- Ogretmen No
1 4101 // ahmet hoca
2 4101 // ahmet hoca
45 4102 // mehmet hoca
Eger bir calismaya 2-3 ögretmen katilabiliyorsa
Autoinc - Calisma No - Ogretmen No
1 - 1 - 4101
2 - 2 - 4101
3 - 2 - 4102
select * from calisma where ogretmenno = 4101 ---> ahmet hocanin calismalari
select * from calisma where calismano = 2 --> 2 nolu calismaya tablosu - kac tane ogretmen giriildiyse gösterir
select * from calisma where calismano in [2,9] --> 2 ve 9 nolu calismalar, ogretmenleriyle listelenir.
50 bin, 100 bin farketmez, eger başka alan tutmuyorsan, oldukça hizli yanıt alırsın.
Aslında senin array a ihtiyacın yok, tablodaki satirlar işini görür
Ogretmen tablosu:
Ogretmen no (int) Ogretmenadi ( varchar(40) ) digeralanlar ...
4101 Ahmet hoca ....
4102 Mehmet Hoca ...
Calisma Tablosu :
Calisma No -- Ogretmen No
1 4101 // ahmet hoca
2 4101 // ahmet hoca
45 4102 // mehmet hoca
Eger bir calismaya 2-3 ögretmen katilabiliyorsa
Autoinc - Calisma No - Ogretmen No
1 - 1 - 4101
2 - 2 - 4101
3 - 2 - 4102
select * from calisma where ogretmenno = 4101 ---> ahmet hocanin calismalari
select * from calisma where calismano = 2 --> 2 nolu calismaya tablosu - kac tane ogretmen giriildiyse gösterir
select * from calisma where calismano in [2,9] --> 2 ve 9 nolu calismalar, ogretmenleriyle listelenir.
50 bin, 100 bin farketmez, eger başka alan tutmuyorsan, oldukça hizli yanıt alırsın.
Re: Firebird array
Sizin yazdığınız gibi yaparsak altından kalkılmaz.
her bir ogretmenin her bir çalışmasını yeni bir satır eklemek demek.
bir öğtretmenin bir çalışması bir günde 100 adet olsa. 100 bin olan satırımız 1 milyon satıra varırki bu cokda rdms bir mantığa uygun olmaz.
ama array ile çözemezsek bunu tabi başka sanımız yok. yada varchar bir alan icine array gibi virgülle ayrırarak yapacaz o zamanda subscript gibi ek şeyler kullanacaz.
yada alternatif baska bir yol.
teşekkür ederim.
her bir ogretmenin her bir çalışmasını yeni bir satır eklemek demek.
bir öğtretmenin bir çalışması bir günde 100 adet olsa. 100 bin olan satırımız 1 milyon satıra varırki bu cokda rdms bir mantığa uygun olmaz.
ama array ile çözemezsek bunu tabi başka sanımız yok. yada varchar bir alan icine array gibi virgülle ayrırarak yapacaz o zamanda subscript gibi ek şeyler kullanacaz.
yada alternatif baska bir yol.
teşekkür ederim.
Re: Firebird array
Veritabanının mantıgı aranan veriye hızlı erişimdir. O açıdan 100 bin, 1 milyon, 10 milyon satir vs farketmez. Hepsini birden açmaya kalkmadıktan sonra veritabanin istedigi kadar büyük olabilir.
Ögretmen bilgilerine bir günde 100 tane çalışma gireceksen, blob alan kullanabilirsin. Bu durumda çalışmaları sorgulamakta biraz zorlanabilirsin. Sonuç olarak benim mantıgımda tablo dikey genişlerken, senin mantıgında yatay genişleyecek.
Nasıl daha uygun geliyorsa, tablolarını o şekilde tasarla, ama sorguda alacagın raporları düşün.
Ögretmen bilgilerine bir günde 100 tane çalışma gireceksen, blob alan kullanabilirsin. Bu durumda çalışmaları sorgulamakta biraz zorlanabilirsin. Sonuç olarak benim mantıgımda tablo dikey genişlerken, senin mantıgında yatay genişleyecek.
Nasıl daha uygun geliyorsa, tablolarını o şekilde tasarla, ama sorguda alacagın raporları düşün.
Re: Firebird array
Tavsiyem array i db de kullanmaktan vazgeç bu hem seni çok kısıtlar hemde işini çok zorlaştırır. FB de array i geliştirmediler öylece kaldı aslında adamlarda haklı dibi yok ve çok sorunlar çıkartabilecek bir konu.Bende zamanında uğraşmıştım.FB array field destekler ama bunu delphi ye çekmek hele hele bunu işleyip tekrar db ye gömmek işte ben burda tıkanmıştım. Component olarak Yanılmıyorsam sadece IBobject bunu destekliyor hatta 2 boyutlu array destekleyen grid i bile vardı.Bu elemanla ozamanlar bir iki mesajlaşmıştım. sonuç hüsrandı. üstelik ben senin gibi değişken boyutta değil sabit [1..12,1..2] boyutunda kullanmak istemiştim. Hatta fikir versin diye söyliyeyim cari hesapların 12 aylık alacak ve borç dağılımlarını bunlarda saklayıp sorulduğunda anında ekrana bassın istemiştim.
Çözümün bence master detail matığında, merak etme performansı yapıyı ve indexleri düzgün kurduğunda tatminkar olucaktır.
Tek boyut lu array
multi-dimensional arrays
Konu hakkında zaten fazlaca bilgi ve örnek zor bulunuyor. FB nin pdf lerinde ve google da araştırma yapabilirsiniz
Kolay gele
Çözümün bence master detail matığında, merak etme performansı yapıyı ve indexleri düzgün kurduğunda tatminkar olucaktır.
Tek boyut lu array
Kod: Tümünü seç
CREATE TABLE TABLE1
(NAME CHAR(10),
CHAR_ARR CHAR(10)[4]);
Kod: Tümünü seç
CREATE TABLE TABLE1
(INT_ARR2 INTEGER[4,5],
INT_ARR3 INTEGER[4,5,6],
INT_ARR4 INTEGER[4,5,6,7]);
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: Firebird array
alanı varchar olarak tanımlasanız ve değerleri araya belirleyeceğiniz bir ayraç koyup yazsanız nasıl olur?
mesela
şeklinde. daha sonra programda kullanırken de öğretmene ait notlar için alandaki değeri alır parse edersiniz.
notlardan herhangi birisi için spesifik sorgulama da
gibi bir şekilde çözebilirsiniz sanırım...
mesela
Kod: Tümünü seç
OGRETMEN_ADI NOTLARI
Ahmet Hoca 1~2~7~9~11~100~14
Mehmet Hoca 2~45~23~13~10
notlardan herhangi birisi için spesifik sorgulama da
Kod: Tümünü seç
NOTLARI LIKE '%~2~%'
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Re: Firebird array
tsk ederim
evet array sorunmuş
ayrı bir table tuttum
evet array sorunmuş
ayrı bir table tuttum
Re: Firebird array
Dikkatimi çekti de.. aranan başta veya sonda ise de bakmak lazımunicorn64 yazdı:......Kod: Tümünü seç
NOTLARI LIKE '%~2~%'

Kod: Tümünü seç
...
NOTLARI LIKE '%~2~%' OR
NOTLARI LIKE '%~2%' OR
NOTLARI LIKE '%2~%' ...
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Re: Firebird array
@rsimsek hocam +1
kesinlikle kontrol edilmeli
kesinlikle kontrol edilmeli

bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
