Postgresql'de One to Many İlişkisi Nasıl Oluşturulur?
Postgresql'de one to many ilişkisi (1 den n'e ya da birden çoğa) içeren tabloları oluşturmak için aralarında bu ilişkiyi mantıksal olarak barındıracak iki tablo seçmemiz gerekiyor.
Örneğin bir sınıfta birden fazla öğrenci bulunabilir ancak bir öğrenci yalnız bir sınıfa bağlıdır. Bu durumda ortaya one to many dediğimiz ilişki çıkar.
Postgresql'de One to Many İlişkili Tabloların Oluşturulması
Verdiğimiz örneğe devam edecek olursak öğrenci tablosunun nitelikleri adı, soyadı, okul_no, yaş olsun. Sınıf tablosunun nitelikler ise sınıf_no, şube, sınıf_mevcudu olsun. Öncelikle sınıf tablosunu oluşturacak olan sql sorgusunu yazalım.
create table sinif(
id serial primary key,
sinif_no int,
sube char(1),
sinif_mevcudu int
)
ve öğrenci tablosuna ait sorguyu yazıp çalıştıralım.
create table ogrenci(
id serial primary key,
ad varchar(20),
soyad varchar(20),
okul_no int,
yas int,
sinif int references sinif(id)
)
Öncelikle sınıf tablosunu oluşturduk ve öğrenci tablosunu oluştururken sınıf tablosundaki id sütununu, öğrenci tablosuna sınıf niteliği adı altında yabancı anahtar (foreign key) olarak atadık.
Böylece her öğrencinin bir sınıfı oldu ancak sınıf için böyle bir kısıtlama koymadık. Yani 1'e N dediğimiz ilişkiyi oluşturduk. Şimdi tablolara veri ekleyip sorgularla ilişkiyi gösterelim.
Sınıf tablosu için veri
insert into sinif values (default, 1, 'A', 20),(default, 1, 'B', 19),(default, 2, 'A', 21)
Öğrenci tablosu için veri
insert into ogrenci values
(default, 'Ali', 'Turan', 10, 7, 1),
(default, 'Zeynep', 'Kara', 11, 7, 1),
(default, 'Ahmet', 'Çoban', 20, 7, 1),
(default, 'Elif', 'Elmas', 35, 7, 2)
Şimdi 1-A sınıfındaki öğrencileri getirecek olan sorguyu yazıp çalıştıralım.
select * from ogrenci where sinif in (select id from sinif where sinif_no=1 and sube='A')
çalıştırdıktan sonra çıktımız şu şekilde olacaktır: