VERİTABANI ORGANİZASYONU
 Veri nedir?
Veri(data) ilişkide olduğumuz(ilgimiz olan) dünyanın
durumlarıdır. O gün mağazaya kaç kişi geldiği , dışarıda
havanın sıcaklığı , boyunuzun uzunluğu , göz renginiz veya
son okuduğunuz kitabın sayfa sayısı birer veridir.
Veri kavramını dünyanın betimlemesi olarak düşünebiliriz.
Duyu organlarımız ile verileri algılar ve beynimizle işleriz.
 Bilgi nedir?
Bilgi (knowledge) verilerin işlenmesiyle elde edilir.
Örnek:
“Bugün dışarıda hava sıcaklığı 25 C dir.”
İnsanlar bilgiyi oluşturabilmek için uzunca bir süre
verilerden yararlanırlar. Verilerin anlamlı ve kullanılabilir
olmaları için tanımlı bir çerçeve içine alınmaları ve
işlenmeleri gerekir.
 Veritabanı nedir?
Birbiri ile ilişkili verilerin belirli bir düzen içerisinde bir araya
getirildiği ve depolandığı yapılara veritabanı(database)
diyoruz.
1
 Veritabanı Yönetim Sistemi(VTYS)
Database Management System(DBMS)
Veritanı oluşturmak , verileri saklamak ve verileri işlemek
üzere geliştirilmiş bilgisayar yazılımlarına VTYS denir.
VTYS’lerden önce veriler klasik dosyalarda saklanıyordu.
VTYS’lerin üstünlükleri:
- Veri tekrarının önlenmesi.
- Verilerin tutarlı olmasını sağlamak
- Aynı aydaki erişimlerde tutarsızlıkların ortaya çıkmasını
önlemek.
- Verilerin güvenliğini sağlamak.
Örnek VTYS yazılımları:
MS-Access , MS-SQL Server , My-Sql , PostgreSQL ,
Oracle , IBM – DB2 , IBM-Informix , Paradox
İlişkisel Veritabanı Nedir?
Günümüz veritabanı sistemleri ilişkisel modeli kullanır.
İlişkisel Model -> Releational Model
Bu modelin prensibi böl-parçala-yönet tir.
Bu modelde veriler birden çok tabloda saklanır. Bu tablolar
ortak alanlar vasıtasıyla ilişkilendirilir.
İlişki Türleri
a) Bire-Bir İlişki ( 1 - 1 )
b) Bire-Çok İlişki ( 1 – oo )
c) Çoka – Çok İlişki ( oo – oo )
2
Bire – Bir İlişki:
Bir tablodaki bir kayda karşılık diğer tabloda bir kayıt varsa bu
tablolar arasında bire-bir ilişki söz konusudur.
(*) Bire-Çok İlişki:
Bir tablodaki bir kayda karşılık diğer tabloda çok sayıda kayıt
varsa bu tablolar arasında bire-çok ilişki söz konusudur.
(*) Çoka-Çok İlişki:
Bir tablodaki çok sayıda kayda karşılık diğer tabloda çok sayıda
kayıt varsa bu tablolar arasında çoka-çok ilişki söz konusudur.
Kısıtlamalar(Constraints)
a) Anahtar Kısıtlamaları
- Birincil Anahtar (Primary Key) kısıtlaması
- Yabancı Anahtar (Foreign Key) kısıtlaması
b) Veri Kısıtlamaları
- Not Null kısıtlaması
- Default kısıtlaması
- Unique kısıtlaması
- Check kısıtlaması
3
Veritabanı Tasarım Adımları
1) Nesneler Tanımlanır: Nesne, çeşitli özellikleri bulunan bir
varlıktır. Herhangi bir proje de öncelikle nesneler
tanımlanır.
Ör) Birkaç örnek proje için nesneleri verecek olursak,
Kütüphane sistemi: Kitap, üyeler, türler, ödünç hareketleri
E-ticaret sistemi: Ürünler, müşteriler, siparişler, teslimat,
fatura bilgileri, üreticiler, tedarikçiler, dağıtıcılar...
Futbol Ligi: Takımlar, sahalar, oyuncular, fikstür, hakemler,
antrenörler
Okul Sistemi: Öğrenciler, öğretmenler, dersler, derslikler
Sözlük: kelimeler, anlamlar, diller
2) Her nesne için bir tablo oluşturulur: Her nesne için bir
tablo oluşturulur ve her bir tabloya içereceği veriyi en iyi
anlatan bir isim verilir.
3) Her bir tablo için bir anahtar alan seçilir: Veri
tabanındaki herhangi bir veriye erişilmeden önce tabloya
erişilir. Tabloda yer alacak her bir kaydı bir diğerinden
ayırabilecek bir sütuna ihtiyaç duyulur.
4) Nesnelerin gerekli her bir özelliği için tabloya bir sütun
eklenir : Tablolara sırasıyla adını veren nesnelerin her bir
özelliği için bir alan (sütun) eklenir.
4
5) Tekrarlayan nesne özellikleri için ek tablolar oluşturulur :
Veri tekrarı olacaksa bir yerlerde hata yapılıyor demektir.
Bu durumda eldeki tablonun en az bir tabloya daha
ayrılması gerekiyor demektir . (Normalizasyon kurallarının
devreye girdiği aşamadır)
6) Anahtar alana bağlı olmayan alanlar belirlenir: Bazen,
anahtar alan ile aynı satırda yer aldığı halde, anahtar alan
ile birebir ilişkisi olmayan bir alan yer alabilir. Bu türden
alanların elimine edilip ayrı tablolara ayrılması gerekir.
7) Tablolar arasındaki ilişkiler tanımlanır: Her biri bir
nesneye dair özellikleri barındıran tabloların tümü göz
önüne alınır ve birbirleri ile olan ilişkileri tanımlanmaya
çalışılır.
NORMALİZASYON
Amaç : Veri tekrarını ve bilgilerin kaybını önlemek
Toplam 5 tane normalizasyon kuralı vardır.
5
İlk 3 kural pratikte kolay uygulanabilir kurallardır. Diğerleri ise
daha çok kuramsal olarak kalır ve uygulanması zordur.
Normalizasyon uygulanmadan önce bütün tablolar ;
Normal Olmayan Biçim (Unnormalized Form – UNF)’ de kabul
edilir.
Kurallar uygulanıp tablolar dönüştürüldükçe;
Normal Biçime dönüşür. (Normal Form - NF)
UNF ->
1.NF ->
2.NF
->
3.NF ->
4.NF -> 5.NF
Veri Fazlalığı:
a) Mutlak Veri Fazlalığı
i) Birleşik Özellik : Birden çok verinin birleştirilerek bir
alanda bulunması.
ii) Tekrarlayan Grup: Tablolarda aynı tipteki veriyi içerecek
alanların bulunması.
iii) Çok Değerli Özellik: Aynı alanda birden fazla verinin
virgülle ayrılarak kaydedilmesi.
6
b) Gereksiz Tekrar (Veri Artıklığı):
Bazı durumlarda aynı veri çeşidi birden fazla kayıtta yer
alabilmekte ve bu da sistemin yavaşlamasına sebep
olmaktadır. Bilgilerin yinelenmesi, gereksiz alan kaplar, hata
ve tutarsızlıklara sebep olabilir.
Tablo-1:
Tablo-2:
(Veri artıklığı içeren tablo örnekleri)
7
Normalizasyon Aşamaları ( ilk 3 aşama)
1.Normalizayon
İşlemleri
2.Normalizayon
İşlemleri
3.Normalizayon
İşlemleri
Fonksiyonel Bağımlılıklar:
Fonksiyonel Bağımlık Nedir?
R bir ilişki şeması, X ve Y nitelikleri de R’nin iki alt kümesi olsun.
Eğer X nitelikler kümesinin değerleri Y nitelikler kümesinin
değerlerini belirliyorsa Y , X’e fonksiyonel bağımlı’dır denir.
R ilişkisinin Y niteliği, R’nin X niteliğine ikişkisel olarak bağımlı ve
X’in her bir değeri Y’nin bir değerine karşılık geliyorsa
fonksiyonel bağımlılıktan söz edilir.
8
a) Kısmı bağımlık: Anahtar olmayan alan, birleşik anahtarın
sadece bir kısmı ile belirlenebiliyorsa, buna kısmi
bağımlılıkdenir.
İsim alanını Müşteri_Id belirlemektedir.
b) Dolaylı bağımlılık (Geçişken Bağımlılık):
A,B,C niteliklilerini içeren 3 nitelikli bir tabloda:
A, B, ve C için
A => B ve B => C fonksiyonel bağımlılıkları
bulunmakta ise,
C dolaylı olarak A’ya bağımlıdır.
9
Normalizasyon İşlemlerini Adım-Adım Yapalım:
UNF -> 1.Normalizasyon Kuralları -> 1NF
10
1NF -> 2.Normalizayon Kuralları -> 2NF
11
12
2NF -> 3.Normalizayon Kuralları -> 3NF
13
14
Bir veritabanın baştan sonra tasarlanması:
Veri Tabanı Tasarım Adımları Uygulanır.
A) İhtiyaç Analizi Yapmalıyız.
 Veri tabanı ihtiyaç analizi yapılırken hazırlanacak olan
