Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.
Aktivasyon mailiniz gelmediyse buraya tıklayın.
09, 2008, 03:58:00 am
42744 Mesaj 8090 Konu Gönderen: 17931 Üye
Son üye: medist
Turk-Php.Com Forum  |  Yardım Forumları  |  Veritabanı Yardım Forumu  |  Foreign key nasıl kullanılır? « önceki sonraki »
Sayfa: [1] Yazdır
Yazan Konu: Foreign key nasıl kullanılır?  (Okunma Sayısı 544 defa)
masiva
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 41


Üyelik Bilgileri
Foreign key nasıl kullanılır?
« : 06, 2008, 02:52:10 pm »

2 tablom var diyelim..

Müşteri tablosu:
musteri_id(primary key)
adres_id(foreign key referans adres tablosu)

Adres tablosu:
adres_id(primary key)
sehir
ülke

Şimdi ben bu adres_id foreign key kullanarak müşteri talosundan  adres tablosundaki şehir ve ülke bilgilerine nasıl ulaşırım?ulaşabilirmiyim?bu foreign key sadece yanlış girdi girilmesini önlemek ve silme işlemlerinde mi kullanılıyor?dediğim gibi bir sorgu yapmak için foreign key kullanamazmıyım?
Logged
GaziMarşı
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 447


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #1 : 06, 2008, 03:45:48 pm »

Select * From musteri,adres Where musteri.adres_id=adres.adres_id AND sehir=34

İstanbul ilindeki müşteri bilgilerini verir...
Logged

masiva
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 41


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #2 : 06, 2008, 04:03:12 pm »

teşekkürler.kafam çok karışık.bir tasarım yapamadım gitti.orda foreign key olmasa iki tabloyu birbirine bağlayamıyoru dimi.yani belli bir müşterinin adres bilgisini almamız için foreign key şart olmuş oluyor...
Logged
CoDeDaNCeR
Ziyaretçi


E-Posta
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #3 : 06, 2008, 05:37:13 pm »

tablo bağlamanın foreign_key ile bir ilgisi yok (zaten ilk defa duydum bi bakarım neymiş bi ara) 2 tabloda 2 alanı eşitleyip istediğin gibi bağlarsın GaziMarşı nın yazdığı gibi
Logged
masiva
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 41


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #4 : 06, 2008, 06:20:30 pm »

gazinin verdiğinde işte o iki alanı eşitlerken foreign key kullandı.foreign key(yabancı anahtar) olmadan iki tabloyu neye göre eşitliyosun?yukarki iki tabloda bir müşterinin  şehrini nasıl alabilirsin mesela ?
Logged
husmen73
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 40



Üyelik Bilgileri WWW
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #5 : 07, 2008, 04:53:07 am »

Logged

SMF Hızlandırıcılı Web Hosting --> http://www.hostrap.com
GaziMarşı
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 447


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #6 : 07, 2008, 05:34:48 am »

Benim bildiğim kadarıyla musterı tablsundakı adres_id foreign key oluyor.  adres_id olmadan iki tabloyu birbirine bağlayamazsın... Aralarında ortak bir alan olmalı ona da bildiğim kadarıyla foreign key diyorlar...
Logged

husmen73
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 40



Üyelik Bilgileri WWW
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #7 : 07, 2008, 09:42:11 am »

Benim bildiğim kadarıyla musterı tablsundakı adres_id foreign key oluyor. adres_id olmadan iki tabloyu birbirine bağlayamazsın... Aralarında ortak bir alan olmalı ona da bildiğim kadarıyla foreign key diyorlar...
Benimde bildiğim kadarıyla iki tablo arasında bağlantı kurmak için iki aynı sütun olmalıdır. Ancak bu sütunlara foreign key eklesekte eklemesekte tablo bağlantısı kuruluyor. Yukarıda da belirtildiği gibi foreign key sütununa sadece farklı veriler girilir, diğer satırlarda aynı sütuna ait aynı veri bulunamaz. Başka bir bilgi yok bu konuda. Verdiğim linktede foreign key değerine sahip tabloda yapılan herhangi bir işlemin daha hızlı gerçekleşmesini sağlıyor. [Belleğe alıyormuş bilgiyi]
Logged

