SEN2104 · 1. hafta · Introduction to Database Management Systems

Veritabanı yönetim sistemlerine giriş

Dosya sistemi yerine neden DBMS kullanılır, şema ile örnek farkı, üç seviyeli mimari, veri bağımsızlığı, DDL/DML ve transaction fikri. Dönem boyunca kullanacağımız üniversite veritabanı da burada tanıtılıyor.

databaseDBMSfile-processing systemdata redundancydata modelschemainstancethree-schema architecturephysical data independencelogical data independenceDDLDMLtransactionACIDdatabase administrator (DBA)

Veritabanı dersi, dönemin geri kalanının dilini burada öğrendiğin bir giriş haftasıyla başlar. Sınavda bu hafta genelde tanım, sınıflandırma ve “hangisi?” sorularıyla çıkar: şema mı örnek mi, fiziksel mi mantıksal bağımsızlık mı, DDL mi DML mi, ACID’in hangi harfi. Kısa ama puan kaçırması kolay sorular. Aklında tutman gereken beş şey:

  1. DBMS = veri + o veriye erişen programlar topluluğu. Amaç veriyi hem kolay hem güvenli tutmak.
  2. Şema (schema) tasarımdır, örnek (instance) o anki veridir. Şema nadiren, örnek sürekli değişir.
  3. Üç seviye: dış (external), mantıksal (logical), fiziksel (physical). Aradaki bağımsızlık iki türlüdür.
  4. DDL yapıyı, DML veriyi değiştirir.
  5. Transaction ya tamamen olur ya hiç olmaz. ACID bunu dört özellikle anlatır.

Dönem boyunca kullanacağımız veritabanı

Bütün haftalarda aynı küçük üniversite veritabanını kullanacağız. Böylece ER diyagramı, ilişkisel cebir, SQL ve normalizasyon aynı tablolar üzerinde konuşulacak ve her sorgunun sonucunu elle kontrol edebileceksin. Altı tablo var:

  • department(dept_name, building, budget)
  • instructor(inst_id, name, dept_name, salary)
  • student(stu_id, name, dept_name, tot_cred)
  • course(course_id, title, dept_name, credits)
  • teaches(inst_id, course_id)
  • takes(stu_id, course_id, grade)

Bu hafta sadece student tablosuna bakmamız yeterli:

stu_idnamedept_nametot_cred
S1AdaCS60
S2BoraCS30
S3CemEE45
S4DefneMATH90
S5EceCS15
S6FiratEE0
S7GizemNULL10

Gizem’in bölümü henüz belli değil, bu yüzden NULL. Bu satır SQL haftasında bize çok iş görecek.

Dosya sistemi yerine neden DBMS?

Veritabanları yaygınlaşmadan önce kurumlar veriyi işletim sisteminin dosyalarında tutardı. Her bölüm kendi dosyasını ve kendi programını yazardı. Buna dosya işleme sistemi (file-processing system) denir. Bu yaklaşımın sınavda sayılması beklenen sorunları şunlar:

SorunÜniversite örneği
Veri tekrarı ve tutarsızlık (redundancy, inconsistency)Bora’nın bölümü hem kayıt ofisinin hem bölümün dosyasında var. Biri EE’ye güncellenir, diğeri CS kalır.
Veriye erişim zorluğu“Kredisi 40’tan fazla öğrenciler” diye yeni bir soru gelince yeni program yazmak gerekir.
Veri izolasyonu (data isolation)Veri farklı formatta, farklı dosyalara dağılmış. Birleştirmek zor.
Bütünlük sorunları (integrity problems)“Ders kredisi 1 ile 6 arası olmalı” kuralı her programın içine gömülü. Yeni kural eklemek tüm programları değiştirmek demek.
Atomiklik sorunu (atomicity)Para transferinin yarısında elektrik kesilirse bir hesaptan para çıkar, diğerine girmez.
Eşzamanlı erişim anomalileri (concurrent-access anomalies)İki kişi aynı anda son kontenjanı alırsa ikisi de kayıt olur.
Güvenlik (security)Muhasebe öğrencinin notlarını görmemeli. Dosyalarda ince ayarlı yetki yok.

