Database schema, veritabanının iskeleti gibidir.
Nasıl ki bir bina yapılmadan önce mimari planı çizilir, veritabanı da oluşturulmadan önce schema (şema) tasarlanır.
ŞEMA ÖRNEĞİ
Kod:
CREATE TABLE Users (
user_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100) UNIQUE
);
CREATE TABLE Books (
book_id INT PRIMARY KEY,
title VARCHAR(200),
author VARCHAR(100)
);
CREATE TABLE BorrowedBooks (
borrow_id INT PRIMARY KEY,
user_id INT,
book_id INT,
borrow_date DATE,
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (book_id) REFERENCES Books(book_id)
);
Users tablosu: Kullanıcı bilgilerini tutar.
Books tablosu: Kitap bilgilerini tutar.
BorrowedBooks tablosu: Hangi kullanıcının hangi kitabı ne zaman ödünç aldığını tutar.
PRIMARY KEY: Her satırı benzersiz yapar.
FOREIGN KEY: Tablolar arasında bağlantı kurar.
UNIQUE: Aynı değerin tekrar etmesini engeller.
VARCHAR: Yazı türü veri (örneğin isim, e-posta).
DATE: Tarih türü veri.
ŞEMA TÜRLERİ
Books tablosu: Kitap bilgilerini tutar.
BorrowedBooks tablosu: Hangi kullanıcının hangi kitabı ne zaman ödünç aldığını tutar.
PRIMARY KEY: Her satırı benzersiz yapar.
FOREIGN KEY: Tablolar arasında bağlantı kurar.
UNIQUE: Aynı değerin tekrar etmesini engeller.
VARCHAR: Yazı türü veri (örneğin isim, e-posta).
DATE: Tarih türü veri.
ŞEMA TÜRLERİ
Mantıksal şema,veritabanının kavramsal yapısını gösterir.
Yani tabloların,sütunların,ilişkilerin ve anahtarların nasıl tanımlandığını mantıksal düzeyde anlatır.
Bu aşamada veri tipi,ilişki ve kısıtlama (constraint) bilgisi vardır ama fiziksel depolama detayları yoktur.
Yani tabloların,sütunların,ilişkilerin ve anahtarların nasıl tanımlandığını mantıksal düzeyde anlatır.
Bu aşamada veri tipi,ilişki ve kısıtlama (constraint) bilgisi vardır ama fiziksel depolama detayları yoktur.
Fiziksel şema,verilerin disk üzerinde nasıl depolandığını ve performansın nasıl optimize edildiğini gösterir.
Bu düzeyde dosya yapısı, index’ler,partitioning,storage engine (örneğin InnoDB) gibi detaylar yer alır.
Bu düzeyde dosya yapısı, index’ler,partitioning,storage engine (örneğin InnoDB) gibi detaylar yer alır.
Kod:
CREATE TABLE Users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
INDEX (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE Books (
book_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
author VARCHAR(100),
INDEX (author)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE BorrowedBooks (
borrow_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
book_id INT,
borrow_date DATE,
FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
FOREIGN KEY (book_id) REFERENCES Books(book_id) ON DELETE CASCADE,
INDEX (user_id),
INDEX (book_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ENGINE=InnoDB → Veritabanı depolama motorunu belirtir.
INDEX (email), INDEX (author) → Sorguların hızını artırır.
ON DELETE CASCADE → Kullanıcı silinirse,ona bağlı ödünç kayıtları da silinir.
CHARSET=utf8mb4 → Unicode karakter desteği sağlar (örneğin Türkçe karakterler).
INDEX (email), INDEX (author) → Sorguların hızını artırır.
ON DELETE CASCADE → Kullanıcı silinirse,ona bağlı ödünç kayıtları da silinir.
CHARSET=utf8mb4 → Unicode karakter desteği sağlar (örneğin Türkçe karakterler).