sistemin neye hizmet edeceği,
 Veri tabanını ne iş yapacağı ve hangi ihtiyaçları
karşılayacağına,
 Veri tabanının hangi verileri depolayacağı,
 Veri tabanını oluşturan tabloların neler olacağı ve ne tür
verileri saklayacağı v.b. gibi sorulara cevap vermek
gerekmektedir.
Tüm bunları kağıt üzerinde tasarladıktan sonra fiziksel tasarıma
geçmek çalışmanızın daha sistemli yürümesi açısından
avantajınıza olacaktır.
B) Tasarım Adımları
1.Nesneler Tanımlanır (Örneğimiz Kütüphane Sistemi olsun)
kitaplar , üyeler , türler , ödünç hareketleri , yazarlar vd.
15
2.Her nesne için tablo oluşturulur
3.Her bir tablo için anahtar alan seçin
4.Nesnelerin gerekli her bir özelliği için tabloya bir sütun
ekleyin. (Alanları belirleyin)
Ör)
Tablo:kitap ( kitapId (PK) , kitapAdi , ISBNNo , sayfaSayisi , tur ,
ozet , yayinEvi , yazar , yil)
Bu şekilde bu tablolar önceden oluşturulmalı…
Normalizason ile ilgili işlemler
5.Tekrarlayan nesne özellikleri için ek tablolar oluşturun
6.Anahtar Alana Bağlı Olmayan Alanları Belirleyin
7.Tablolar arasındaki ilişkileri tanımlayın.
16
En son aşamada veritabanı şematik olarak ifade edilmelidir.
Not: Bu şema temsilidir.
17
MySQL Veritabanı Yönetim Sistemi
MySQL, altı milyondan fazla sistemde yüklü bulunan çoklu iş
parçacıklı (multi-threaded), çok kullanıcılı (multi-user), hızlı ve
sağlam (robust) bir veritabanı yönetim sistemidir.
UNIX, OS/2 ve Windows platformları için ücretsiz dağıtılmakla
birlikte ticari lisans kullanmak isteyenler için de ücretli bir lisans
seçeneği de mevcuttur. Linux altında daha hızlı bir performans
sergilemektedir.
Geliştiricileri, 500'den fazlası 7 milyon kayıt içeren 10.000
tablodan oluşan kendi veritabanlarını (100 gigabyte civarında
veri) MySQL'de tuttuklarını söylüyorlar.
Web sunucularında en çok kullanılan veritabanıdır, asp, php gibi
birçok web programlama dili ile kullanılabilir.
MySQL, tuttuğu tablolarla çok kullanıcılı sistemlerde söz konusu
olan erişim hakları sorununu başarılı bir şekilde çözmektedir.
MySQL'in 4.0 sürümü ile birlikte "transaction" desteği, 4.1
sürümüyle birlikte de alt sorgu desteği eklenmiştir.
Ayrıca "veri tutarlılığını (referential integrity)" sağlama işinin
programcıya bırakılması tercih edilmiştir, ancak bu bir dezavantaj
olarak görülmeyebilir. Çünkü pek çok veritabanı programcısı
VTYS'lerdeki veri tutarlılığının esnek olmayan, zorlayıcı bir özellik
olduğunu düşünmektedir.
MySQL aşağıdaki veritabanı nesnelerini desteklemekte olup bu
nesnelerin bazıları 5.1 sürümü ile gelmiştir:





