Merhabalar, bu yazımda ORM nedir? Model İlişkileri Nelerdir? ve Django’da model ilişkileri nasıl kurulur? sorularını cevaplamaya çalışacağım.
ORM Nedir?
Object Relational Mapping veyahutta kısaca aşina olduğumuz adıyla ORM denilen kavram veriyi işlediğimiz sınıflar ile veritabanımız arasında kurduğumuz bir köprüdür. ORM’ler sayesinde veri özelliği taşıyan sınıflarımız üzerinde rahatlıkla CRUD işlemlerini gerçekleştirebiliriz.
ORM sayesinde kod bloklarımız içerisinde yazdığımız SQL işlemlerini otomatik olarak sınıflarımız üzerinden gerçekleştirebiliriz. Oluşturduğumuz sınıflar veritabanındaki tablolara, sınıflara ait property’ler ise veritabanındaki ilgili tablonun kolonlarını temsil etmektedir. Bu sayede veritabanındaki verilere de ait olduğu sınıflar üzerinden erişilebilmektedir.
Model İlişkileri Nedir?
Kısaca veri tabanındaki farklı tablolar arasında ilişkiler kurmaktır. Tablolar her satırında ilgili satıra ait benzersiz anahtarlar taşırlar. Bu sayede ilişki kurulmak istenen tablolar arasında benzersiz anahtarlar üzerinden ilişki kurulur. Daha detaylı bilgi için buraya bakabilirsiniz.
3 tip ilişki vardır
- One to One ( Bire bir)
- Many to One (Çoka bir)
- Many to Many (Çoka çok)
Dilerseniz Django üzerinden bu ilişkilerin nasıl kurulacağını görmeye çalışalım.
One to One
Senaryomuz şu şekilde olacak: CompanyCar ve Employee adında iki adet modelimiz olacak. Her işçinin bir adet şirket aracı ve her şirket aracının da yalnızca bir adet işçi sahibi olacak.
models.OneToOneField sayesinde bire bir ilişkilerimizi kurabiliyoruz. Parametre olarak verilen to hangi app altındaki hangi model ile ilişki kuracağımızı belirtmemize yarıyor ve on_delete parametresi ise zorunlu olarak vermemiz gereken, ilişki kurulacak nesne (CompanyCar) silindiğinde ilişki kurulan (Employee) nesneye ne olacağını belirtmemizi sağlıyor. models.CASCADE ile CompanyCar nesnesi silindiğinde ilişki kurulmuş olan ilgili Employee nesnesinin de silinmesi gerektiğini ifade etmektedir.
ORM’i tanımlarken demiştik ki satırlara ait benzersiz anahtarlar üzerinden ilişkiler kurulmaktadır. Alttaki resimde de gördüğümüz üzere employee tablomuzda ilşki kurduğumuz CompanyCar nesnesine ait anahtar tutulmaktadır.
Many to One
Senaryomuz şu şekilde olacak: Product ve Review modellerimiz olacak. Her Review nesnesinin sadece bir adet Product nesnesi olacak fakat her Product nesnesinin birden fazla Review nesnesi olabilecek.
models.ForeignKey sayesinde de çoka bir ilişkilerimizi kurabiliyoruz. Parametre olarak geçtiğimiz related_name ise Çoka Bir ilişkide ‘Çok’u temsil eden nesne üzerinden ‘Bir’i temsil eden nesnelere nasıl ulaşmak istediğimizi temsil etmektedir. Örnek olarak 3 adet Review nesnesinin ilişkili olduğu bir Product nesnesine sahipsek, product.reviews ile o nesnenin ilişkili olduğu tüm Review nesnelerine ulaşabiliriz.
Ve yine One to One ilişkide olduğu gibi review tablosunda ilişki kurulmuş tabloya ait benzersiz anahtarların tutulduğu kolon.
Many to Many
Many to Many ilişkisinde bundan önceki 2 ilişkiden farklı olarak kurulan ilişki içinde ayrıca bir tablo oluşturulur ve ilişki kurulan iki modele ait benzersiz anahtarlar bu tabloda tutulur.
Senaryomuz şu şekilde olacak: User ve Role adında iki adet modelimiz olacak. Her User nesnesi birden çok Role nesnesine ve her Role nesnesi de birden çok User nesnesine sahip olacak. Yani her kullanıcının birden fazla rolü, her role sahip de birden fazla kullanıcı olacak.
models.ManyToManyField sayesinde de çoka çok ilişkiler kurabilmekteyiz.
User sınıfından oluşturulmuş bir nesneye air Role nesnelerine ulaşmak:
Role sınıfından oluşturulmuş bir nesneye ait User nesnelerine ulaşmak:
Aşağıdaki resimde de görüldüğü üzere Many to Many ilişkisi için ilişki kurulan nesnelere ait benzersiz anahtarların tutulduğu yeni bir tablo oluşturulmuştur.
Bu yazımda Django ORM ve model ilişkilerini anlatmaya çalıştım, umarım faydalı olmuştur.