3. İlişkisel Veritabanı Nedir?
Verilerin satır ve sütunlardan oluşan tablolarda standart bir yapıda
saklandığı, yüksek veri tutarlılığına sahip veritabanlarıdır.
!
İlişkisel veritabanı, veritabanlarının ilişkisi değil veritabanı
içerisindeki nesnelerin ilişkili olmasıdır.
ID
1
ad
Muhittin
soyad
Özer
eklenme_tarihi
2014-02-22 09:30:00
2
Ali Emre
Çakmakoğlu
2014-02-22 09:35:40
3
Alpcan
Aydın
2014-02-22 12:15:23
4
5
Aybars
Rasim Canser
Cengaver
Yanbakan
2014-02-22 13:55:09
2014-02-22 16:10:00
5. Diğer Veritabanı Yapıları
•
Hiyerarşik Veritabanları: Ağaç-Dal mimarisinde
geliştirilmiş veritabanlarıdır.
•
Çok Boyutlu Veritabanları: Verileri kategorize eden
boyutları ve ölçümleri taşıyan veritabanlarıdır.
•
Yapılanmış Bellek (Anahtar Değer Depoları): Sabit bir
veri düzeni olmayan, anahtar ve değer taşıyan
veritabanlarıdır.
6. İlişkisel Veritabanı Kavramları
•
Nesne (Entity): Veritabanında tutulan her bir veri
modelidir.
•
Özellik (Attribute): Veritabanı nesnelerine ait verilerdir.
•
Anahtar (Key): Veritabanı nesnelerinin ayırıcı özellikleridir.
•
Birincil Anahtar (Primary Key): Her bir nesne için
benzersiz olan tanımlayıcı anahtardır.
7. İlişkisel Veritabanı Kavramları
•
İlişki (Relation): Veritabanı nesnelerinin birbirleri ile olan
ilişkilerinin tanımlanmasıdır.
•
Yabancı Anahtar (Foreign Key): Veritabanı nesnelerinin
birbirleri ile olan ilişkilerinde bu ilişkinin kurulmasını
sağlayan ve ilişkili olunan nesnede ilişki kurulan nesnenin
birincil anahtarının değerini taşıyan özelliktir.
9. One-to-One İlişki
•
Her iki tabloda da bir nesneye karşılık yalnızca bir
nesne ile ilişki kurulabilir.
•
En güzel örnek: Evlilik :)
Not: Bu örnekte Medeni Kanun baz alınmıştır :)
10. One-to-Many İlişki
•
Bu ilişki türünde ise elimizdeki nesne ile ilişkili olan
nesneden birden fazla olabilmektedir.
•
Örnek: Üye-Sipariş
11. Many-to-One İlişki
•
Bu ilişki türü ise One-to-Many ilişkinin tam tersidir. Yani
ilişkili olan nesne gibi bir çok nesne karşı tarafta aynı
nesne ile ilişkili olabilir.
•
Örnek: Aynı örnek'te bu sefer Sipariş - Üye ilişkisini ele
alabiliriz.
12. Many-to-One ve One-to-Many İlişki Örnekleri
•
Üniversite - Fakülte
•
Fakülte - Bölüm
•
Marka - Model
•
Kategori - Kategori (Alt Kategori Yapısı)
•
İl - İlçe
13. Many-to-Many İlişki
•
Eğer nesneler birbirleri ile karşılıklı olarak birden fazla
nesne ile ilişkili olabiliyorsa bu ilişki türü Many-to-Many
ilişki olmaktadır.
•
Örnek: Haber - Kategori
16. ORM Nedir?
•
ORM kavramı ilişkisel veritabanlarında bulunan nesnelerin,
özelliklerinin ve ilişkilerinin yazılım tarafında tanımlanarak
bu kavramların yazılım tarafında da karşılıklarının
oluşturulması (veritabanının haritalanması) işlemini ifade
eder.
•
CRUD işlemleri için veritabanı sorgusu yazmanıza gerek
kalmaz. Bu işlemleri sizin yerinize ORM gerçekleştirir.
17. ORM'nin Avantajları
•
OOP Kullanmaya Zorlar
•
Geliştirme Hızı
•
Standart Kodlar
•
Veritabanından Bağımsız Bir Yazılım
•
Sizin İş Yükünüzü Hafifletir
18. ORM'nin Avantajları
•
Sorgu Yazmaktan Kurtarır (Güvenlik açığı vermenizi
engeller)
•
Test Edilebilir Kod
•
Ekstra Araçlar Sağlar (Dil Desteği, Tree Yapısı, Slug Yapısı,
Soft-Delete vb.)
•
Event (Listener) Desteği
21. Sensio Labs tarafından geliştirilen ORM, DBAL ve ODM gibi
veritabanı çözümleri sunan PHP kütüphanesidir.
22. Neden Doctrine Kullanmalıyım?
•
2006’dan beri geliştirilen stabil bir ORM kütüphanesidir.
•
Esnek ve güçlü nesne haritalama ve sorgu özelliklerine
sahiptir.
•
En basit seviyeden en karmaşık sistemlere kadar her
seviyede çözümler sunabilmektedir.
•
Birçok framework ile olan entegrasyon kolaylığı.
23. Neden Doctrine Kullanmalıyım?
•
Büyük bir kitle tarafından kullanılması ve geliştiriliyor
olmasından dolayı geniş destek ağına sahip olması
ORM Kütüphanesi
Doctrine / Doctrine2
Propel
Eloquent
DataMapper
RedBean
php.activerecord
Soru Sayısı
4569 / 6045
829
937
882
140
120
25. Entity Kavramı
•
Entity’ler veritabanında tutulacak her bir nesnenin
Doctrine tarafında karşılığıdır. 4 farklı şekilde entity yapısı
tanımlanabilir:
•
Annotation
•
XML
•
YAML
•
PHP Kodu
26. Entity Manager ve CRUD İşlemleri
•
EntityManager sınıfı Doctrine’in komuta merkezidir.
30. Query Builder Kullanımı
•
Bazen EntityRepository metodları bize istediğimiz verileri
sunamayabilir.
•
Query Builder, bizi böyle durumlarda SQL yada DQL
sorguları yazmaktan kurtaran bir Doctrine sınıfıdır.
31. DQL Kullanımı
•
Query Builder kullanımının yetersiz kaldığı yada
performans kaybına neden olduğu durumlar için Doctrine
bize DQL söz dizimi ile sorgu imkanı sağlıyor.
•
SQL söz dizimi ile birebir aynı olan ama tablo yerine
Doctrine nesneleri ve sütunlar yerine bu nesnelerin
özelliklerinin kullanıldığı bir yapısı vardır.
32. Doğal SQL Sorguları Yazmak
•
SQL'in gücünü kullanmak istediğinizde Doctrine doğal
SQL sorguları da yazmanıza olanak sağlıyor.
•
View, Stored Procedure vb SQL özelliklerini kullanmak
istediğiniz zaman bu seçenek en çok ihtiyacınız olan
yöntem olacaktır.
33. Doctrine Event Sistemi (Lifecycle Events)
•
Doctrine kendi event sistemine LifeCycle Events ismini
veriyor.
•
Veritabanında yapılan işlemlerle alakalı tüm sürece bu
event'ler sayesinde dahil olabilirsiniz.
•
2 Farklı yöntem vardır:
•
Entity Dosyası içerisinde tanımlanan metodlar
•
Listener Class'ı oluşturularak
34. Doctrine'de Ön Tanımlı Event'ler
•
preRemove – Silme işleminden önce
•
postRemove – Silme işleminden sonra
•
prePersist – Yeni kayıt eklemeden önce
•
postPersist – Yeni kayıt ekledikten sonra
•
preUpdate – Herhangi bir kayıt güncellenmeden önce
•
postUpdate – Herhangi bir kayıt güncellendikten sonra
35. Doctrine'de Ön Tanımlı Event'ler
•
postLoad – Veri tabanından kayıtlar çekildikten sonra
•
loadClassMetadata – Entity tanımalamaları (metadata’lar)
okunduktan sonra
•
preFlush – Biriktirilen işlemler veritabanına uygulanmadan önce
•
onFlush – Biriktirilen işlemler hesaplanıp sorgu çalıştırılmaya hazır
olduğunda
•
postFlush – Biriktirilen işlemler veritabanına uygulandıktan sonra
•
onClear – Veritabanına uygulanmak üzere biriktirilen işlemler
temizlendiğinde