Tables (Tablo)
Views (Görüntü) (Görüntüleme)
Procedures (Prosedür/Yordam)
Triggers
Cursors
18
Tarihçe




1994 MySQL'in geliştirilmesine başlandı.
23 Mayıs 1995 İlk MySQL sürümü yayınlandı.
2001 yılında MySQL 3.23 yayınlandı.
2004 MySQL 4.1 beta sürümü, ve gerçek sürümü Ekim 2004
yılında yayınlandı. (R-trees and B-trees, subqueries,
prepared statements)
 2008: MySQL 5.1 sürümü yayınlandı. (event scheduler,
partitioning, plugin API, row-based replication, server log
tables)
 2008 Ocak: Sun Microsystems, bir milyar dolara MySQL'i
satın aldı.
 2009 Nisan: Oracle, Sun Microsystems'i satın aldı. Oracle,
MySQL'i geliştirmeye devam edeceğini duyurdu.
MySQL Nasıl Yönetilir
MySQL’i yönetmek için farklı yazılımlar vardır.
a) Desktop üzerinden
- Database Master , Navicat , MySQL Front , SQL yoq
b) Web üzerinden
- phpMyAdmin
phpMyAdmin ile MySQL’i Yönetmek
http://localhost/phpmyadmin
19
SQL – Structured Query Language
(Yapısal Sorgulama Dili)
 Veritabanı Yönetim Sistemleri için evrensel bir veri sorgulama