SMF Hızlandırıcılı Web Hosting --> http://www.hostrap.com
masiva
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 41


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #8 : 07, 2008, 09:56:49 am »

Benim bildiğim kadarıyla musterı tablsundakı adres_id foreign key oluyor. adres_id olmadan iki tabloyu birbirine bağlayamazsın... Aralarında ortak bir alan olmalı ona da bildiğim kadarıyla foreign key diyorlar...
Benimde bildiğim kadarıyla iki tablo arasında bağlantı kurmak için iki aynı sütun olmalıdır. Ancak bu sütunlara foreign key eklesekte eklemesekte tablo bağlantısı kuruluyor. Yukarıda da belirtildiği gibi foreign key sütununa sadece farklı veriler girilir, diğer satırlarda aynı sütuna ait aynı veri bulunamaz. Başka bir bilgi yok bu konuda. Verdiğim linktede foreign key değerine sahip tabloda yapılan herhangi bir işlemin daha hızlı gerçekleşmesini sağlıyor. [Belleğe alıyormuş bilgiyi]

Anladığım kadarıyla sen 3. bir tabloyla yapmayı kastediyosun.Evet o şekilde olabilir ama veri tutarlılığı sağlanamaz o şekilde eğer foreign key kllanmazsak..Yukarda verdiğim 2 tablo arasında bir 3. tablo olmadan,sadece foreign key kullarank örneğin şehir bilgisine ulaşabiliyoruz değilmi?Bu durumda foreign key şart oluyor.

Birde 2 tablo arasında foreign key ile ilişki kurarken herhangi birine bir alan eklemekmi daha iyidir yoksa senin söylediğin gibi 3. bir tablo oluşturup oraya foreign key alanları ekleyerekmi yapmak daha iyidir?
Logged
GaziMarşı
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 447


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #9 : 07, 2008, 10:09:06 am »

Evet bazı durumlarda 3.tablo gerekiyor. Anladığım kadarıyla 3.tablonun kimlik numarası da foreign key oluyor.
Logged

raincu
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 381


Php<I


Üyelik Bilgileri WWW
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #10 : 07, 2008, 10:42:00 am »

2 tablom var diyelim..

Müşteri tablosu:
musteri_id(primary key)
adres_id(foreign key referans adres tablosu)

Adres tablosu:
adres_id(primary key)
sehir
ülke


şimdi ilk mesajındaki bu tablo bi garip geldi bana

adres tablonda bir alan daha olması gerekmiyormu mantıken, tabi bu adres tablosu sadece bir müşteri için yapılmadıysa

mantiken şöyle olması gerekmiyormu?

müşteri tablosu
m_id
adres_id

---------------
adres tablosu
a_id
m_id
adres
Logged

ANLADIM İŞİ ; SANAT ALLAH I ARAMAKMIŞ ! GERİSİ BOŞ, ÇELİK ÇOMAKMIŞ.. (nfk)
masiva
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 41


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #11 : 07, 2008, 11:22:46 am »

ben sadece örnek olarak vermiştim.ama neden gerek duydun adres tablosuna eklmeyi anlayamadım?müşteri id sine göre eşleşen adresinin bilgilerini alamazmıyım o şekilde?neden tek müşteri için olabilir dediniz?
Logged
CoDeDaNCeR
Ziyaretçi


E-Posta
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #12 : 07, 2008, 05:46:00 pm »

Alıntı
gazinin verdiğinde işte o iki alanı eşitlerken foreign key kullandı.foreign key(yabancı anahtar) olmadan iki tabloyu neye göre eşitliyosun?yukarki iki tabloda bir müşterinin  şehrini nasıl alabilirsin mesela ?
foreign key diye bir tanımlama yapmadan da birleştirebilrsin diyorum,biliyoruz da söylüyoruz, denesen görürdün çok zor değil 2 dk. deniyceksin.

