• Bir süredir maillerde yaşanan sorunlar giderilmiştir. Şifremi unuttum yaparak şifrelerinizi mailinizden alabilirsiniz.

  • Foruma hoş geldin 👋 Ziyaretçi

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Çözüldü sql Foreign Key kullanımı

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

mesut42

Bronz Üye
Kullanıcı Bilgileri
Aktiflik
Çevrimdışı
Katılım
26 Nis 2024
Mesajlar
92
Aldığı beğeni
5
Excel V
Office 2016 TR
Konuyu Başlatan
Arkadaşlar merhaba. foreign key bir türlü anlamadım. Hayvanların gebelik listesini oluşturmaya çalışıyorum
yapmak istediğim aslında şu; hayvanlistesi view den çift tıklayınca o hayvana ait gebelik geçmişini görmek bu konuda neyi neyle eşleştireceğimi bilemedim
tablo da fazla olan veya eksik olan var mı?
Ekran görüntüsü 2024-05-30 114419.png
 
Çözüm
Hayvanların gebelik listesini oluşturmak için, SQL'de Foreign Key kullanarak iki tabloyu ilişkilendirebilirsiniz.

1. Tabloları Oluşturma​

Öncelikle iki tablo oluşturacağız: Hayvanlar ve Gebelikler. Hayvanlar tablosu her hayvanın bilgilerini tutacak, Gebelikler tablosu ise her hayvanın gebelik geçmişini tutacak.

sql:Kodu
CREATE TABLE Hayvanlar (
HayvanID INT PRIMARY KEY,
HayvanAdi VARCHAR(50),
Tur VARCHAR(50),
Yas INT
);

CREATE TABLE Gebelikler (
GebelikID INT PRIMARY KEY,
HayvanID INT,
BaslangicTarihi DATE,
BitisTarihi DATE,
YavruSayisi INT,
FOREIGN KEY (HayvanID) REFERENCES Hayvanlar(HayvanID)
);

2. Örnek Veriler Ekleme​

Tablolara örnek veriler ekleyelim.

INSERT INTO Hayvanlar (HayvanID, HayvanAdi, Tur, Yas)
VALUES
(1...
Hayvanların gebelik listesini oluşturmak için, SQL'de Foreign Key kullanarak iki tabloyu ilişkilendirebilirsiniz.

1. Tabloları Oluşturma​

Öncelikle iki tablo oluşturacağız: Hayvanlar ve Gebelikler. Hayvanlar tablosu her hayvanın bilgilerini tutacak, Gebelikler tablosu ise her hayvanın gebelik geçmişini tutacak.

sql:Kodu
CREATE TABLE Hayvanlar (
HayvanID INT PRIMARY KEY,
HayvanAdi VARCHAR(50),
Tur VARCHAR(50),
Yas INT
);

CREATE TABLE Gebelikler (
GebelikID INT PRIMARY KEY,
HayvanID INT,
BaslangicTarihi DATE,
BitisTarihi DATE,
YavruSayisi INT,
FOREIGN KEY (HayvanID) REFERENCES Hayvanlar(HayvanID)
);

2. Örnek Veriler Ekleme​

Tablolara örnek veriler ekleyelim.

INSERT INTO Hayvanlar (HayvanID, HayvanAdi, Tur, Yas)
VALUES
(1, 'Kara', 'İnek', 5),
(2, 'Beyaz', 'İnek', 4),
(3, 'Alaca', 'Koyun', 3);

INSERT INTO Gebelikler (GebelikID, HayvanID, BaslangicTarihi, BitisTarihi, YavruSayisi)
VALUES
(1, 1, '2023-01-01', '2023-04-01', 2),
(2, 2, '2023-02-01', '2023-05-01', 1),
(3, 1, '2024-01-01', '2024-04-01', 3);

3. Hayvanlar İçin Görünüm Oluşturma​

Her hayvanın bilgilerini ve gebelik geçmişini görüntülemek için bir VIEW oluşturabiliriz.

CREATE VIEW HayvanGebelikGorunumu AS
SELECT
h.HayvanID,
h.HayvanAdi,
h.Tur,
h.Yas,
g.GebelikID,
g.BaslangicTarihi,
g.BitisTarihi,
g.YavruSayisi
FROM
Hayvanlar h
LEFT JOIN
Gebelikler g ON h.HayvanID = g.HayvanID;

4. Belirli Bir Hayvanın Gebelik Geçmişini Görüntüleme​

Bir hayvanın gebelik geçmişini görüntülemek için hayvanın ID'sini kullanarak sorgu yapabilirsiniz. Örneğin, ID'si 1 olan hayvanın gebelik geçmişini görmek için:

SELECT
HayvanID,
HayvanAdi,
Tur,
Yas,
GebelikID,
BaslangicTarihi,
BitisTarihi,
YavruSayisi
FROM
HayvanGebelikGorunumu
WHERE
HayvanID = 1;

Bu sorgu, belirli bir hayvana ait tüm gebelik geçmişini getirecektir.

5. Uygulama Entegrasyonu​

Eğer bir uygulama kullanıyorsanız (örneğin, bir masaüstü veya web uygulaması), hayvanlar listesini görüntülediğinizde bir hayvana çift tıkladığınızda yukarıdaki sorguyu çalıştırarak ilgili hayvanın gebelik geçmişini gösterebilirsiniz.

Bu adımlarla, hayvanların gebelik listesini SQL'de Foreign Key kullanarak ve uygun sorgularla nasıl oluşturabileceğinizi ve görüntüleyebileceğinizi göstermiş olduk.

Alıntı bir kaynaktır
 
Çözüm
Böyle bir projeye girişmek için önce sağlam bir veritabanı bilgisine ihtiyaç var. Tablolarınız baştan sona hatalı. Anladığım kadarıyla belirli bir yol katetmişsiniz ve geri dönüşü de çok zor gibi duruyor.

Fakat yine de düzeltebileceğinize inanıyorsanız HayvanListesiTable tablonuzda bulunan Primary Key'inizin Gebelikleri tuttuğunuz tabloda bir karşılığı olması gerekir. Bu iki alan arasında bire çok ilişki kurularak sorun çözülür.
 
Böyle bir projeye girişmek için önce sağlam bir veritabanı bilgisine ihtiyaç var. Tablolarınız baştan sona hatalı. Anladığım kadarıyla belirli bir yol katetmişsiniz ve geri dönüşü de çok zor gibi duruyor.

Fakat yine de düzeltebileceğinize inanıyorsanız HayvanListesiTable tablonuzda bulunan Primary Key'inizin Gebelikleri tuttuğunuz tabloda bir karşılığı olması gerekir. Bu iki alan arasında bire çok ilişki kurularak sorun çözülür.
eyvallah hocam sizlerin yardımıyla çözeceğiz inş. "HayvanListesiTable tablonuzda bulunan Primary Key'inizin Gebelikleri tuttuğunuz tabloda bir karşılığı olması gerekir." banada tam bu lazım nasıl olmalı hocam?
 
Hayvanlar tablosunda her hayvanı tanımlayan bir ID alanımız var. Gebelikler tablosunda da gerçekleşen her gebeliği tanımlayan ID alanımız var, bu alanlar her bir tablonun kendi Birincil Anahtarı. Bu her kaydın benzersizliğini nitelemek için çoğu zaman gerekli bir alan.

Bir de her tabloda olmasa da pek çok tabloda Foreign Key yani Yabancı anahtara ihtiyaç duyarız. Burada asıl anlamamız gereken konu bu Foreign Key denen şeye ne zaman ihtiyaç duyarız?

Sorunuz üzerinden örneklendirerek gidelim. Gebeliklerimizi takip ettiğimiz bir tablo tutmaya karar verdik ve gerekli alanları yerleştiriyoruz.

İlk soru: Gebelik dediğimiz şey neyle ilgilidir? sorumuzun cevabı; hayvanla ilgili. Demekki benim gebelikler tablomda hayvanla ilgili bir alan bulundurmam gerekiyor.
İkinci soru: Her bir hayvan kaç kere gebe olabilir? Birden fazla mı? Bir kere mi? sorumuzun cevabı; birden fazla kez olabilir. O halde Gebelikler tablomda HayvanID birden fazla kez geçebilir. Bu demektir ki HayvanID alanım bir değeri birden fazla kez içerebilir. Bu durumda bire çok ilişki ile tablolarımı ilişkilendirmem gerekecek.

Örnek resimde de gösterdiğim gibi Hayvanlar tablosu ile Gebelikler tablosu arasındaki çizgi aralarındaki ilişkiyi ifade ediyor. Bu çizginin Hayvanlar tablosundaki kısmında 1 yazıyor, Gebelikler tablosundaki kısmında sonsuzluk işareti var.
Bu örnek veriyorum 10 numaralı hayvan ID'sinin Hayvanlar tablosunda sadece 1 kere geçebileceğini, Gebelikler tablosunda ise birden çok kez geçebileceğini ifade ediyor.
 

Ekli dosyalar

  • Adsız.jpg
    Adsız.jpg
    20.9 KB · Gösterim: 5
Tablonuzdaki hatalardan bazılarına gelecek olursak bir kaç soruma cevap veremediğinizi gördüğünüzde hatanızı anlayacaksınız.

1. Hayvanları tuttuğunuz tabloda "gebeid" alanı görüyoruz. Burada bir hayvanın birden fazla kez gebe kalması durumunda nasıl göreceğiz?

2. Gebelikleri tuttuğumuz tabloda id alanımız zaten bulunuyorken en aşağıdaki gebeid alanımız neyi temsil ediyor? hayvanı temsil edecekse sorun yok. Hayvanı temsil etmiyorsa bu tabloda neyi temsil ediyor?

3. Hayvanımızın cinsiyeti, ırkı gibi bilgileri zaten Hayvanlar tablosunda tuttuğumuza göre ve buradan istediğimiz zaman ulaşabildiğimize göre bu bilgileri Gebelikler tablosunda neden tekrar tutuyoruz?

Çok basit 3 soru ile en temel hataların ortaya çıkmasını sağlayabiliriz.

Daha da detaylandırılabilir.
Biraz daha ileri gidersek bir tabloda 1.Tarih, 2.Tarih, 3.Tarih gibi alanlar tutmak yerine birden fazla kez tekrar etmesi muhtemel şeyler için yeni bir tabloda ayrı ayrı tutma eğilimine gideriz. Yani aslında Asilamalar diye bir tablo daha açıp bu sefer Gebelikler tablosu ile Asilamalar tablosu arasında bire çok ilişki kurmak gerekir.
 
İlginiz için tşk ederim meseleyi şimdi anladım tabloları ona göre editledim birşey daha sormak isterim yukarıdaki kod satırında hayvanın durumu diye 3 şart koştuk bu 3 karttan birini seçelim örneğin tohumlandıyı seçince kayıt yapıp gebe formunu açıyor açarken işlem yapılan hayvanın id sini otomatik seçmesini istiyorum bunun kodu nasıl yazılıyor hocam
 
İlginiz için tşk ederim meseleyi şimdi anladım tabloları ona göre editledim birşey daha sormak isterim yukarıdaki kod satırında hayvanın durumu diye 3 şart koştuk bu 3 karttan birini seçelim örneğin tohumlandıyı seçince kayıt yapıp gebe formunu açıyor açarken işlem yapılan hayvanın id sini otomatik seçmesini istiyorum bunun kodu nasıl yazılıyor hocam
yapılan process nedir tam olarak anlamadım. Daha detaylı anlatırsanız nasıl bir çözüm üretilebilir üzerinde düşünürüz.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst