10-05-2017, Saat: 10:22
Merhaba, hazır konu hakkında deneyimli üstadlar varken bir veritabanı yapısı hakkında öneri almak isterim. Konuyu okuyan arkadaşlar içinde yol gösterici olur.
Şöyle bir veritabanımız var (Kısaltarak yazıyorum alanları);
CARI_HESAP tablosu ; KOD, UNVAN, BORC, ALACAK
STOK tablosu ; KOD, ADI, GIREN, CIKAN
FATURA_1 tablosu ; KOD, TURU, CARIKODU, TUTAR, BORC, ALACAK
FATURA_2 tablosu ; KOD, FATURA1KODU, TURU, CARIKODU, STOKKODU, MIKTAR, GIREN, CIKAN
(TURU alanı BYTE tipinde 0:ALIS FT. 1:SATIS FT. şeklinde)
(FATURA_1 tablosunda Before Insert olayında ALIS yada SATIS faturası olması durumuna göre TUTAR alanı BORC yada ALACAK alanlarına yazılıyor)
(FATURA_2 tablosunda Before Insert olayında ALIS yada SATIS faturası olması durumuna göre MIKTAR alanı GIREN yada CIKAN alanlarına yazılıyor)
(FATURA_1 tablosunda After Insert olayında CARI_HESAP tablosundaki BORC, ALACAK alanları güncelleniyor)
(FATURA_2 tablosunda After Insert olayında STOK tablosundaki GIREN, CIKAN alanları güncelleniyor)
CARI_ISLEM View'i
Cari hesapları listelerkende hazır BORC, ALACAK kayıtlı olduğu için direk Grid de gösteriyorum, altında da işlemleri tabi.
Fakat bunu şu şekilde de yapabiliyoruz;
FATURA tablolarındaki Before Insert ve After Insert olaylarını iptal edip, CARI_HESAP tablosundan da BORC ve ALACAK alanlarını kaldırıyoruz.
CARI_HESAPLAR View i oluşturuyoruz;
2. olaydaki amaç Fatura, Çek vs. kaydederken After Insert olayındaki CARI ve STOK tablolarındaki alanların güncellemelerini kapatmak. Kısaca trigger kullanımını en aza indirmek.
Sizce bu 2 sistemden hangisi daha uygundur? hangisi daha hızlı ve daha hatasız çalışır?
Şöyle bir veritabanımız var (Kısaltarak yazıyorum alanları);
CARI_HESAP tablosu ; KOD, UNVAN, BORC, ALACAK
STOK tablosu ; KOD, ADI, GIREN, CIKAN
FATURA_1 tablosu ; KOD, TURU, CARIKODU, TUTAR, BORC, ALACAK
FATURA_2 tablosu ; KOD, FATURA1KODU, TURU, CARIKODU, STOKKODU, MIKTAR, GIREN, CIKAN
(TURU alanı BYTE tipinde 0:ALIS FT. 1:SATIS FT. şeklinde)
(FATURA_1 tablosunda Before Insert olayında ALIS yada SATIS faturası olması durumuna göre TUTAR alanı BORC yada ALACAK alanlarına yazılıyor)
(FATURA_2 tablosunda Before Insert olayında ALIS yada SATIS faturası olması durumuna göre MIKTAR alanı GIREN yada CIKAN alanlarına yazılıyor)
(FATURA_1 tablosunda After Insert olayında CARI_HESAP tablosundaki BORC, ALACAK alanları güncelleniyor)
(FATURA_2 tablosunda After Insert olayında STOK tablosundaki GIREN, CIKAN alanları güncelleniyor)
CARI_ISLEM View'i
CREATE VIEW CARI_ISLEM( KOD, TURU, ACIKLAMA, CARIKODU, BORC, ALACAK) AS select KOD, TURU, CARIKODU, BORC, ALACAK from ( SELECT F.KOD, F.TURU, CASE WHEN F.TURU=0 THEN 'Alis Ft.' WHEN F.TURU=1 THEN 'Satis Ft.' END AS ACIKLAMA, F.CARIKODU, F.BORC, F.ALACAK FROM FAT1 F )View i kısaca yazdım, normalde içinde çekler, tahsilat ve ödemeler vs.vs. var. Cari hareketlerini bu şekilde gösteriyorum.
Cari hesapları listelerkende hazır BORC, ALACAK kayıtlı olduğu için direk Grid de gösteriyorum, altında da işlemleri tabi.
Fakat bunu şu şekilde de yapabiliyoruz;
FATURA tablolarındaki Before Insert ve After Insert olaylarını iptal edip, CARI_HESAP tablosundan da BORC ve ALACAK alanlarını kaldırıyoruz.
CARI_HESAPLAR View i oluşturuyoruz;
CREATE VIEW CARI_HESAPLAR( KOD, UNVAN, BORC, ALACAK) AS select KOD, UNVAN, COALESCE(BORC,0), COALESCE(ALACAK,0) from ( SELECT C.KOD as KOD, C.UNVAN AS UNVAN, sum(F.BORC) AS BORC, sum(F.ALACAK) AS ALACAK FROM CARI as C LEFT JOIN (SELECT CARIKODU AS KOD, SUM(BORC) as BORC, SUM(ALACAK) AS ALACAK FROM FATURA_1 GROUP by CARIKODU ) as F on F.KOD = C.KOD GROUP BY C.KOD, C.UNVAN )
2. olaydaki amaç Fatura, Çek vs. kaydederken After Insert olayındaki CARI ve STOK tablolarındaki alanların güncellemelerini kapatmak. Kısaca trigger kullanımını en aza indirmek.
Sizce bu 2 sistemden hangisi daha uygundur? hangisi daha hızlı ve daha hatasız çalışır?