Kendinden referans alarak hesaplama yapan view

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ı
armadillo
Üye
Mesajlar: 67
Kayıt: 07 Tem 2005 01:16
Konum: Antalya

Kendinden referans alarak hesaplama yapan view

Mesaj gönderen armadillo »

Başlık çok fazla uygun olmadı ama Benim yapmak istediğim aşağıdaki gibi bir view ım var

Kod: Tümünü seç

CREATE VIEW FUELOILVIEW1(
    "Tarih",
    "Ilk endeks",
    "Son endeks",
    "Fark",
    "Carpan",
    "Birim Fiyati")
AS
select f1.tarih,
(select s.mevcut from stok s where s.turu='fueloil')/ (select d_carpan.deger from d_carpan where d_carpan.turu='fueloil') 
,f1.deger,
(select s.mevcut from stok s where s.turu='fueloil')/
 (select d_carpan.deger from d_carpan where d_carpan.turu='fueloil')- f1.deger, 
coalesce((select c.deger  from d_carpan c where c.turu='fueloil'),1),
coalesce((select fi.fiyat from fiyat fi where fi.turu='fueloil'),0)
from fueloil f1
bu view ile ilgili sormak istediğim şu burada mesela fark alanımın değeri (Son endeks - İlk endeks) aynı view içerisine kendinden alan referans gösterdiğimde bu alanın bilnmediği hatasını veriyor ((select s.mevcut from stok s where s.turu='fueloil')/
(select d_carpan.deger from d_carpan where d_carpan.turu='fueloil')- f1.deger
). Yani fark alanına şunu (FUELOILVIEW1.son endeks - FUELOILVIEW1.ilk endeks) yazdığımda bunun ara view kullanmadan çözümü varmı? Birde VT deki view sayısı performansı nasıl etkiler ben bu hesaplamalar için view ler oluştursam çok fazla hesaplama var tablolarımda performans kayıb olurmu olursa hangi seviyede olur ne tavsiye edersiniz.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

View'lerde bir çok veri tabanında kendi field'ını kullanacaksanız, O field'ı nasıl oluşturduysanız aynısını yazarak yapabilirsiniz.

Örneğin,

view selectinde,

Kod: Tümünü seç

 (A.FIELD1 - B.FIELD1) AS YENIFIELD, 
 YENIFIELD + A.FIELD5
derseniz hata alırsınız.

bunun yerine

Kod: Tümünü seç

 (A.FIELD1 - B.FIELD1) AS YENIFIELD, 
  (A.FIELD1 - B.FIELD1) + A.FIELD5
şeklinde kullanmalısınız.

Ayrıca, bu tür durumlarda hesaplamalar yukarıdaki örnekte olduğu kadar basit olmayabilir bunun yerine ARA yada HAM DATA view'leri oluşturun. View sayısı database'in performansını etkilemez. Yani 10000 tane VIEW'ınız olsa ama siz bunlardan 10 tanesini kullanıyorsanız performansınız etkilenmez. Ama ne sıklıkta kullandığınız, doğru indexler ve JOIN'ler kurup kurmadığınız çok etkiler.

Bir VIEW yaparsınız sistemin performansını zorlarsınız, 100 VIEW yaparsınız Server bana mısın demez. Bunlar hep dediğim gibi JOIN'lerin nasıl kurulduğu, doğru index yapılarının olup olmadığı (hatta doğru tablo yapılarının olup olmadığına) bağlı unsurlardır.

Kolay gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla