Firebird array

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Firebird array

Mesaj gönderen musti »

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
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Firebird array

Mesaj gönderen emin_as »

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.
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Firebird array

Mesaj gönderen musti »

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.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Firebird array

Mesaj gönderen emin_as »

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.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Firebird array

Mesaj gönderen freeman35 »

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

Kod: Tümünü seç

CREATE TABLE TABLE1
(NAME CHAR(10),
CHAR_ARR CHAR(10)[4]);
multi-dimensional arrays

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]);
Konu hakkında zaten fazlaca bilgi ve örnek zor bulunuyor. FB nin pdf lerinde ve google da araştırma yapabilirsiniz
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 !!!
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Firebird array

Mesaj gönderen unicorn64 »

alanı varchar olarak tanımlasanız ve değerleri araya belirleyeceğiniz bir ayraç koyup yazsanız nasıl olur?

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
ş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

Kod: Tümünü seç

NOTLARI LIKE '%~2~%' 
gibi bir şekilde çözebilirsiniz sanırım...
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...

Resim
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: Firebird array

Mesaj gönderen musti »

tsk ederim
evet array sorunmuş
ayrı bir table tuttum
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: Firebird array

Mesaj gönderen rsimsek »

unicorn64 yazdı:...

Kod: Tümünü seç

NOTLARI LIKE '%~2~%' 
...
Dikkatimi çekti de.. aranan başta veya sonda ise de bakmak lazım :wink:

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!!
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Firebird array

Mesaj gönderen unicorn64 »

@rsimsek hocam +1

kesinlikle kontrol edilmeli :bravo:
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...

Resim
Cevapla