Index, Primary Key Ve Foreign Key (Firebird / Interbase )

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Index, Primary Key Ve Foreign Key (Firebird / Interbase )

Mesaj gönderen Fatih! »

Primary Key Oluşturma
Hemen hemen her tabloda Primary Key tanımlarız bu bize hız kazandırır. Primary key olarak belirlenecek alan null değere sahip olamaz.ayrıca primary key alanlara aynı değerler girilemez. yani alanda 1 diye bir değer varsa bu alana 1 değeri tekrar eklenemez. genelde otomatik artan alanlar için kullanılır.

Primary Key oluşturmak için tabloyu düzenlerken Constraints Tabındaki Primary Key tabına geçin.
Boş Alanda sağ tıklyıp New Primary Key ile Primary Key oluşturabilir. Drop Primary Key ..... ilede varolan Primary Key'i silebilirsiniz

Resim

compile (şimşek simgeli buton) ( Bundan sonra şimşek simgeli butonu Compile olrak tanımlayacağım ) Basıp işlemi onaylayın.

Index Oluşturma
bir tabloda arama yada sıralama yapacaksanız mutaka index tanımlayın.arama ve sıralama yapacağınız alanları index olarak tanımlamanız size büyük performans sağlar. gereksiz yere index tanımlamaktan kaçının indexler hız kazandırdığı gibi kayıt eklemede yavaşlamaya sebep olur.

Index oluşturmak için tabloyu düzenlerken Indices tabına geçin.
Boş Alanda sağ tıklyıp New Index ile Index oluşturabilir. Drop Index ..... ilede varolan Index'i silebilirsiniz.

Resim

compile' Basıp işlemi onaylayın.

Not : Primary Keyler Not Null olmalıdır

Foreign Key Oluşturma
Bir tabloda kişinin aldığı Ürünler yer alıyor. bu tablodaki alanları diğer tabloyada ekleyebilirdik ancak o zaman her satılan üründe müşterinin adı tekrar tekrar girilecekti. bunnun yerine bu bilgileri iki tablo halinde ayırarak ortak bir alan üzerinde ilişki kurup ürünlerii ayrı bir tablo içinde tutsak nasıl olur..

personel bilgilerinin tutulduğu tabloyu birde 20 alanlı düşünün. kişiye her yeni görev verildiğinde bu bilgileri tekrarlamak hem gereksiz yer işgaline hemde düzensizliğe sebep olacaktı. bu tablolardaki ilişkiyi sağlayan ise foreign keydir. foreign key olarak tanımlanan alan bağlı bulunduğu tablodaki alanda değişiklik olduğu zaman bu değişikliği algılar ve gerekli güncellemeyi yapar. bağlanılan tabloya MASTER Tablo foreign alanın bulunduğu tabloya ise DETAIL tablo diyoruz. Master tabloda kayıt silindiği zaman Detail tablodaki ilgili kaıtlarda silinir.

Master Tablomuz Aşağıdaki gibi olsun

Resim

Detail da Tablomuz Aşağıdaki gibi olsun

Resim

Foreign Key oluşturmak için tablonun Constraints Tabındaki Foreign Key tabına geçin.
Boş Alanda sağ tıklyıp New Foreign Key ile Primary Key oluşturabilir. Drop Foreign Key ..... ilede varolan Primary Key'i silebilirsiniz.

Resim




Update Rule ve Delete Role Bölümündeki seçenekler master tabloda ki foreign key in başvurduğu alann değiştiğinde, tabloya yeni kayıt eklendiğinde veya silindiğinde Foreign Key olaraktanımlanan Detail tablosunun alanında yapılması gerekeni belirler.

NO ACTION > Değer Değişmez
CASCADE > değişiklik Detail tabloyada yansıtılır. master tabloda kayıt silindiğinde o kayda bağlı Detail tabloda ki kayıtlarda silinir. Bunun dışınaki seçenekler başka bir şekilde halletmediyseniz faciaya sebep olur :-)
SET NULL > alandeğerini boş yani Null yapar.
SET DEFAULT > Foreign key alanına varsayılan bir değer belirlediyseniz alan o değeri alır.
compile butonuna Basıp işlemi onaylayın.


NOT : Primary ve Foreign Keyleri ayrıca index olarak tanımlayın. Bu size hız kazandıracaktır
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: Index, Primary Key Ve Foreign Key (Firebird / Interbase

Mesaj gönderen pro_imaj »

Merhaba,

Öncelikle makaleniz için tşk ederim güzel bir çalışma olmuş.
yalnız.
FAOsoft yazdı:Primary Key Oluşturma
Hemen hemen her tabloda Primary Key tanımlarız bu bize hız kazandırır. Primary key olarak belirlenecek alan null değere sahip olamaz.ayrıca primary key alanlara aynı değerler girilemez. yani alanda 1 diye bir değer varsa bu alana 1 değeri tekrar eklenemez. genelde otomatik artan alanlar için kullanılır.
Key olarak tanımlanan bir alana aynı veri ikinci defa tekrardan girilebilir.

Saygılarımla
Çalışmalarınızda başarılar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

mümkün değil :)
Bu bir şekilde mümkün olabilir o da iki alan üzerine primary key kurmak.
şöyleki

Kod: Tümünü seç

IDNO1  IDNO2
----------------------
1           1  olur
1           2  olur
1           1  Olamaz
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

