veritabani uygulamasi icin feedback

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

veritabani uygulamasi icin feedback

Mesaj gönderen mrtblt »

Merhaba arkadaslar,

kendimi veritabani implemmentasyonu ve mantigi nokatisinda kismen yeterli goruyorken simdi aslinda bildiklerimin citir seylerden ibaret oldugunu anliyorum.

Su mevzuda bilginize ihtiyacim var.

Php ve MySql kullanaraktan ve icine birazda Ajax karistiraraktan bir online muhasebe sistemi yapmaya calisiyorum. Simdilik sadece amator bir yaklasimla calisiyorum bu projenin uzerinde yani kendi isyerimdeki otomasyon eksikliklerini personalize edilmis bir sistemle asma gudusu ile.

Fatura icin 3 tane tablom var

1 - inv_header
2 - inv_lines
3 - inv_lines_temp

fatura giris modulunde kullanici fatura kalem girislerini yaparken bu kalemler inv_lines_temp dosyasina yaziliyor ve kullanici kaydet komutunu verdikten sonra bu tablodaki bilgiler inv_lines tablosuna aktariliyor ve inv_lines_temp tablosunun icerigi bosaltiliyor. Tabiiki kayit islemi ile beraber diger alakli verilerde inv_header tablosuna donusuyor. Bir anlamda inv_header inv_lines icin master tablo gorevini goruyor.
MySQL de isin veritabani tarafinda master tablo, trigger gibi ozellikler ne derece etkin kullanilibiliniyor yada var mi bilemiyorum, cokta uzerine dusmedim cunku php nin native sql destegi bu tur ozelliklere bagimliligi azaltiyor.

Simdi fatura kaydederken bir sorun yok asil kafama takilan kullanicinin faturayi edit etmek istemesi durumunda nasil bir yol izlemem gerektigidir. Burada islemler anlik fiziksel olarak veritabanina yaziliyor commit.transaction gibi seyler olmadigindan yada varmi ben bilmiyorum. Bu bir sorun tabiiki cunku kullanici 5-6 degisiklik yaptiktan sonra eger faturayi degistirmekten vazgecerse nasil rollback olacak!


Soyle bir cozum olabilir. Edit edilecek faturanin ilgili kalem satirlari yeniden inv_lines_temp tablosuna cekilebilinir ve orada islemler yapilir ve akabinde eger kullanici degisiklikleri yapmaya karar verirse yapilan degisiklikler inv_lines_temp dosyasindan okunarak inv_lines dosyasi update edilecek ve bunun akabindede inv_header dosyasi guncellenecek. Ama bu yaklasim bana cok ilkelce geliyor.
Mesela diyelimki renk alani kirmizi olan kayitlari bulmak istiyorsunuz bir tablodan cok kolay bicimde su sekilde bulabilirsiniz

Kod: Tümünü seç

select * from table vhere renk="kirmizi"
Yada 1. kayittan baslayaraktan tum kayitlari okursiunuz for dongusu ile sonra dongu icerisine if condition yerlestirip kirmiziyi test edersiniz, kayit kondisyonu sagliyorsa kayidi baska bir tabloya atarsiniz ve islem sonucunda diger tabloda renk degeri kirmizi olan kayitlari barindirmis olursunuz.

Iste bu cok ilkel bir yontem ve benim yukarida bahsettigim cozumde sanki bu ilkel yonteme benziyor. :)

Bu mevzuyu daha profesyonelce halledebilmenin nasil bir yolu olabilir?

Kod: Tümünü seç

CREATE TABLE IF NOT EXISTS `inv_header` (
  `id` int(11) NOT NULL auto_increment,
  `inv_no` varchar(10) collate utf8_romanian_ci NOT NULL,
  `client_id` varchar(11) collate utf8_romanian_ci NOT NULL,
  `inv_date` date NOT NULL,
  `inv_type` varchar(15) collate utf8_romanian_ci NOT NULL,
  `adet` int(11) NOT NULL,
  `net_sum` decimal(7,2) NOT NULL,
  `vat_sum` decimal(7,2) NOT NULL,
  `disc_prcnt` int(2) NOT NULL,
  `disc_val` decimal(7,2) NOT NULL,
  `grand_sum` decimal(7,2) NOT NULL,
  `inv_exp` varchar(2) collate utf8_romanian_ci NOT NULL,
  `exch_rate` decimal(5,2) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

Kod: Tümünü seç

CREATE TABLE IF NOT EXISTS `inv_lines` (
  `id` int(11) NOT NULL auto_increment,
  `fat_id` varchar(10) collate utf8_romanian_ci NOT NULL,
  `code_id` varchar(10) collate utf8_romanian_ci NOT NULL,
  `tip` char(1) collate utf8_romanian_ci NOT NULL,
  `adet` int(11) NOT NULL,
  `unit_price` decimal(7,2) NOT NULL,
  `line_net` decimal(7,2) NOT NULL,
  `line_vat` decimal(7,2) NOT NULL,
  `line_grand` decimal(7,2) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;

Kod: Tümünü seç

CREATE TABLE IF NOT EXISTS `inv_lines_temp` (
  `id` int(11) NOT NULL auto_increment,
  `code` varchar(10) collate utf8_romanian_ci NOT NULL,
  `tip` char(1) collate utf8_romanian_ci NOT NULL,
  `adet` int(11) NOT NULL,
  `unit_price` decimal(7,2) NOT NULL,
  `line_net` decimal(7,2) NOT NULL,
  `line_vat` decimal(7,2) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: veritabani uygulamasi icin feedback

Mesaj gönderen Battosai »

Faturayıda bir tabloya kayıt edersen edit işlemi sorun olmaz...sanırım...ayrıca mysql trigger ve stored procedure desteğine sahiptir...
Cevapla