dilidir.
 Neler yapılabilir?
- Veritabanı , tablolar ve diğer nesneler oluşturulabilir.
- Veri sorgulama işlemleri : Veri çekme
- Diğer veri işlemleri : Veri ekleme , veri silme , veri güncelleme
- Yapısal işlemler: Tabloların yapılarını değiştirme
SQL dili kendi arasında:
1. DML (Data Manupulation Language) : Veri İşleme Dili.
SELECT , UPDATE , DELETE , INSERT
2. DDL (Data Definition Language) : Veri tanımlama dili.
CREATE , DROP , ALTER
3. DCL (Data Control Language) : Veri kontrol dili.
GRANT , DENY , REVOKE , IF , FOR
CREATE Komutu:
Bu komut ile veritabanın kendisi dahil bir çok nesne oluşturabilir.
Database Oluşturmak:
CREATE Database dbname;
Database Silmek:
DROP Database dbname;
20
Tablo Oluşturmak:
CREATE TABLE table_name
(
……………
);
Tablo oluşturma işlemi yapılmadan önce mutlaka veri tabanı
seçilmelidir (USE komutuyla).
USE DATABASE dbname;
Format:
Create Table <tablo adı>
( alan_adı veri_türü [Default ifade] [alan_kısıtlaması],
……
……
[ tablo kısıtlaması]
);
MySQL’de üç temel veri tipi vardır. Bunlar; sayısal (numeric), tarih
ve saat (date and time) ve karakter katarıdır (string). Bu
kategorilerin her birinin içinde de pek çok tip bulunur.
21
Her bir tipin hafızada çeşitli depolama boyutları vardır. Veri türleri
ve özellikleri aşağıdaki tabloda görülmektedir.
22
Örnek: Mezun olan öğrenciler için mezun bilgilerinin tutulacağı bir
tablo oluşturalım.
Bu tablo için aşağıdaki alan adları bulunacaktır. Tablo adını kayit
olarak kabul edelim.
Alan adı - açıklama
adi : Öğrenci Adı
soyadi : Öğrenci Soyadı
ogrno : Öğrenci Numarası
SQL Kodu
CREATE TABLE kayit
( ad varchar(15) not null,
soyad varchar(15) not null,
ogrno smallint(5) unsigned,
constraint ogrno_pk primary key (ogrno)
);
Örnek: Bir alışveriş sitesinde müşteri bilgilerini tutacak bir tablo
için aşağıdaki alanlar bulunacaktır. Tablo adı musteri olsun.
Alan adı - açıklama
Musteri_id : Müşteri numarası
adsoyad : Müşteri adı ve soyadı
adres : Müşteri adresi
sehir : Şehir
tlfon : Telefon
SQL Kodu
CREATE TABLE musteri
(musteri_id int unsigned not null auto_increment primary key,
adsoyad varchar(50) not null,
adres varchar(100) not null,
23
sehir varchar(15) not null,
tlfon varchar(11) not null
);
Örnek: Bir satış sitesine konulacak ürünlerin tutulacağı urun adlı
tabloyu aşağıdaki gibi oluşturalım.
Alan adı - Açıklama
Urun_kodu : Satılacak ürün kodu
Urun_markasi : Satılacak ürünün markası
Urun_turu : Satılacak ürün türü
Urun_fiyati : Satılacak ürünün fiyatı
SQL Kodu
CREATE TABLE urun
( urun_kodu integer(5) zerofill not null,
urun_markasi varchar(20) not null default ‘BELİRSİZ’,
urun_turu varchar(20) not null default ‘BELİRSİZ’,
urun_fiyati bigint(10) unsigned,
constraint urun_kodu_pk primary key (urun_kodu),
);
Tabloları Silmek (DROP TABLE Komutu):
Bazen bir tablonun tamamından kurtulmak isteyebilirsiniz. Bunu
DROP TABLE ifadesiyle yapabilirsiniz. Genel kullanımı
aşağıdaki gibidir:
DROP TABLE tablo_adi
Örnek: musteri tablosunu silmek için aşağıdaki ifade kullanılır.
DROP TABLE musteri;
24
Bu sorgu, tablodaki tüm satırları ve tablonun kendisini sileceğinden kullanırken dikkatli olunmalıdır.
Görünümler (VIEW)
Bir ya da daha fazla tablonun mantıksal alt kümelerini oluşturmak
için görünümlerden yararlanılır.
Görünümler, bir tabloya dayalı mantıksal bir tablo olarak değerlendirilir. Görünüm, tablolar gibi veriyi fiziksel olarak saklamaz.
Görünümler, saklanmış (depolanmış) SELECT deyimi olarak
değerlendirilir.
Bir SELECT deyiminin defalarca kullanılması söz konusu ise, onu
bir görünüm biçiminde tanımlayarak, bu görünümün çalıştırılması
mümkündür.
Görünümler aşağıda sıralanan nedenlerle tercih edilir:
• Görünümler, veri tabanına erişimi sınırlayan olanaklardır
çünkü görünüm, tabloların sadece seçilen bir kısmını
görüntüleyebilir.
• Karmaşık sorguların kolayca yapılmasını sağlar.
• Aynı veriyi kullanan çok sayıda görünüm
tanımlanabilmektedir.
Bir görünümün yaratılabilmesi için CREATE VIEW deyimi
kullanılır. Bu deyimin kullanımı aşağıda gösterildiği gibidir:
CREATE VIEW görünüm
AS altsorgu;
Bir görünümün yaratılması esnasında kullanılacak alt sorgu içinde
ORDER BY sözcüğü yer alamaz.
Var olan bir görünümü yok etmek amacıyla DROP VIEW deyimi
kullanılır. Bu deyimin kullanımı aşağıda gösterildiği gibidir:
25
DROP VIEW görünüm;
Var olan herhangi bir görünümün güncelleştirilmesi amacıyla,
CREATE OR REPLACE VIEW deyimi kullanılır. Bu deyimin
kullanımı aşağıda gösterildiği gibidir:
CREATE OR RELACE VIEW görünüm [(görünüm sütunları)]
AS altsorgu;
Örnek: Görünüm oluşturma:
Öğrencilerin danışmanlarının kimler olduğunu döndürecek bir sorguya ihtiyacımız var. Bu sorguya sık sık ihtiyaç duyacağımızı varsayarak SELECT deyimini bir görünüme dönüştürmek istiyoruz.
CREATE VIEW ogda AS
SELECT OGR.adsoyad AS Öğrenci, DAN.kimlik AS Danışman
FROM ogrenciler OGR, danismanlar DAN
WHERE OGR.sinif = DAN.sinif;
Örnek: Görünümü güncelleştirme:
Yarattığımız “ogda” sorgusu içerisinde bir güncelleştirmeye
ihtiyacımız var. Sorgu sonrası dönen listenin öğrencinin adına
göre alfabetik sıralanmasını istiyoruz.
CREATE OR REPLACE VIEW ogda AS
SELECT OGR.adsoyad AS Öğrenci, DAN.kimlik AS Danışman
FROM ogrenciler OGR, danismanlar DAN
WHERE OGR.sinif = DAN.sinif
ORDER BY OGR.adsoyad
Örnek: Görünümü kaldırma:
“ogda” isimli görümünü veritabanımızda daha fazla kullanmak
istemiyoruz.
DROP VIEW ogda;
26
Index Yapıları (Create Index)
Bir index, veri tabanı ortamında tablo gibi bir nesnedir ve ilişkili
olarak kullanıldığı tablonun indexleme alanı (priamry key) olarak
kullanılan kolondaki verilere göre sıralanmış biçimde işleme
sokulmasını sağlar. Bir tablo indexlenmiş ise bu tablo içinde
gerçekleştirilecek bir arama ya da koşullu listeleme işlemi çok
daha hızlı biçimde gerçekleştirilebilecektir.
CREATE INDEX belirtilen bir tablo üzerinden bir indeks oluşturur.
İndekslerin birincil kullanım amacı, veri tabanı başarımını
artırmaktır (ancak, uygunsuz kullanımı başarının düşmesiyle
sonuçlanır).
İndeks için anahtar alanları sütun isimleri olarak ya da parantez
içinde yazılmış ifadeler olarak belirtilir. İndeksleme yöntemi, çok
sütunlu indeksleri destekliyorsa çok sayıda alan belirtilebilir. Bir
indeks alanı, tablonun satırındaki bir veya daha fazla sütun
değerinden hesaplanan bir ifade olabilir. Bu özellik, bazı temel
veri dönüşümlerini temel alan veriye daha hızlı erişim sağlamak
için kullanılabilir.
Auto_increment, tam sayı sütunlarında kullanabileceğiniz özel bir
MySQL özelliğidir. Tabloya satırlar eklerken ilgili alanı boş
bıraktığımızda MySQL otomatik olarak benzersiz bir tanımlayıcı
değer oluşturacaktır. Bu değer, sütundaki mevcut maksimum
değerlerin bir fazla olacaktır. Her tabloda yalnızca bir tane
bulunabilir. Auto_increment içeren sütunlar indexlenmelidir.
Bir sütun adının ardından gelen primary key, bu sütunun tablo için
birincil anahtar olduğunu belirtir. Bu sütuna yapılan girişlerin
benzersiz olması gerekir (T.C. kimlik Nu., okuldaki öğrenci Nu.
gibi). MySQL bu sütunu otomatik olarak indexler.
Bir sütun adının ardından birincil anahtar (primary key) belirleme
işlemi sadece tek sütunluk birincil anahtarlar için yapılabilir.
Birincil anahtarların belirtilmesi, bu sütunlarda indexlerin
27
oluşturulmasını sağlar. Birincil anahtarlar ya da indexler olmadan
da tablo oluşturmak mümkündür.
Yeni başayan MySQL kullanıcılarının karşılaştıkları sorunlardan
biri çok hızlı olduğunu duymuş oldukları bu veri tabanından yeterli
performans elde edememektir. Bu performans sorunuyla karşılaşmalarının nedeni, veri tabanlarında hiçbir index oluşturmamış
olmalarıdır.
MySQL tarafından otomatik olarak oluşturulan indexler başlangıç
için işimizi görecektir. Eğer anahtar olmayan bir sütunda çok fazla
sorgu çalıştırdığınızı fark ederseniz performansı artırmak için bu
sütuna bir index eklemek isteyebilirsiniz.
Bunu CREATE INDEX ifadesini kullanarak yapabilirsiniz. Bu
ifadenin genel formu aşağıdadır.
Format:
CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yöntem ]
( { sütun | ( ifade ) } [ işleç_sınıfı ] [, ...] )
[ TABLESPACE tablo_alanı ]
[ WHERE dayanak ]
Parametreler:
UNIQUE : İndeks oluşturulurken ve her veri eklenişinde tabloda
birbirinin aynı değerler bulunmaması için sistemin sınama
yapmasını sağlar. Girdilerin yinelenmesine sebep olacak
bir veri girme veya güncelleme işleminin yapılmaya çalışılması bir
hata üretecektir.
isim : Oluşturulacak indeksin ismi (Burada şema nitelemeli isimler
kullanılamaz. İndeks daima tabloyu içeren şemada oluşturulur.)
tablo : İndekslenecek tablonun ismi (Şema nitelemeli olabilir.)
Yöntem : İndeks için kullanılacak yöntemin ismi. Değer olarak,
btree, hash, rtree ve gist verilebilir. btree öntanımlı yöntemdir.
28
sütun : Tablo sütunun ismidir.
İfade : Tablonun bir ya da daha fazla sütünu ile ilintili bir ifade.
İfade, yukarıdaki söz diziminde gösterildiği gibi parantez içinde
yazılmalıdır. Ancak, ifade bir işlev çağrısı biçimindeyse parantez
içine alınmayabilir.
işleç_sınıfı: Bir işleç sınıfının ismidir. Ayrıntılar için aşağıya
bakınız.
tablo_alanı: İndeksin oluşturulacağı tablo alandır. Belirtilmezse
default_tablespace yapılandırma değişkeninin değeri, bu
değişkene bir değer atanmamışsa veri tabanının öntanımlı tablo
alanı kullanılır.
dayanak : Bir kısmi indeks için kısıt ifadesi
Örnekler:
films tablosunun title sütunu üzerinde bir B-tree indeksi
oluşturmak için:
CREATE UNIQUE INDEX title_idx ON films (title);
films tablosunun code sütunu üzerinde bir indeks oluşturup bu
indeksin indexspace tablo alanında kalması için:
CREATE INDEX code_idx ON films(code) TABLESPACE
indexspace;
CREATE INDEX namex ON "Depo.Dbf" (malz_adi)
İşletmede çalışan personeli brüt maaşlarına göre azalan sırada
(yüksek maaştan düşük maaşa doğru) listelemek istenirse brüt
alanına göre aşağıdaki gibi index oluşturmak gerekir:
CREATE INDEX per_maas ON personel (brut DESC);
29
Bir okuldaki öğrencileri öncelikle adlarına göre, aynı adda olanları
soyadlarına göre, hem adı hem soyadı aynı olanların ortalamalarına göre sırlanmış olarak listelenmesi istenirse aşağıdaki
komutlar kullanılmalıdır:
CREATE INDEX ogr_ad_soyad_ort ON ogrenci (ad,soyad,ort);
Mevcut Index’in Silinmesi (Index Drop)
Bir tablo üzerinde tanımlanmış herhangi bir index, o tablonun veri
tabanından silinmesi ile otomatik olarak silinecektir. Tablo
silinmeksizin o tablo üzerinde oluşturulan indeks içinse:
DROP INDEX
komutu kullanılır.
Örnek: Böylece ogrenci tablosu üzerinde oluşturulmuş
ogr_ad_soyad_ort adlı indeks, öğrenci tablosu veri tabanında
kaldığı hâlde silinecektir.
INDEX DROP ogr_ad_soyad_ort;
30
MySQL için Kullanıcı Oluşturma ve Doğru Yetkilendirme
MySQL için aceleyle yapacağınız “kullanıcı oluşturma ve yetkilendirme” işlemleri başınıza bela olabilir.
Eğer sunucu üzerindeki MySQL servisinin kontrolü sizdeyse
(klasik bir hosting kullanıyorsanız sizde değildir) yetkilendirmeleri
doğru şekilde yapmakta fayda vardır.
MySQL’de Yeni Kullanıcı Oluşturma
CREATE USER 'ismet';
Yukarıdaki gibi şifre belirtmeden bir kullanıcı oluşturursanız,
herhangi biri ‘ismet’ kullanıcısı üzerinden şifre belirtmeksizin
MySQL’e erişebilir durumda olacaktır.
Bu kullanıcıya henüz herhangi bir veri tabanı üzerinde yetki
verilmedi. Dolayısıyla MySQL’e bağlanmış olsa bile veri tabanları
üzerinde işlem yapamayacaktır. Bu kullanıcıya şifre vermeyi
unuttuktan sonra, bir veri tabanı üzerinde yetki verirseniz sonuçlar
kötü olabilir.
MySQL’de oluşturacağınız kullanıcılar için host parametresi de
verebilirsiniz. Bu ayar “kullanıcı nereden (hosttan) bağlanabilir”
sorusunun cevabıdır.