DBMS bu sorunların her birine merkezi bir çözüm getirir. Örneğin bütünlük kısıtları şemada bir kez yazılır ve DBMS her ekleme sırasında kontrol eder:

INSERT INTO course VALUES ('CS999', 'Test', 'CS', 9);     -- credits 1..6 olmalı
INSERT INTO student VALUES ('S9', 'Ilke', 'PHYS', 0);    -- PHYS bölümü yok
INSERT INTO student VALUES ('S1', 'Kopya', 'CS', 0);     -- S1 zaten var
CHECK constraint failed: credits BETWEEN 1 AND 6
FOREIGN KEY constraint failed
UNIQUE constraint failed: student.stu_id

Üç satırın üçü de reddedildi. Hiçbir uygulama programı bu kontrolleri yazmak zorunda kalmadı.

Veri modelleri

Veri modeli (data model), veriyi, veriler arası ilişkileri, anlamı ve kısıtları tarif etmek için kullanılan kavramlar bütünüdür. Derste karşına çıkacak olanlar:

  • İlişkisel model (relational model): Veri tablolarda (relation) tutulur. Bugün en yaygın model, dersin merkezi. 3. haftada ayrıntısı var.
  • Varlık-ilişki modeli (entity-relationship, ER): Tasarım aşamasında kullanılan, varlıklar ve aralarındaki ilişkilerle düşünen model. 2. hafta.
  • Nesne tabanlı model (object-based): Nesne yönelimli programlamadaki kalıtım, kapsülleme gibi fikirleri veriye taşır.
  • Yarı yapılandırılmış model (semi-structured): Aynı türdeki kayıtların farklı alanları olabilir. JSON ve XML bunun örneği.
  • Tarihsel olarak ağ (network) ve hiyerarşik (hierarchical) modeller de vardı, bugün nadir.

Şema ve örnek

Programlamadan bir benzetme: şema (schema) bir değişkenin tip tanımı, örnek (instance) o değişkenin o anki değeri gibidir.

  • student(stu_id, name, dept_name, tot_cred) bir şemadır. Kolonların adları, tipleri, anahtarlar, kısıtlar.
  • Yukarıdaki 7 satırlık tablo, şu anki örnektir.

Bir satır eklediğinde örnek değişir, şema aynı kalır. Doğrulamada INSERT sonrası satır sayısı 7’den 8’e çıktı, kolon sayısı 4 olarak kaldı. Şemayı değiştirmek için ALTER TABLE gibi bir DDL komutu gerekir ve bu nadir yapılan bir iştir.

TUZAK · “schema” iki anlamda kullanılır. Bazen tek bir tablonun yapısı (relation schema), bazen tüm veritabanının tasarımı (database schema) kastedilir. Sınavda bağlamdan anla. Her iki durumda da karşıtı “instance”tır.

Üç seviyeli mimari ve veri bağımsızlığı

DBMS, kullanıcıyı ayrıntılardan korumak için veriyi üç soyutlama seviyesinde tarif eder:

   external (view) seviyesi     danışman ekranı   |  muhasebe ekranı   |  ...
              |                    (her kullanıcı grubu verinin bir parçasını görür)
   logical (conceptual) seviyesi   tüm tablolar, kolonlar, ilişkiler, kısıtlar
              |
   physical (internal) seviyesi    dosyalar, bloklar, index'ler, kayıt düzeni
  • Fiziksel seviye (physical level): Veri diskte nasıl duruyor? Heap dosyası mı, sıralı dosya mı, hangi kolonda B+ ağacı var?
  • Mantıksal seviye (logical level): Hangi veri var ve aralarında ne ilişki var? student, course, takes tabloları ve kısıtları. DBA ve tasarımcı bu seviyede çalışır.
  • Dış seviye (view level): Belirli bir kullanıcının gördüğü kısım. Örneğin danışman sadece öğrencinin adını ve bölümünü görür, notları göremez.