pro_imaj yazdı:Key olarak tanımlanan bir alana aynı veri ikinci defa tekrardan girilebilir.
doğrudur key olarak tanımladığınız bir alana aynı veri ikinci defa girilebilir. Tabi unique seçilmemişse.
Ancak Burda söz konusu olan primarykey ise @FaoSoft arkadaşın sözlerine katılıyorum. Katılmamak elde değil. :)
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

aslında ben ikinizede katılmakla birlikte kafamı karıştıran şeyi izah edeyim.

Bir prog vt inceliyorum daha doğprusu veri transferi yapıyorum. (MSSQL) Orada böyle bir olay gördümde o yüzden

O zaman bu alanları nasıl ilişkilendirebiliriz FAOsoft senin yaptığın örnek gibi.

aslangeri arkadaşım unique nasıl seçiyoruz yani MSSQl de bunu nasıl yapabilirim.

Saygılarımla
Çalışmalarınızda başarılar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

az daha makalem iftiraya kurban gidecekti :)
mssql için viewtopic.php?t=9833&highlight= makalemi oku unique orda yazıyor
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Bu arada mssql de denemedim ama tahminen söyliyeyim.
Primary key yapadcağın alanları tablo tasarım anıda fare ile seçip anahtar simgesie tıkla.
Detaıl tabloya aynı tipte priary key olarak ayarladığın alanların özellikleriyle aynı iki alan ekle.
Detail tabloda tasarım anındayken relation........ Buttouna tıkla. Normal fk'dan tek farkı fk listesine bir değil iki alanı göstereceksin.
Umarım anlatabilmişimdir
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Sql server ın replication hizmetini kullanırsan bu da primary keyleri karıştırabiliyor.Negatif sayılar bile olabiliyor.Ancak aksi durumda primery key in tekrar etmesi mümkün değil.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Makalenin kurbana gitmesi gibi bir durum söz konusu bile olamazdı :D

Üstad Çok önemli bilgiler ve makaleler yazıyorsunuz Öncelikle Sizden ve diğer Arkadaşlardan Allah (cc) razı olsun yani. Şöyle durup düşündüğümde buradaki hizmetin Maddi manevi boyutunu düşünemiyorum.

Sorun için ise diğer makalenize hemen ulaşıyorum.


Saygılarımla
Çalışmalarınızda başarılar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba FAOsoft Hocam,
sizin yazdıklarınız deneyeyim dedim. bir sorunum çıktı.
ibexperte musteri adıyla ana tabloyu, mustdet adıyla detay tabloyu oluşturdum.
yanlız foreign key i oluştururken

Kod: Tümünü seç

This operation is not defined for system tables.
unsuccessful metadata update.
object MUSTERI is in use .

şeklinde bir hata veriyor.

Foreign key i Mustdet yani detay tablodan oluşturmaya çalışıyorum.

Acaba nerede hata yapıyorum.

Kolay gelsin.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Nasıl olduğunu anlamadım ama şuan çalışıyor. :)
O hatayı verince foreign key deki Cascade leri no action yaptım. Compile etti.
biraz veri girip silmeye kalktım. Silmedi. Daha sonra no action ları yine cascade edip compile ettim. Normal compile etti. Daha sonraki masterden bir kayıt sildim. Detaya baktım oradan da silmişti.

Sanırım her iki dosyam boş olduğu için bunu kabul etmiyordu. Öyle olursa runtime da dosya oluştururken nasıl yapacağız. :?:

Kolay gelsin.
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

boş ve dolu ile ilgisi yok. o alan kullanımdayken böyle br işlem yapmaya çalıştığında bu hatayı verir.
ayrıca trigger vs.. ile içinde bu alanın ismi geçiyorsa yie bu hatayı verecektir
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

FAOsoft yazdı:boş ve dolu ile ilgisi yok. o alan kullanımdayken böyle br işlem yapmaya çalıştığında bu hatayı verir.
ayrıca trigger vs.. ile içinde bu alanın ismi geçiyorsa yie bu hatayı verecektir
Haklısınız sanırım o zaman bir Commit işlemi yapmamıştım. Bununla alakası olmadan master a kayıt yapıp commit etmediğim için detailde ekleme yaparken hata veriyordu. O zaman commiti anlamıştım. Bir in use kelimesinden.
Kolay gelsin.
Kullanıcı avatarı
mudipasa
Üye
Mesajlar: 169
Kayıt: 13 Tem 2004 02:25
Konum: Batman

Mesaj gönderen mudipasa »

FAOsoft hocam S.A.
Allah Razı olsun görsel olarak yardımların çok iyi geliyor. Yalnız primary keyde canım çok sıkıldı. Tanımlayınca ne güzel PK_MUSTERI, PK_SIRA v.s. isimler verebiliyorsunuz. Benim hep index name mi kendisi RDB$... lı bişey veriyor. Ben nasıl yapacam onu. Birde Delphi ortamında master-detail bağlantısını nasıl yapacam index i ne olacak bi yardımcı olsanız sevinirim. şimdiden teşekkür ederim. benim gibi yeni başlayanlara çok lazım olacak birşey bence...
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Resim

masterr detaille ilgili sitede bir makalemin olması lazım.
bunun aynıydı: http://www.delphidunyasi.net/index.php?topic=88.0
Cevapla