Localhost: Sadece MySQL’in bulunduğu makineden erişilir.
%: Sadece dışarıdan erişilir.
IP: Sadece sizin belirlediğiniz IP’lerden erişilir.
Örnek: Sadece MySQL’in bulunduğu makineden MySQL’e giriş
yapabilen bir kullanıcı oluşturalım:
CREATE USER 'ismetaktar'@'localhost' IDENTIFIED BY
'powerful_password';
31
Kullanıcıyı yukarıdaki gibi oluşturursanız Navicat, Workbench gibi
programlar kullanarak MySQL’e dışardan erişemezsiniz. Sadece
o makineden MySQL’e erişebilirsiniz.
Örnek: Sadece dışarıdan MySQL’e erişebilen bir kullanıcı
oluşturalım:
CREATE USER 'ismetaktar'@'%' IDENTIFIED BY
'another_password';
Gördüğünüz üzere, kullanıcı adları aynı olan şifreleri farklı
olan 2 farklı kullanıcı oluşturduk. Birisi “powerful_password”
şifresi ile sadece içeriden, diğeri ise “another_password” şifresi ile
sadece dışarıdan erişebilir durumdadır.
MySQL’de Kullanıcıları Listeleme
Oluşturduğunuz kullanıcıları şu sorgu ile görüntüleyebilirsiniz:
SELECT host, user FROM mysql.user;
MySQL’de Kullanıcı Silme
Oluşturduğunuz kullanıcıları silmek için 2 farklı yol
kullanabilirsiniz:
DROP USER ismetaktar;
Kullanıcıyı drop ederseniz sadece % ile oluşturulan kullanıcıyı
silmiş olursunuz. Aşağıdaki gibi bir kullanım daha sağlıklı
olacaktır.
DROP USER 'ismetaktar'@'localhost';
DROP USER 'ismetaktar'@'%';
DROP yerine DELETE’de kullanabilirsiniz. Lakin bu tavsiye edilen
bir yol değil. Zaten bir kullanıcıyı DELETE edip tekrar aynı isimle
yaratmaya çalıştığınızda hata oluşuyor.
32
DELETE FROM mysql.user WHERE user = 'ismetaktar'
-- veya
DELETE FROM mysql.user WHERE user = 'ismetaktar'
AND host = 'localhost';
DELETE FROM mysql.user WHERE user = 'ismetaktar'
AND host='%';
MySQL’de Kullanıcı Yetkilendirme
Kullanıcı oluşturduktan sonra, hangi kullanıcınının hangi veri
tabanı ve tablolar üzerinde hangi yetkilere sahip olacaklarını
belirlememiz gerekiyor.
Kullanıcı oluştururken yaptığımız gibi yine hosta göre
yetkilendirme yapabiliyoruz.
GRANT ALL PRIVILEGES ON ismetaktarDB.* TO
'ismetaktar'@'localhost';
Yukarıdaki syntax ile “ismetaktar” kullanıcısı “local makineden
bağlanarak”, “ismetaktarDB” veri tabanının tüm tablolarında
(ismetaktarDB.* ile ifade ediliyor) tüm işlemleri yapabilir.
GRANT SELECT, INSERT, UPDATE, DELETE ON
ismetaktarDB.users TO 'ismetaktar'@'%';
Bu syntax ile “korsan” kullanıcısı “dışarıdaki bir makineden
bağlanarak”, “ismetaktarDB” veri tabanının tüm users tablosunda
(ismetaktarDB.users) sadece “SELECT, INSERT, UPDATE,
DELETE” işlemlerini yapabilir.
Yetkilendirme işlemlerini yaparken kullanıcının şifresi yoksa
aşağıdaki gibi şifre de oluşturabilirsiniz.
GRANT ALL PRIVILEGES ON ismetaktarDB.* TO
'ismetaktar'@'localhost' IDENTIFIED BY 'password';
33
Ayrıca, bir kullanıcıya atanmış tüm yetkileri görüntülemek için
aşağıdaki syntaxı kullanabilirsiniz.
SHOW GRANTS FOR 'ismetaktar'@'localhost';
SHOW GRANTS FOR 'ismetaktar'@'%';
Kullanıcı Oluşturma ve Yetkilendirme Sonuç – Özet
MySQL’de yeni bir kullanıcı oluştururken veya yetkilendirirken
şifresini belirlemeyi unutmayınız. Hostlara göre farklı şifreler
veriniz. Hostlara göre farklı yetkiler belirleyiniz. Bu ufak bir
detay olarak görünür fakat veri tabanına erişmek isteyen kötü
niyetli insanları caydırabilir.
Son olarak, en hızlı şekilde bir kullanıcı oluşturmak ve düzgün
bir şekilde yetkilendirmek için aşağıdaki syntax işinize
yarayabilir.
CREATE USER 'ismetaktar'@'%' ;
GRANT ALL PRIVILEGES ON ismetaktarDB.* TO
'ismetaktar'@'%' IDENTIFIED BY 'password';
34
Download

veritabani_organizasyonu_ders_notu