Seviyeler arası eşlemeler (mapping) sayesinde bir seviyedeki değişiklik üsttekini bozmaz. Buna veri bağımsızlığı (data independence) denir.

TürNe değişiyor?Kim korunuyor?Örnek
Fiziksel veri bağımsızlığıfiziksel şemamantıksal şema ve uygulamalartot_cred üzerine index eklemek
Mantıksal veri bağımsızlığımantıksal şemadış şemalar (view’lar) ve uygulamalarstudent tablosunu ikiye bölüp eski adla view tanımlamak

İki örneği de gerçekten çalıştırdık. İndex eklenmeden önce SQLite sorgu planı tüm tabloyu tarıyordu, sonra index kullandı, ama sonuç satırları aynı kaldı:

SELECT name FROM student WHERE tot_cred > 40
plan önce : SCAN student
plan sonra: SEARCH student USING INDEX idx_cred (tot_cred>?)
sonuç (iki durumda da): Ada, Cem, Defne

Mantıksal bağımsızlık için student tablosu student_core ve student_credit diye ikiye bölündü, ardından ikisini birleştiren student adlı bir view tanımlandı. Eski sorgu hiç değiştirilmeden aynı sonucu verdi:

CREATE VIEW student AS
  SELECT c.stu_id, c.name, c.dept_name, k.tot_cred
  FROM student_core c JOIN student_credit k USING (stu_id);

SELECT name FROM student WHERE dept_name = 'CS';
Ada
Bora
Ece

TUZAK · hangisi daha zor? Mantıksal veri bağımsızlığını sağlamak fiziksel olana göre daha zordur. Çünkü uygulamalar doğrudan tablo ve kolon adlarına bağlıdır. Bir kolonu silersen hiçbir view onu geri getiremez.

Veritabanı dilleri: DDL ve DML

SQL tek bir dildir ama komutları iki gruba ayrılır:

GrupGöreviKomutlar
DDL (data definition language)şemayı tanımlar, değiştirirCREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, CREATE VIEW
DML (data manipulation language)veriyi sorgular, değiştirirSELECT, INSERT, UPDATE, DELETE

DDL’in çıktısı veri sözlüğüne (data dictionary) yazılır. Bu, “veri hakkında veri” (metadata) tutan özel bir tablolar topluluğudur. DBMS her sorgudan önce oraya bakar.

DML iki tarzda olabilir. Prosedürel (procedural) DML’de “veriyi nasıl bulacağını” adım adım sen söylersin. Bildirimsel (declarative) DML’de sadece “ne istediğini” söylersin, nasıl bulunacağına DBMS karar verir. SQL bildirimseldir:

SELECT stu_id, name FROM student WHERE tot_cred > 40;
S1 | Ada
S3 | Cem
S4 | Defne

Bu sorguda hangi index’in kullanılacağını, satırların hangi sırayla okunacağını yazmadık. Bunu sorgu işlemcisi (query processor) seçti. 12. ve 13. haftalar tam olarak bu seçimin nasıl yapıldığını anlatıyor.

Transaction ve ACID

Transaction (işlem), mantıksal olarak tek bir iş sayılan işlemler dizisidir. Klasik örnek para transferi: A’dan çık, B’ye ekle. İkisi birlikte olmalı. DBMS’in her transaction için verdiği dört söz:

HarfÖzellikAnlamı
AAtomicity (atomiklik)Ya tüm adımlar olur ya hiçbiri. Yarım kalan iş geri alınır.
CConsistency (tutarlılık)Tutarlı bir durumdan başlayan transaction, tutarlı bir durumda biter.
IIsolation (yalıtım)Aynı anda çalışan transaction’lar birbirinin ara hâlini görmez.
DDurability (kalıcılık)COMMIT edilen değişiklik çökmeden sonra da kalır.