Alıntı
Benim bildiğim kadarıyla musterı tablsundakı adres_id foreign key oluyor.  adres_id olmadan iki tabloyu birbirine bağlayamazsın... Aralarında ortak bir alan olmalı ona da bildiğim kadarıyla foreign key diyorlar..

araştırdığıma göre bağlanılan 2 alanın verilerinin eşit olmasını garantiliyormuş, yani sql sorgusunda 2 alanı bağlayarak sorgu yapıyorsun ama sen normalde bağladığın 2 alana da farkı veriler girmiş olabilirsin hata yaparak. bu foreign key 2 alanında verilerinin aynı olmasını sağlıyor onun gibi birşey. yani garantiye alıyor senin hatasız çalışan tablo bağlama olayını yapmanı. faydalı bir özellikmiş gerekli değil ama kullanmakda fayda var
Logged
MeW
PHP Memuru
***
Offline Offline

Mesaj Sayısı: 652


Üyelik Bilgileri WWW
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #13 : 09, 2008, 10:29:30 am »

Kod:
CREATE TABLE `musteriler`
(
`id` INTEGER AUTO_INCREMENT ,
`ad` VARCHAR(255),
`soyad` VARCHAR(255),
PRIMARY KEY (`id`)
) TYPE=InnoDB;



CREATE TABLE `adresler`
(
`id` INTEGER AUTO_INCREMENT ,
`musteri_id` INTEGER,
`sehir` VARCHAR(255),
`ulke` VARCHAR(255),
PRIMARY KEY (`id`)
) TYPE=InnoDB;

gibi bir veritabanı yapısında

Kod:
SELECT * FROM musteriler, adresler WHERE adresler.musteri_id=musteriler.id AND adresler.sehir='Ankara'
sorgusu ile istediğin gibi bir veriyi alabilirsin. Veri alma kısmında foreign key olup olmaması bir farklılık yaratmaz.

Kod:
ALTER TABLE `adresler` ADD FOREIGN KEY (`musteri_id`) REFERENCES `musteriler`(`id`);
Eğer veritabanında adresler.musteri_id sütunu musteriler.id sütununu işaret edecek gibi ayarlarsan, adresler tablosuna yeni veri girerken veya musteriler tablosundan bir satırı silerken, diğer tabloda verinin karşılığı olup olmadığına bakılacaktır. Yani musteriler tablosunda 1, 2 ve 3 id'li 3 tane kayıt varsa, adresler tablosuna musteri_id sütununda 5 olan bir kayıt giremezsin veya adres tablosunda 3 id'li müşterinin adresi kayıtlıyken 3 id'li müşteriyi musteriler tablosundan silemezsin.

Sistem
Kod:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
şeklinde bir hata verir.

Ayrıca eğer foreign key tanımlanırken,
Kod:
ALTER TABLE `adresler` ADD FOREIGN KEY (`musteri_id`) REFERENCES `musteriler`(`id`) ON DELETE CASCADE;
gibi DELETE esnasında yapılacak bir davranış belirtilirse, musteriler tablosundan bir kayıt sildiğinde varsa adres tablosundaki ilgili satırlar da silinir.

Tabi tüm bunların geçerli olması için innodb gibi foreign key destekleyen bir motor kullanmak gerekiyor.
Logged

GaziMarşı
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 447


Üyelik Bilgileri
Ynt: Foreign key nasıl kullanılır?
« Yanıtla #14 : 09, 2008, 01:40:19 pm »

güzel açıklama saol.
Logged

Sayfa: [1] Yazdır 
« önceki sonraki »
Gitmek istediğiniz yer:  


Turk-Php.Com Forum | SMF Forum Software © 2005, Simple Machines LLC. All Rights Reserved.