masiva
Yeni Kullanıcılar
Offline
Mesaj Sayısı: 41
|
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şı
|
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
Mesaj Sayısı: 41
|
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
|
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
Mesaj Sayısı: 41
|
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
|
|
|
|
|
|
|
GaziMarşı
|
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
|
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
|
|
|
|
masiva
Yeni Kullanıcılar
Offline
Mesaj Sayısı: 41
|
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şı
|
Evet bazı durumlarda 3.tablo gerekiyor. Anladığım kadarıyla 3.tablonun kimlik numarası da foreign key oluyor.
|
|
|
|
|
Logged
|
|
|
|
|
raincu
|
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
Mesaj Sayısı: 41
|
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
|
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. 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
|
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 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. 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 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, 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
|
|
|
|
|
|
|