Atomikliği SQLite’ta denedik. Hesaplar A = 500, B = 200 ve kısıt balance >= 0. Transaction önce B’ye 700 ekliyor, sonra A’dan 700 düşmeye çalışıyor:

BEGIN
UPDATE account SET balance = balance + 700 WHERE acc = 'B'   -- başarılı, B = 900
UPDATE account SET balance = balance - 700 WHERE acc = 'A'   -- CHECK hatası (A = -200 olurdu)
ROLLBACK
sonuç: A = 500, B = 200

İlk UPDATE başarılı olduğu hâlde ROLLBACK onu da geri aldı. Geçerli bir 300’lük transfer ise COMMIT ile tamamlandı: A = 200, B = 500 ve toplam 700 korundu.

Kullanıcılar ve DBMS’in parçaları

Bir veritabanıyla dört tür insan konuşur:

  • Naive kullanıcı: Hazır arayüzleri kullanır. Ders kayıt sayfasından ders seçen öğrenci.
  • Uygulama programcısı (application programmer): O arayüzleri yazar. SQL’i program içinden çağırır.
  • Sophisticated kullanıcı: Doğrudan sorgu yazar ya da analiz araçları kullanır. Veri analisti.
  • Veritabanı yöneticisi (DBA, database administrator): Şemayı tanımlar, fiziksel düzeni ve index’leri seçer, yetki verir, yedek alır, performansı izler.

DBMS’in içinde ise üç ana parça vardır. Depolama yöneticisi (storage manager) veriyi diske yazıp okur, tampon (buffer) yönetimini yapar. Sorgu işlemcisi (query processor) SQL’i ayrıştırır, en ucuz planı seçer ve çalıştırır. Transaction yöneticisi (transaction manager) eşzamanlılık kontrolü ve çökme sonrası kurtarma (recovery) ile ACID’i sağlar.

Sık yapılan hatalar

Yanlış düşünceDoğrusu
Şema sık değişir, örnek sabittirTersi: örnek her INSERT/UPDATE/DELETE ile değişir
DELETE bir DDL komutudurDELETE satır siler, DML’dir. Tabloyu DROP TABLE siler (DDL)
CREATE INDEX DML’dirIndex bir yapıdır, DDL’dir
Index eklemek mantıksal veri bağımsızlığıdırFiziksel seviyede değişiklik, fiziksel bağımsızlık
Mantıksal bağımsızlık daha kolaydırDaha zordur, uygulamalar tablo ve kolon adlarına bağlı
Atomiklik ile kalıcılık aynı şeyAtomiklik yarım işi geri alır, kalıcılık biten işi korur
Bütünlük kurallarını uygulama kontrol ederDBMS şemadaki kısıtlarla kendisi kontrol eder (CHECK, FK, PK)
SQL prosedüreldirSQL bildirimseldir: ne istediğini yazarsın, nasıl yapılacağını DBMS seçer

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

In a database, which one changes frequently over time: the schema or the instance?

Cevabı göster
The instance

Şema (schema) tablonun tasarımıdır: hangi kolonlar, hangi tipler, hangi kısıtlar. Nadiren değişir. Örnek (instance) ise belirli bir andaki satırların tamamıdır. Her INSERT, UPDATE, DELETE örneği değiştirir. Doğrulamada student tablosuna bir satır eklendiğinde satır sayısı 7'den 8'e çıktı, kolon sayısı 4 olarak kaldı.

Soru 2kolay

Classify each statement as DDL or DML: (1) SELECT, (2) ALTER TABLE, (3) DELETE, (4) CREATE INDEX.

Cevabı göster
DML, DDL, DML, DDL

