Arkadaşlar merhaba...
URUNLER tablosundaki URUN_URETICISI_KODU alanı foreign key ile URUN_URETICILERI tablosundaki URUN_URETICISI_KAYIT_NO(triger ile otomatik artan primary alan) alanına bağlı.
URUNLER tablosundaki URUN_URETICISI_KODU boş kalınca haliyle hata veriyor veri tabanı; URUN_URETICILERI tablosunda null üretici kaydı olmadığı için...
Bu problemi aşmak için aklıma " 'URUN_URETICILERI' tablosundaki ilk kayda kendim null (veya 'Seçilmemiş' gibi bir değer) değer gireyim, eğer alan URUNLER tablosundaki URUN_URETICISI_KODU boşsa da bi tane triger otomatik olarak bu null alanının (URUN_URETICILERI ndeki null alanın) sıra no sunu versin URUNLER tablosundaki URUN_URETICISI_KODU alanına. " diye bi düşünce geldi... Ama bunun çok da iyi bir yol olmadığını düşündüm...
Bu işi yapabilmem için daha teknik bir yol var mı? Foreign bir alanı boş bırakabilir miyim? Yardımlarınız için şimdiden teşekkür ederim...
foreign key alanı boş bırakabilir miyim?
- huseyinkucuk
- Üye
- Mesajlar: 142
- Kayıt: 29 Nis 2005 10:03
- Konum: İstanbul
- İletişim:
foreign key alanı boş bırakabilir miyim?
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Foreign Key tanımlamasında ana tablodaki keylerin mutlaka required olması gerekiyor. Ancak alt tabloda bu zorunlu değil.
Burada sorun başka olsa gerek. Eğer URUNLER tablosunda URUN_URETICISI_KODU alanı NOT NULL (Required) tanımlı ise zaten hata verecektir. Ama NULL (not Required) ise zaten NULL olduğunda FOREIGN KEY kontrolü yapılmayacaktır.
Aslında her iki tablonun yapısını (SQL script, INDEXler ve FOREIGN KEYler dahil) verirseniz daha net yorum yapılacaktır.
İyi çalışmalar.
Burada sorun başka olsa gerek. Eğer URUNLER tablosunda URUN_URETICISI_KODU alanı NOT NULL (Required) tanımlı ise zaten hata verecektir. Ama NULL (not Required) ise zaten NULL olduğunda FOREIGN KEY kontrolü yapılmayacaktır.
Aslında her iki tablonun yapısını (SQL script, INDEXler ve FOREIGN KEYler dahil) verirseniz daha net yorum yapılacaktır.
İyi çalışmalar.
- huseyinkucuk
- Üye
- Mesajlar: 142
- Kayıt: 29 Nis 2005 10:03
- Konum: İstanbul
- İletişim:
@Hakan hocam; sanırım @rsimsek abinin dediği gibi, foreign alanlar boş bırakılamıyor. (kanımca; ana tabloda null bi alan olursa boş bırakılabilir -ki onu da sonuçta bi numara temsil etçek, numarayı seçecez mecbur-). Ancak prosedürle felan olur sanıyorum, doğal yollardan olmaz. Ben de normal foreign key olmayan alanlarla ilişkilendircem artık, lookup sütunlar falan kullanırım... Recep abi, Hakan hocam; teşekkür ederim; çalışmalarınızda Allah'tan zihin açıklığı dilerim...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Aslında FireBird'de olup da MS-SQL'de olmayan ve benim en çok canımı sıkan MS-SQL'in bir eksiği diye düşündüğüm bir konu bu diye mesajın başında belirteyim diye düşünmüştüm ama sonradan vazgeçmiştim.
Yani bu FireBird'de bu şekilde. Ama dediğim şartlarla. Yani ana tabloda mutlaka NOT NULL. Ama alt (detay) tablolarda ister NULL ister NOT NULL. Sana kalmış.
Basit bir örnek vereyim:
ILLER tablosunda IL_KODU NOT NULL tanımlı. Ancak ADRES_DEFTERI tablosunda IL_KODU NOT NULL tanımlı değil ve FOREIGN KEY tanımlaması yapılmış. ADRES_DEFTERI tablosunda IL_KODU'na ya NULL girebilirsiniz veya ILLER tablosundaki bir değeri.
Kastım bu idi.
İyi çalışmalar.
Yani bu FireBird'de bu şekilde. Ama dediğim şartlarla. Yani ana tabloda mutlaka NOT NULL. Ama alt (detay) tablolarda ister NULL ister NOT NULL. Sana kalmış.
Basit bir örnek vereyim:
Kod: Tümünü seç
CREATE TABLE ILLER (
IL_KODU VARCHAR(3) NOT NULL,
IL_ADI VARCHAR(30) NOT NULL,
CONSTRAINT PK_ILLER PRIMARY KEY (IL_KODU));
CREATE TABLE ADRES_DEFTERI (
ADRES_NO DOUBLE PRECISION NOT NULL,
KIMLIGI VARCHAR(100) NOT NULL,
ADRESI VARCHAR(100),
IL_KODU VARCHAR(3),
NOTLAR VARCHAR(100),
CONSTRAINT PK_ADRES_DEFTERI PRIMARY KEY (ADRES_NO),
CONSTRAINT FK_ADRES_DEFTERI_IL_KODU FOREIGN KEY (IL_KODU) REFERENCES ILLER (IL_KODU) ON UPDATE CASCADE);
Kastım bu idi.
İyi çalışmalar.