1

Konu: Relationships

Merhaba,

MS SQL'de oluşturturduğum bir veritabanında tablolarımın "relationship"leri ayarladım.

Tablolarımda NULL değer kullanmıyor ve tüm sahaların varsayılan değerlerini tanımladım.

Bazı tablolarda relationship ile ilgili sahaya değer girmiyorum. (Aslında orasının NULL olması lazım ancak varsayılan değerden dolayı örneğin integer saha için 0 değerini alıyor). Tabi bu durumda relationship 0 değerini diğer tabloda bulamadığından veri girişini engelliyor.

Relationship'deki veri kontrolü kaldırmak zorunda kaldım.

Acaba bu işin bir çözümü var mı?

/o---------------------o\
     www.haser.com
\o---------------------o/

2

Re: Relationships

insert,update constraint icin ignore diyince olmuyor mu (aslinda yaptigini tam anlamadim Tarkan:)

3

Re: Relationships

Galiba anlatamadım. Bir örnekle anlatayım

Cari hareketlerin tutulduğun tablo

CariHareket
nKodCariHareket I, cEvrakNo C(10), ..., nKodMuhasebeIslemleri
Primary Key nKodCariHareket (AutoInc)

Muhasebe İşlemleri tablosu

MuhasebeIslemleri
nKodMuhasebeIslemleri I, cKodHesap C(20), ...
Primary Key nKodMuhasebeIslemleri (AutoInc)

CariHareket ile MuhasebeIslemleri tabloları arasında nKodMuhasebeIslemleri sahasına göre relationship kurdum.

Örnek olarak;
CariHareket tablosuna nakit tahsilat işlemi girilecektir. Daha sonra kullanıcı herhangi bir zamanda nakit tahsilat hareketinin otomatik entegrasyonunu yaparak muhasebeleştirecektir.

CariHareket tablosuna nakit tahsilatın yazılması
Insert Into CariHareket (cKodHesap, ...) Values('A011', ...)
Insert Into'da nKodMuhasebeIslemleri sahası yazılmıyor. Tabloda varsayılan değer 0 olarak tanımlandığından kayıt aşağıdaki gibi oluyor
nKodCariHareket     cKodHesap    ...     nKodMuhasebeIslemleri
5789                      A011             ...     0

Entegrasyon yapıldığında muhasebe işlemleri tablosuna yazılması gereken
Insert Into MuhasebeIslemleri (cKodHesap, ...) Values('120011', ...)
nKodMuhasebeIslemleri     cKodHesap     ...
6565                                120011          ...

CariHareketi'de bu kayıtla ilişkilendirmek için
Update CariHareket Set nKodMuhasebeIslemleri = 6565 Where nKodCariHareket = 5789

Yapıyorum(dum) smile

Yapıyordum çünkü relationship'i tanımladığımdan beri daha ilk insert komutunda hata alıyorum.
Insert Into CariHareket (cKodHesap, ...) Values('A011', ...)

komutunda nKodMuhasebeIslemleri sahasında 0 değeri atandığı için ve 0 değeri MuhasebeIslemleri tablosunda tanımlı olmadığından SQL hata veriyor.

Bunu çözmek için "EnForce Foreign Key Constrain" No olarak ayarlamak zorunda kalıyorum.
Bu durumda da nKodMuhasebeIslemleri sahasına herhangi bir değer yazabiliyorum.

Bunun bir çözümü var mı?

Not:
İlgili sahanın Default Value'sını atamayıp Null değer içerebilir işaretlediğimde sorun yok. Ancak ben programın içinde Null değer kullanımı yapmak istemiyorum.

/o---------------------o\
     www.haser.com
\o---------------------o/

4

Re: Relationships

Bunu çözmek için "EnForce Foreign Key Constrain" No olarak ayarlamak zorunda kalıyorum.

O zaten cozumu degil mi? Sen bunu zorlamasin istiyorsun.

"CariHareket tablosuna nakit tahsilatın yazılması
Insert Into CariHareket (cKodHesap, ...) Values('A011', ...)
Insert Into'da nKodMuhasebeIslemleri sahası yazılmıyor."

Insert into'da nKodMuhasebeIslemleri icin deger verirsen o yazilir, default degil.

5

Re: Relationships

"Insert into'da nKodMuhasebeIslemleri icin deger verirsen o yazilir, default degil."
O işlem eş yazamlı yapılmıyor. Nakit hareketi bugün yapıldıysa muhasebe entegrasyonu 15 gün sonra yapılabilir. Kullanıcının bileceği bir iş. Muhasebe entegrasyonu yapıldığında oluşan nKodMuhasebeIslemleri değerini CariHareket'e atıyorum.

"O zaten cozumu degil mi? Sen bunu zorlamasin istiyorsun."
Ben zorlamasını istiyorum. Ben CariHareket tablosundaki nKodMuhasebeIslemleri sahasına 0 ve MuhasebeIslemleri tablosunda var olan nKodMuhasebeIslemleri değerlerinin yazılabilmesini istiyorum.

"EnForce Foreign Key Constrain" No olarak ayarladığımda CariHareket tablosundaki nKodMuhasebeIslemleri sahasına -1'de yazabilirim. Ya da daha kötüsü MuhasebeIslemleri tablosunda CariHareket tablosuyla ilişkili olan bir kaydı yanlışlıkla sildiğimde SQL hata mesajı vermiyor.

Sorun NULL değer kullanmamandan kaynaklanıyor. Eğer CariHareket tablosundaki nKodMuhasebeIslemleri sahası NULL değer alabilir yapsaydım "EnForce Foreign Key Constrain" Yes olarak ayarlayabilirdim.

Ben "EnForce Foreign Key Constrain" Yes olarak kullanmak ve böylece bazı kontrollerin SQL tarafından yapılmasını istiyorum.

/o---------------------o\
     www.haser.com
\o---------------------o/

6

Re: Relationships

Null kullanmayacaksan ve enforce istiyorsan bir tane sahte 0 kodlu muhasebe zimbirtisi koy.

7

Re: Relationships

Onu biz de düşündük ama Inner Join'li komutlarımızda sorun yaşarız.
nKodMuhasebeIslemi = 0 olan tüm kayıtlarda bu select'te gelir. Programımızın tüm selectlerini de taratıp where kısmına bunu eklemek işimize gelmiyor. Çünkü nKodMuhasebeIslemi sadece bir örnek buna benzer bir sürü saha var sad

Anlaşılan bu işin bizim projemiz için bir çözümü yok.
Kısmet yeni projeye kaldı.

İlgin için teşekkür ederim.

/o---------------------o\
     www.haser.com
\o---------------------o/