DDL (data definition language) yapıyı tanımlar: CREATE, ALTER, DROP. Index de bir yapı olduğu için CREATE INDEX DDL'dir. DML (data manipulation language) verinin kendisiyle uğraşır: SELECT, INSERT, UPDATE, DELETE. Tuzak: DELETE satır siler, tabloyu değil. Tabloyu silen DROP TABLE DDL'dir.

Soru 3kolay

Which of the following is not a typical problem of a file-processing system?

  1. Data redundancy and inconsistency
  2. Difficulty in accessing data
  3. Concurrent-access anomalies
  4. Physical data independence
Cevabı göster
Physical data independence

İlk üçü dosya sistemlerinin klasik dertleridir: aynı bilgi birden çok dosyada (redundancy) ve bir kopyası güncellenince tutarsızlık; her yeni soru için yeni program yazma zorunluluğu; iki kullanıcının aynı anda yazmasıyla bozulan veri. Fiziksel veri bağımsızlığı ise bir problem değil, DBMS'in getirdiği bir avantajdır.

Soru 4orta

The DBA adds a B+ tree index on student(tot_cred). No application code changes, and every query returns the same rows. Which kind of data independence does this illustrate?

Cevabı göster
Physical data independence

Değişen şey verinin nasıl saklandığı ve nasıl bulunduğu, yani fiziksel (internal) seviye. Mantıksal şema aynı kaldı, uygulamalar etkilenmedi. Doğrulamada tot_cred > 40 sorgusunun planı SCAN student iken index sonrası SEARCH student USING INDEX idx_cred oldu, sonuç satırları aynı kaldı.

Soru 5orta

The student table is split into student_core(stu_id, name, dept_name) and student_credit(stu_id, tot_cred). A view named student that joins them is created, so old programs keep working. Which kind of data independence is this?

Cevabı göster
Logical data independence

Bu sefer kavramsal (logical) şema değişti: bir tablo ikiye bölündü. Dış seviyedeki programlar ise view sayesinde aynı arayüzü görüyor. Kavramsal şemadaki değişikliğin dış şemaları bozmaması mantıksal veri bağımsızlığıdır. Doğrulamada eski sorgu SELECT name FROM student WHERE dept_name = 'CS' view üzerinden yine Ada, Bora, Ece döndü.

Soru 6orta

Using the sample student table, write an SQL query that lists the names of students in the CS department, and give the result.

Cevabı göster
SELECT name FROM student WHERE dept_name = 'CS'; → Ada, Bora, Ece

WHERE satırları süzer, SELECT istenen kolonu seçer. dept_name değeri 'CS' olan satırlar S1 (Ada), S2 (Bora), S5 (Ece). S7 Gizem'in bölümü NULL olduğu için eşitlik testi onu getirmez. Sorgu SQLite'ta çalıştırıldı.

Soru 7kolay

How many rows does SELECT * FROM student WHERE tot_cred >= 30; return on the sample data?

Cevabı göster
4

tot_cred değerleri: Ada 60, Bora 30, Cem 45, Defne 90, Ece 15, Firat 0, Gizem 10. 30 ve üstü olanlar Ada, Bora, Cem, Defne. >= olduğu için Bora (tam 30) dahil. Sonuç 4 satır.

Soru 8orta

The statement INSERT INTO student VALUES ('S9', 'Ilke', 'PHYS', 0); is executed on the sample database. What happens and why?

Cevabı göster
It is rejected: foreign key violation (no PHYS department)

student.dept_name, department(dept_name) tablosuna referans veren bir yabancı anahtardır (foreign key). department tablosunda sadece CS, EE, MATH, BIO var. 'PHYS' olmadığı için DBMS satırı reddeder. Bu, bütünlük kısıtının (integrity constraint) uygulama kodu yerine DBMS tarafından korunmasına bir örnek. SQLite 'FOREIGN KEY constraint failed' hatası verdi.

Soru 9zor

Accounts: A = 500, B = 200, with constraint balance >= 0. A transaction runs B := B + 700 and then A := A - 700; the second update violates the constraint and the transaction is rolled back. What are the final balances, and which ACID property guarantees this?

Cevabı göster
A = 500, B = 200 (Atomicity)

İlk UPDATE başarılı olsa bile transaction bütün olarak tamamlanamadı. Atomiklik (atomicity) 'ya hepsi ya hiçbiri' der: ROLLBACK ilk güncellemeyi de geri alır. Bakiyeler başlangıçtaki gibi 500 ve 200 kalır. SQLite'ta BEGIN, iki UPDATE, CHECK hatası ve ROLLBACK ile birebir denendi.

Soru 10orta

A transaction commits, and one second later the server loses power. After restart, the committed changes are still there. Which ACID property is this?

Cevabı göster
Durability

Kalıcılık (durability): COMMIT edilmiş değişiklik sistem çökse bile kaybolmaz. DBMS bunu log (günlük) dosyası ve kurtarma (recovery) mekanizmasıyla sağlar. Atomiklik ile karıştırma: atomiklik yarım kalan işin geri alınması, kalıcılık tamamlanan işin korunmasıdır.

Soru 11zor

In the three-schema architecture, at which level is each described? (a) records of student are stored in a heap file with a B+ tree on stu_id; (b) an advisor's screen shows only name and dept_name of students.

Cevabı göster
(a) internal (physical) level, (b) external (view) level

(a) Dosya düzeni ve index, verinin diskte nasıl tutulduğunu anlatır: iç (physical/internal) seviye. (b) Belirli bir kullanıcı grubuna verinin bir parçasını gösteren görünüm dış (external/view) seviyedir. Arada kavramsal (logical) seviye var: tüm tablolar, kolonlar, kısıtlar.

Soru 12kolay

Which user type writes no SQL and interacts with the database only through forms such as a course registration web page?

  1. Database administrator
  2. Application programmer
  3. Sophisticated user
  4. Naive user
Cevabı göster
Naive user

Naive (son) kullanıcı hazır arayüzü kullanır: ders kayıt sayfasında düğmeye basan öğrenci gibi. Uygulama programcısı o sayfanın kodunu yazar, sophisticated kullanıcı (analist) doğrudan sorgu yazar, DBA ise şemayı, yetkileri ve fiziksel düzeni yönetir.

Doğrulama: Tüm SQL örnekleri ve cevaplar node:sqlite (SQLite 3.53) ile çalıştırıldı: verify/SEN2104/01.mjs. Kısıt ihlalleri (CHECK, FK, PK), ROLLBACK ile atomiklik, view ile mantıksal veri bağımsızlığı ve index ile değişen sorgu planı (EXPLAIN QUERY PLAN) gerçekten denendi.

Deftere not kartı

DBMS = veri + o veriye erişen programlar. Dosya sistemine göre kazançlar: redundancy/inconsistency azalır, erişim kolay, bütünlük kısıtı, atomiklik, eşzamanlı erişim, güvenlik. SCHEMA = tasarım (nadiren değişir) INSTANCE = o anki satırlar (sürekli değişir) 3 seviye: external (view) → logical (conceptual) → physical (internal) Fiziksel bağımsızlık: index/dosya düzeni değişir, logical şema ve uygulama aynı kalır Mantıksal bağımsızlık: logical şema değişir (tablo bölme), view'lar uygulamayı korur (daha zor) DDL: CREATE ALTER DROP (index de DDL) DML: SELECT INSERT UPDATE DELETE DELETE satır siler (DML), DROP tablo siler (DDL) Veri modelleri: relational, ER, object-based, semi-structured (JSON/XML) ACID: Atomicity (hepsi ya da hiç), Consistency, Isolation, Durability (commit kalıcı) Kullanıcılar: naive, application programmer, sophisticated, DBA DBMS parçaları: storage manager, query processor, transaction manager