1.3.Değişken İsimlendirme
Hazır terimlerden başlamışken, sadece veritabanına özgü olmayıp heryerde geçerli olan, değişken tanımlama kurallarına bir göz atalım; En önemlisi, değişkenlerinize az ve öz ama anlaşılır isimler verin. Boşluk ve Türkçe karakter kullanmayın...SQL’de tablo adları, alan(field) , veritabanı dosyası, indeks vb. isimler değişken isimleridir. Genel geçer değişken isimlendirme kurallarına burada da dikkat etmek, sağlıklı uygulamalar meydana getirebilmek için çok önemlidir. Bundan dolayı bu kurallara burada yer verdik. Genel kanı bu türden bir kaygının yersiz olduğu yönünde olsa da bazen oldukça kritik hatalar ortaya çıkabilmektedir.
1.Değişken isimleri, harf ile başlamak zorundadır.
2.Değişken isimleri, harf, rakamlar ve ‘_’ dan oluşmak zorundadır.
3.Değişken isimlerinde Türkçe’de ki noktalı harfler (İ,ı,Ğ,ğ,Ü,ü,Ş,ş,Ç,ç,Ö,ö,) yer alamaz.
4.Değişken isimlerinde ayrılmış kelimeler yer alamaz.(like, not,level... vs gibi.)
5.SQL büyük-küçük harf duyarlı değildir.
6.Değişken isimlerinde boşluk yer alamaz.
7.Ayrılmış kelimeler değişken adı olamazlar (select, like, not, or, delete, update ...vs)
Değişken isimlendirme notasyonları:
1.Deve Notasyonu: degiskenAdi şeklinde yazılır.
2.Alt çizgi notasyonu: degisken_adi şeklinde yazılır.
Veritabanı programlamada, büyük-küçük harf duyarlılığı olmadığından genellikle alt çizgi notasyonu kullanılır ve değişken adları küçük harf olarak verilir. Ancak bu bir kural olmayıp sadece okunurluğu artırmak için programcıların bir çoğu tarafından tercih edilen bir yoldur.
NULL mu boşluk mu...
Bir kayıt için, alanlardan biri hiç girilmediği için boş olabilir veya bilgisayardaki space tuşunun karşılığı ASCII değeri girilmiş olabilir. Space(ASCII-32 karakteri) tuşuna basılarak elde edilmiş boşluk ile daha hiçbir bilgi girilmemiş olan boşluk bilgisayar dilinde birbirinden farklıdır. Daha önce hiçbir şey girilmemiş alan için NULL terimi kullanılır.
Ama illa da ben bu kurallara uymak istemiyorum diyorsanız, mutlaka değişkenlerinizi SQL içerisinde kullanırken [değişken adı] şeklinde kullanmanız gerekir.
1.4.İlişkisel Veritabanı Yönetim Sistemleri
Bir veritabanında ilişkiden söz edebilmek için en az iki tablonun yer alması gerekir ve bu iki tablodaki verilerin bir biri ile bir şekilde ilişkilendiriliyor olması gerekir.Veritabanı Yönetim sistemlerinden günümüzde kullanımı en yaygın olanı İlişkisel Veritabanıdır. Hal böyle olunca da en yaygın veritabanı yönetim sistemleri, İlişkisel Veritabanı Yönetim Sistemleri’(RDBMS)dir. İlişkisel veritabanının en önemli yanı, tablolardan oluşmasıdır. Daha önemli yanı da bu tabloların bir biri ile ilişkilerinin olmasıdır. Böyle olmasaydı durup dururken bu VTYS’ler için ‘ilişkisel’ demezdik.
Bir veritabanında ilişkiden söz edebilmek için en az iki tablonun yer alması gerekir ve bu iki tablodaki verilerin bir biri ile bir şekilde ilişkilendiriliyor olması gerekir. Yine bir önceki örnek olaya dönecek olursak, Kitap listesi ile ödünçler listesi arasında bir ilişki vardır çünkü Kitap listemizde olmayan bir kitap bizde yoktur ve ödünç veremeyiz. Haliyle de mantık olarak bu türden bir ödünç bilgisi ödünç listemizde yer alamamalıdır.
Olaya tersten bakacak olursak, geri dönmeyen bir kitap hakkındaki detayları öğrenmek istediğimizde ödünç listesindeki kitap numarasını alırız. Daha sonra aynı numaraya karşılık gelen kitabı, Kitap tablosundaki satırı buluruz.Bu satırdaki bilgiler bize kitap hakkındaki tüm detayları verir. Kitap tablosundaki kitapNo alanı aday anahtar(indeks)’tir. Odunc tablosundaki KitapNo alanı, ‘yabancı anahtar’ (foreign key) alandır, çünkü Kitap tablosundaki bir kaydı sembolize etmektedir.
Şekil:1.6: Birinci tabloda yer alan bir kayda karşılık, ikinci tabloda bir veya daha çok kayıt yer alabilir. Ancak İkinci tablodaki bir kitap numarasına karşılık birinci tabloda sadece bir tek kayıt vardır. Bu ilişkiye bire sonsuz bir ilişki denir. Birinci tablodaki her bir tekil kaydı sembolize eden kitapNo için aday anahtar, ikinci tabloda, ödünç verilen herhangi bir kitap hakkındaki detayları görmek için 1. tabloya geçmemizi sağlayan kitapNo’na ise yabancı anahtar(foreign key) denir.
Tüm bunların ardından VTYS’leri hakkında özet olarak diyebiliriz ki;
Bir İlişkisel Veritabanı Yönetim Sistemi tablolar üstünde şu üç işlevi yerine getirmek zorundadır.
1.SEÇME: Herhangi bir tabloda(listede) yer alan tüm bilgileri gösterebilmelidir. Örneğin, Kitap tablosunun bir dökümünü verebilmelidir. Ya da kitap listesinden bazı kitapların bilgilerini getirip diğer bir kısmını getirmeyebilmelidir.
Şekil1.7:Kitaplar listesi üstünde bir seçme işlemi. Sayfa sayısı 200’den fazla olan kitapları seçiyoruz.
2.İZDÜŞÜRME: Herhangi bir tablodan sadece belli sütunların yer aldığı seçme işlevlerini yerine getirebilmelidir. Örneğin, canı isteyen bir kullanıcı Kitabın sadece adını ve kaç sayfa olduğunu seçebilmelidir.
Şekil1.9:Kitaplar listesi üstünde bir iz düşürme işlemiKitapların kitap No’nu, Adını ve sayfa sayısını alıyoruz. Diğer sütunları almıyoruz.
3. BİRLEŞTİRME: Birden fazla tabloda yer alan bilgileri, yeri geldiğinde tek bir tabloymuş gibi sunabilmelidir. Örneğin, Ödünç alınıp da geri getirilmeyen Kitapların adlarını ve kimler tarafından alındığını bir tek tabloymuş gibi gösterebilmelidir.
VTYS bu 3 temel işlevi yerine getirmelidir. Bunlardan üçünü, ikisini veya birini aynı anda yerine getirmek durumunda kalabiliriz. Örneğin, sayfa sayısı 200’den büyük kitapların sadece adını görmek istersek, hem iz düşürme hem de seçme işlemine ihtiyaç duyarız.
Veriler ve depolanma şekilleri farklı olabilir. Önemli olan, VTYS’nin SQL ile yönetilebilir olmasıdır. Böylelikle, verilerin bilgisayarda fiziksel olarak ne şekilde depolandığı, kullanıcı bilmek zorunda kalmaz. Yani, kullanıcı temel veri saklama işlem ve yöntemlerinden izole edilmiş olur. Kullanıcının verileri etkili olarak kullanması için bilmesi gereken tek şey SQL olmalıdır.
Verilerle ilgili yapılan işlemler iki ayrı grupta incelenir. Birincisi, veri tanımlama işlemleridir. Bu grupta yapılan işlemler daha çok verinin saklandığı ortama dair işlemlerdir. Doğrudan verinin kendisi ile ilgilenmek yerine, tablonun hangi alanlardan oluşacağı, hangi alana hangi aralıkta veri girileceği vb. gibi işlemler bu gruptadır.
Veri işleme işlemleri ise verinin saklandığı ortam ile hiçbir ilgisi olmayan işlemlerdir. Bir tablonun içindeki tüm kayıtlar silinse bile sonuçta tablo var olacaktır. Çünkü bir tablonun silinmesi DDL’in görevidir.
SQL komutlarının bu şekilde gruplandırılmasının nedeni, SQL’den ziyade, veri yönetimi konusundaki mantıktan kaynaklanmaktadır. Böylelikle işlemler daha anlaşılır bir hal almaktadır. Verinin kılıfı ile ilgili işlemler ve verinin kendisi ile ilgili işlemler...
Sizce bir kitabın adının değiştirilmesi hangi gruba girer? Peki ödünç verme süresinin 15 günden fazla olamaması? Ya kitap fiyatlarının da saklanacağı bir sütunu Kitap tablosuna ekleme işlemi? İpucu: ilk işlem DDL ile yapılmaz. Diğerlerinin ikisi aynı gruptan işlemlerdir.
2.SQL Veri Tanımlama Dili
SQL’i yeterince bilmiyorsanız, bu bölümden önce 3.üniteyi okumanız ve örnekleri bir veritabanı üstünde yapmanız önerilir. Ancak bundan sonra, bu bölümü kavramanız kolaylaşacaktır. Ancak bir proje geliştirirken öncelikle veriyi tanımlamak gerekir. Bu nedenle bu üniteye öncelik verilmiştir.Veri tanımlama dili, verinin ne olduğundan ziyade verinin tipi ile ilgili tanımlamaları yapmak için kullanılır. Bir veritabanında hangi tablolar yer alacak, bu tablolarda hangi alanlar yer alacak ve alanların türleri ne olacak, indeks ya da anahtar olacak mı... bunların hepsi DDL ile belirlenir, değiştirilir veya olan bir tanımlamadan vazgeçilip tanımlama silinebilir.
Veritabanı üstünde herhangi bir tanımlamada bulunulacaksa, bu tanımlama CREATE deyimi ile oluşturulur. DROP deyimi ile de tanımlamadan vazgeçilip silinir. ALTER deyimi ise bir tanımlama üstünde değişiklik için kullanılır.
Bu ünitede ve takip eden ünitelerde, örneklerden hemen sonra cevapları beyaz olarak yazılmıştır. Öncelikle boş alana kendi sorgunuzu çalıştırıp deneme yapabilirsiniz. Ama doğru cevabı bulamıyorsanız, fareniz ile bu alanı seçerek cevabı görebilirsiniz.
İPUCU:
1.SQL cümleciklerini BÜYÜK harfle yazmak bir kural olmasa da kabul gören bir yazma şeklidir. Bu durumda, değişken adlarını mümkün oldukça küçük harflerden oluşacak şekilde tercih etmek okunurluğu artıracaktır.
2.Bir çok dilin aksine, SQL ifadelerinin kaç satırda bittiğinin bir önemi yoktur. Cümleciğin herhangi bir yerinde alt satıra geçmiş olmanız, SQL ifadesinin çalışamayacağı anlamına gelmez.
DİKKAT:
Bazı VTYS’lerde her bir SQL cümleciğinin sonuna ‘;’ konulması istenir. Bu tür VTYS’lerde, cümleciğin nerede bittiğini takip etmek kullanıcıya bırakılmıştır. Öte yandan bazı VTYS’lerde bir SQL cümleciğinin bittiğini belirtmek için cümle sonuna ‘;’ koymaya gerek yoktur. Bunu VTYS’nin kendisi de algılayabilmektedir. Ancak ‘;’ konulmasının çoğu VTYS’de sorun çıkarmadığı bir gerçektir. SYBASE’de ve ORALE’de cümlelerin sonuna ; konulması gerekirken, MS tabanlı sistemlerde bu türden bir zorunluluk bulunmamaktadır
2.1.Temel Veri Tipleri:
SQL’de yeni bir veri tipi tanımlayamayız. Sadece var olan veri tiplerini kullanabiliriz. Burada hemen her yerde kullanılan ortak veri tiplerine bir göz atacağız. Diğer veri tipleri her bir VTYS’ye özel olarak değişebileceğinden VTYS ile birlikte ele alınması daha uygundur.Bazı VTYS’leri kullanıcının veri tipi tanımlamasına olanak sağlar ancak bu SQL’in sunduğu bir özellik olmayıp VTYS tarafından sağlanan bir özelliktir ve yeni bir veritipi tanımlamak maksatlı değildir. Sadece veri bütünlüğü hedeflenmiştir.
TEMEL VERİ TİPLERİ
INTEGER(boyut) Tam sayı.
INT(boyut)Tam sayı.
SMALLINT(boyut)) Küçük tam sayı.Genellikle 0-99 arası sayılar
TINNYINT(boyut)) Nümerik tam sayı. Rakamlar (0-9) boyut:Sayının en fazla kaç basamaklı olacağı belirtilir.
DECIMAL(boyut,d)) Ondalık
FLOAT(boyut,d)) Kesirli Sayıboyut: fazla kaç basamak tam kısım olacağı belirtilir.d: ondalıklı basamak sayısını anlatmak için kullanılır.
CHAR (boyut)) Daha çok uzunluğu sabit(telefon numarası gibi) karakter verileri için kullanılır.
VARCHAR (boyut)) Değişken boyutta metin alan belirlemek için kullanılır.
boyut:Bu alanda en fazla kaç karakter yer alacağını belirtir..
DATETIME) Tarih.
BIT) LOGICAL,true/false veya yes/no alan diye de geçmektedir. En az yer kaplayan veri tipidir. 1 ve 0 olmak üzere iki değer alabilir..
DİKKAT:
ANSI-SQL içerisinde metin olan değerler (CHAR,VARCHAR,MEMO,DATE) tek tırnak içerisine alınarak yazılır. RAKAMSAL değerler ise olduğu gibi yazılır.
Örnek:
WHERE tarih='20.01.2003'
(metin)
SET kitapNo=20
2.2.Veritabanı:
Veritabanı ile kastedilen, veritabanı nesne ve verilerini içinde saklayan dosyadır. MS Access ile uygulama geliştirirken, veritabanı oluşturamazsınız. Ancak Orta ve büyük ölçekli VTYS'lerde bu komut işe yarar ve oldukça fazla teferruatı vardır.Veritabanı, içerisinde tabloları barındıran veritabanı mimarisinin en büyük ögesidir. Bir veritabanı şu şekilde açılır:
UYARI:
Bu komutu, MS Access üstünde çalıştıramazsınız. Ancak MS SQLServer, Sybase gibi büyük ve orta ölçekli veritabanlarında kullanılabilir.
CREATE DATABASE database_name
Örnek-1:
CREATE DATABASE dbKutuphane;
Sonuc1.jpg
Ve şu şekilde silinir:
DROP DATABASE database_name
Örnek-2:
DROP DATABASE dbKutuphane
2.3.Tablolar:
Tablolar, günlük hayattaki listelere karşılık gelir. Öğrencii listesi yerine öğrenci tablosu, öğretmen listesi yerine öğretmen tablosu, veli listesi yerine veli tablosu şeklinde tablolar tanımlayaibliriz.Günlük hayatta listelere karşılık, ilişkisel veritabanında tablolar yer alır. Bir tablo, normalizasyon kuralları çerçevesinde belirlenmiş bir varlığa ait bilgileri tutmak üzere tasarlanmalıdır. Daha sonra bu tablolar arasında bir ilişki tanımlanabileceği için, bu türden veritabanı yaklaşımlarına "İlişkisel Veritabanı Yönetim Sistemleri" denir.
Tablo Oluşturma için genel ifade şu şekildedir:
CREATE TABLE tablo_adi
(kolon_adi1 veri_tipi[NOT NULL][,
kolon_adi2 veri_tipi[NOT NULL],.......])
Örnek-3:
CREATE TABLE Kitap1(
kitapNo INTEGER IDENTITY(1,1) NOT NULL CONSTRAINT cnsKitapNo PRIMARY KEY,
kitapAdi VARCHAR(63) NOT NULL,
ISBNNo VARCHAR(15),
Turu VARCHAR(20),
sayfaSayisi INTEGER,
kitapOzeti VARCHAR(255)
);
ile örneğimizdeki tabloyu oluşturabiliriz.
Kısıtlar(Constraint) oluşturma
Kısıtlayıcılar, tabloların oluşturulması sırasında tabloların bir parçası olarak tanılanır. MS Access ve SQLServer’de kullanılır. Aşağıdaki işlevleri yerine getirebilirler:
1. INDEX gibi, birincil anahtar alan tanımlayabilirler (PRIMARY KEY): Bu durumda standart olarak Clustred Index gibi davranırlar.(bkz. INDEX’ler)
2. INDEX gibi tekil alan belirleyebilirler. (UNIQUE KEY)
3. Tablo oluşturma esnasında da yapılabilen, (NOT NULL) alan belirleyebilirler
4. Yabancı Anahtar Belirleyebilirler.(FOREIGN KEY)
Primary Key: Bir tablodaki, her bir satırın yerine vekil olabilecek bir anahtar veridir. Tekrarlamaması gerekir. Standart olarak bir tabloda verilerin, fiziksel hafıza üstünde de hangi alana göre dizileceğini de primary key belirler. Bu, bazen bir tek alan olabileceği gibi, bazen birden fazla alan da birleşerek bir birincil anahtar oluşturabilir.
Unique Key: Unique key olarak tanımlanan alan için bir değer sadece bir kere girilebilir. Bir başka satıra daha aynı verinin girilmesine izin verilmez. Primary Key’den farklı olarak Unique Key, NULL değerini alabilir.
Foreign Key: Bir tabloya girilebilecek değerleri başka bir tablonun bir belli alanında yer alabilecek veri grubu ile sınırlandırmaya ve en önemlisi de ilişkilendirmeye yarar.
Örneğin, olmayan bir kitabın ödünç tablosuna eklenememesi ve ödünç tablosuna eklene bir kitabın numarası aracılığıyla detay bilgilerine erişilmesi. Burada Kitap.KitaNo Brinicil anahtar alan; Odunc.kitapNo ise yabancı anahtardır. (bkz. Şekil1.6)
Genel yapısı şu şekildedir.
...
CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES foreign_table [(foreign_field1[,foreign_field2,..])]
Tablolar oluşturulurken, bazı alanlara girilebilecek değerler ile ilgili kısıtlar koymak zorunda kalabiliriz. Böylesi durumlarda CONSTRAINT’ler kullanılır.
CONSTRAINT’ler aslında INDEX’lere benzerler ama indekslerden farklı olarak bir tek tablo üstünde etkili olmayabilirler. Özellikle yabancı anahtar zorlayıcısı ilişkisel veri girişi için oldukça etkili bir zorlayıcıdır. Ancak bir Foreign Key tanımı yapabilmek için, FOREIGN KEY yabancı anahtarının asıl tablosunda birincil anahtar olması gerekir.
Örnek-4:
CREATE TABLE Kitap (
kitapNo int NOT NULL ,
kitapAdi varchar63),
ISBNNo varchar (15),
sayfaSayisi int ,
kitapOzeti varchar (255)
);
>>OLUŞTURULMA İŞLEMİ BAŞARI İLE YAPILDI
veya
CREATE TABLE odunc(
oduncNo int NOT NULL ,
kitapNo int NOT NULL ,
uyeNo int NOT NULL ,
vermeTarihi datetime NOT NULL,
vermeSuresi int NOT NULL ,
geldiMi bit
);
>>OLUŞTURULMA İŞLEMİ BAŞARI İLE YAPILDI
Tablo silme:
Bir tabloyu kullanmaktan vazgeçersek:
DROP TABLE tablo_adi
Tabloda Değişiklik Yapma:
Bir tabloya sütun eklemek veya tablodan sütun silmek için ALTER TABLE deyimi kullanılır.
ALTER TABLE tablo_adi
{ADD{COLUMN alan alan_tipi [(boyut)][NOT NULL][CONSTRAINT indeks]
CONSTRAINT coklu_indeks}
DROP{COLUMN alan | CONSTRAINT constraint_adi}
}
Örnek-5:
Kitap tablosuna kitap bedeli adında yeni bir tamsayı sütun ekleyelim.
ALTER TABLE Kitap ADD kitapBedeli INTEGER;
>> TABLO DEĞİŞİKLİĞİ İŞLEMİ BAŞARI İLE YAPILDI
Örnek-6:
Bu sütunun boş geçilememesini istese idik:
ALTER TABLE Kitap ALTER COLUMN kitapBedeli INTEGER NOT NULL;
>> TABLO DEĞİŞİKLİĞİ İŞLEMİ BAŞARI İLE YAPILDI
dememiz gerekirdi.
Örnek-7:
Bu sütunu silmek için,
ALTER TABLE Kitap DROP COLUMN kitapBedeli;
>> TABLO DEĞİŞİKLİĞİ İŞLEMİ BAŞARI İLE YAPILDI
2.4.İndeksler
Indeks'leri bir kütüphanede kitapların diziliş sıraları ve ek listeler yardımıyla bulunmalarını kolaylaştırma faaliyetlerine benzetebiliriz. Bu durumda kitapların diziliş sırası kümelenmiş(CLUSTRED) indeks, ek listeler ise kümelenmemiş indekselere karşılık gelir.Kütüphanemizdeki Kitapın raflardaki dizilişlerini ele alalım. Bir kitap aradığımızda, Kitapımız bir kurala göre dizilmiyorsa, her bir kitaba teker teker bakmamız gerekir. Kitapı raflara alfabetik dizersek, her bir kitabı teker teker gözden geçirmek zorunda kalmayız. Aradığımız kitap ile bakmakta olduğumuz kitabın isimlerini karşılaştırır, sağa ya da sola yönelip aramaya devam ederiz. Aynı şekilde yazarlarına ya da kütüphane numarasına göre sıralanmış birer liste olursa, bu kriterlere göre de aradığımız kitabı kolayca bulabiliriz.
Veritabanlarında indeks oluşturarak, verileri veritabanındaki kayıtlı oldukları sıradan başka bir sırada gösterebiliriz. Temelde İndekslerin ilişkisel veritabanında şu üç işlevi vardır:
1. Tekil İndeksler, veri ilişkilerini ve veri bütünlüğünü sağlayan birincil anahtar alanlar oluşturmada kullanılır.
2. İndeks olan alanın değerine göre bir kaydın kayıtlar arasındaki sırasını gösterirler.
3. Sorguların neticelenme sürelerini kısaltırlar.
CREATE [UNIQUE] INDEX index_adi
ON tablo_adi(kolon_adi1[,kolon_adi2,...][DESC])
Örnek-8:
CREATE UNIQUE INDEX indKitapNo
ON Kitap(kitapNo)
>>OLUŞTURMA İŞLEMİ BAŞARI İLE YAPILDI
Dedikten sonra, iki farklı kitaba aynı kitap no’nu vermek mümkün olamayacaktır. Bunu bizim yerimize VTYS denetleyecektir.
Bir indeksi silmek için:
DROP INDEX tablo_adi.indeks_adi
deyimi kullanılır. Bir tablo ya da indeks alan silindiğinde, indeks de otomatik olarak silinmiş olur.
Örnek-9:
Şimdi, oluşturduğumuz indeksi geri silelim
DROP INDEX Kitap.indKitapNo
>>NESNE SİLİNME İŞLEMİ BAŞARI İLE YAPILDI
SQL Server’de Index sırasına göre verilerin fiziksel olarak yeniden sıralanmasını istersek,
CREATE UNIQUE CLUSTERED INDEX indKitapNo
ON kitaplar(kitapNo)
diyebiliriz. Ancak bir tablo üstünde sadece bir adet Clustred Index oluşturulabilir.(Bir çokluk kümesini fiziksel olarak aynı anda kaç farklı şekilde sıralayabiliriz?Elbette bir kere...)
Sizin kullanmakta olduğunuz VTYS de bu konuda ek işlevler sunuyor olabilir. Yardım menüsünden bu konuda bilgi alabilirsiniz.
Tablolar birbiri ile ilişkilendirilirken, index alanlar üstünden ilişki kurulursa daha hızlı sorgular elde edilir.
2.6.Veritabanı Tasarımı:
Önümüzde bir proje geliğinde, bunun bir veritabanı projesi olduğu aşikarsa, bir sonraki aşama hangi tablolardan oluşacağına karar vermektir. Bu bölümde, buna nasıl karar vereceğimiziöğreneceğiz. Bir sonraki konuda, doğru karar verip vermediğinizi anlamak için normalizasyon kurallarına göz atabilirsiniz.İyi bir veritabanı tasarımı yapabilmek için yeteneğinizi, bilginizi ve tecrübenizi kullanmanız gerekir. Bu iş için evrensel geçerliliği olan metotlar maalesef yoktur. Öncelikle, ilişkisel veritabanının tanımını çok iyi bilmek gerekir. Bununla ilgili olarak, 5 Normalizasyon kuralını okumanızda fayda vardır. Ancak 5N, tasarım aşamasında size yol göstermek yerine hangi şartlara uygun tasarım yapmanız gerektiğini anlatır.
Bazen, bu kurallardan vazgeçmek durumunda kalabilirsiniz ancak, veritabanında saklanacak verilerin hacmi arttıkça bu kuralların daha sıkı sağlanmasında fayda vardır.
1.Nesneleri Tanımlayın:
Herhangi bir proje önünüzde konduğunda öncelikle nesneleri tanımlayın. Nesne, çeşitli özellikleri bulunan bir varlıktır. Başlangıçta özellikleri ile ilgilenmeyeceğiz.
Örnek-14:
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şturun:
Her bir nesne için bir tablo oluşturun ve her bir tabloya içereceği veriyi en iyi anlatan bir isim verin. Tablo oluşturma işini, bir kağıt üstünde sembolik olarak gösterebilirsiniz veya doğrudan MS Access, SQL Server, MySQL,Oracle ...gibi kullanmakta olduğunuz VTYS üstünden de oluşturabilirsiniz. Ama tüm proje bitinceye kadar bu tablolar üstünde muhtemel değişiklikler olacaktır.
İPUCU:
Tablolar isim verirken mümkünse tekil isimler kullanın. Böyle yaparsanız hem daha anlaşılır bir tasarım yapmış olursunuz hem de daha sonra kodlama aşamasında karışıklığın önüne geçmiş olursunuz.
Örneğin içinde Kitap ile ilgili bilgiler bulunduracak tablonun adını Kitap koymak oldukça mantıklıdır.
3.Her bir tablo için bir anahtar alan seçin:
Veritabanındaki herhangi bir veriye erişmeden önce tabloya erişilir.Bir veritabanında en çok muhatap olunan nesne grubu genellikle tabloalrdır. Buraya kadar hangi tabloları oluşturacağımıza karar verdik. Her bir tablonun içinde hangi bilgileri saklayacağımızı kabaca biliyoruz. Bu aşamada, tabloda yer alacak her bir kaydı bir diğerinden ayırabilecek bir sütuna ihtiyaç duyarız. Örneğin bir kitabı seçmek istediğimizde, bu kitabın hangi kitap olacağını öyle bir anlatabilmeliyiz ki, başka hiçbir kitap ile karışmamalı. Bunu yapmanın tek yolu, bir alanı birincil anahtar alan olarak belirlemektir.
Anahtar alan seçerken, sizi kısıtlamadığı sürece, doğal alanlar seçmeye dikkat etmenizde fayda vardır. Örneğin araçlar ile ilgili bir tablo yaparken, plakalarını anahtar alan olarak belirleyebilirsiniz. Çünkü her bir plakadan bir tek araç trafiğe çıkabilir. Bu bizi kısıtlamaz. Öğrenci tablosu için, öğrenci numarası doğal bir anahtar alandır çünkü aynı okulda, aynı numaradan bir öğrencinin daha bulunması söz konusu değildir.
Kitap tablosu için ISBN numarasını anahtar alan olarak tanımlayabilirsiniz ama, elinizde aynı kitaptan iki adet olduğunda, ISBN numarası sizi kısıtlayacaktır. elinizde iki adet ‘Önümüzdeki Yol’ kitabı varsa, her iki kitabın da ISBN numarası aynıdır.Kitapdan biri eski biri yeni olabilir.Bu bir kargaşaya neden olabilir. Çünkü eski kitabı kime yeni kitabı kime verdiğinizin takibini ISBN numarası ile mümkün değildir. Ancak bir E-Ticaret sitesi tasarlarken, stoktaki tüm Kitap birbiri ile eşdeğer olacağından ya da öyle olduğu varsayıldığından ISBN numarası birincil anahtar alan olabilir. Bu durumda, adet diye bir niteliğin aynı tabloda yer alması gerekecektir.
4.Nesnelerin gerekli her bir özelliği için tabloya bir sütun ekleyin:
Tablo adlarını tamamladıktan ve anahtar adlarını belirledikten sonra, tablolarınıza sıradan adını veren nesnenin her bir özelliği için bir alan(sütun) ekleyin.
İPUCU:
1.En başa birincil anahtar olarak belirlediğiniz alanı eklemek bir kural değildir ancak tablonuzun anlaşılırlığı ve göze hoş görünmesi açısından tercih etmenizin yararınıza olacak bir tekniktir.
2. Genellikle,yapay birincil anahtar alanlar tablo adı ile başlar ve sonunda ID vardır. ogenci tablosu için ogrenciID gibi.
Örneğin, kitap için:
Kitap no, ISBN no, kitap Adı, Yazarı, türü,Sayfa Sayısı, Özeti, fiyatı, baskı yılı...
Üye için: UyeNo, Adı, soyadı, e-mail adresi, ev telefonu, cep telefonu, iş telefonu....
Bu noktada, sizden istenen proje ile ilgili basılı formlar vs. varsa, bir göz atmanız hangi özelliklerin yer alması gerektiği konusunda karar vermenize yardımcı olacaktır.
5.Tekrarlayan nesne özellikleri için ek tablolar oluşturun
Aklınızda hep şu olmalı: veri tekrarı olacak mı? Veri tekrarı olacaksa bir yerlerde hata yapıyorsunuzdur. Elinizdeki tablonun en az bir tabloya daha ayrılması gerekiyor demektir.
Şunu da unutmayın, her projeye uyacak evrensel bir veritabanı tasarım tekniği yoktur. Yani her şey sizin belli kurallar etrafında ne kadar teferruatlı düşünebildiğinize bağlıdır.
Örneğimizde, her bir kitap için tür belirledik ama, bir kitap hem kişisel gelişim kategorisine hem de hikaye kategorisine girebilir. Ya da e-ticaret sisteminde bir ürünün birden fazla reyonda yer alması gerekli olabilir. Veya bir kitap birden fazla kişi tarafından yazılmış olabilir..
Bir kitap için birden fazla türü kaydedebilmeyi ele alalım:
Bu türden bir sorunu çözmek için ilk akla gelen şey, Kitap için, 2.Tür,3.Tür diye iki alan daha eklemek. Ama çoğu Kitap bir tek türdendir ve bu Kitap için 2 alan hep boş kalacaktır. Öte yandan, 4 türe birden giren bir kitap olduğunda 4.tür bilgisini nereye yazacağız? Aynı alana mı? Ya da dört adet bölüm mü açacağız? Bunlar, veritabanı tasarımının doğasına terstir.
2.Çözüm yolu ise, bir kitabı iki kere kaydedip, birincisini, ‘Kişisel Gelişim’ türü olarak; ikincisini de ‘Hikaye’ olarak girmek.. Ancak bu durumda da diğer bilgiler tekrar edecektir. Ya da bir süre sonra, kitap hakkında girilen bilgilerin yanlış olduğunu fark ettiniz.Hangi kaydı güncelleyeceksiniz? Ya birini düzeltip birini unutursanız... Sonuçta veri tekrarı ve veri bütünlüğünün bozulması söz konusudur. Bu da yine ilişkisel veritabanı tasarımının doğasına terstir.
Bu durumda, türler diye bir yeni tablo oluşturup, bir de kitap_turler diye 2. tablo yu oluşturduktan sonra bu türden bilgileri burada tutmak gerekecektir. Böylelikle, hiçbir türde yer almayan Kitapdan 10 ayrı türde yer alan Kitapa kadar bütün olasılıklar için bir çözüm geliştirmiş oluruz.
6.Anahtar Alana Bağlı Olmayan Alanları Belirleyin
İlişkisel veritabanında, tablodan herhangi bir tek kayda erişmek için mutlaka bir farklı özellik sağlanmalıdır ve bu özellik de anahtar alan tarafından sağlanır. Ancak 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ı elimine edip ayrı tablolara ayırmak gerekir.
Örneğin, ödünç tablosunu ele alacak olursak, ödünç verdiğimiz her kitabı ödünç alanın adresini de bilmek istediğimizde, bunu ödünç tablosuna yazamayız. Çünkü ödünç tablosunun birincil anahtar alanı oduncNo’dur ve bu alan, ödünç verme işlemi ile ilgilidir. Oysa ödünç alanın adresi, ödünç alan kişinin kendisine bağlı bir özelliktir. Bu kişinin her aldığı kitap için adresini tekrar yamaya gerek yoktur. Aynı şekilde otomasyon içerisinde başka yerlerde de bu kişinin adres bilgilerine muhtemelen ihtiyaç duyulabilir çünkü adres, üyenin bir özelliğidir.
Ödünç verilen kitabın adresini bilmek istediğimizde, üyeler adında bir tablo daha açıp, burada herkesin adresini tutmak durumundayız demektir. Ödünç tablosunun ise, oduncAlan bilgisi olarak, Üyeler tablosunun birincil anahtar alanına bir bağlantı(yabancı anahtar) içermesi daha doğru olur.
7.Tablolar arasındaki ilişkileri tanımlayın
Her biri bir nesneye dair özellikleri barındıran tabloların tümünü göz önüne alın ve birbirleri ile olan ilişkilerini tanımlamaya çalışın. Örneğin Kitapı ödünç veririz. Bu durumda, ödünç tablosu ile Kitap tablosu ilişkili olacaktır. Kitap üyelere ödünç verilir. Bu durumda, ödünç ile üyeler arasında da bir ilişki vardır. Türler ile Kitap arasında bir ilişki vardır, bir kitabın en az bir türe dahil olması gerekir.
Örnek-15:
Bizim projemizdeki nesneler(tablolar) arasında aşağıdaki ilişkiler yer almaktadır:
Kitap.kitapNo (1)----(¥) odunc.kitapNo
Uyeler.uyeNo(1)---(¥)odunc.uyeNo
Tur.turNo(1)---(¥)Kitap_tur.turNo
Kitap.kitapNo(1)---(¥)Kitap_tur.kitapNo
Yazar.yazarNo(1)--- (¥)kitap_yazar.yazarNo
İki tablo arasında ilişkiyi sağlayan alanların aynı adda olması zorunluluk değildir. Teorik olarak tabloları istediğiniz herhangi iki alanları üstünden birleştirebilirsiniz. Ancak, türler tablosundaki türNo ile üyeler tablosundaki uyeNo alanını birleştirdiğinizde hiçbir işinize yaramayacak anlamsız bir ilişki ortaya koymuş olursunuz.
Bu ilişkileri analiz ederken, her bir alanın hangi tablo için birincil anahtar alan, hangi tablo için yabancı anahtar olduğunu not etmeniz, daha sonra fiziksel olarak veritabanını tasarlarken işinizi kolaylaştıracaktır. Hatta bu bilgileri bir şema üstünde de gösterebilirsiniz. İşte bir çok VTYS tarafından sağlanan örnek bir şema:
![]()
diyagram_1: Bu kısımda anlatılanlar doğrultusunda örnek projemizin SQL Server 2000 üstünde görünen diyagramı. İlişkili her iki tablo bir birincil alan ve bir yabancı anahtar alan üstünden birbirine bağlanır. Projenin tüm şekli yer alacaktır. Aynı diyagramın bir benzerini MS Access ile degerçekleştirebiliriz.
İPUCU:
Farklı tablolardaki iki alan aynı veriyi tutuyorsa, iki alana da aynı adı vermek, karışıklığa yol açabilir gibi görünse de aslında daha düzgün bir yapı ortaya çıkar. KitapNo alanı, Kitap tablosunda da ödünç tablosunda da kitap numarası tutmaktadır. Bu alanlardan birine kitapNo diğerine oduncGidenKitapNo demek, kafa karışıklığına neden olabilir. En Mantıklısı her ikisine de kitapNo demektir
2.7.Veritabanı Normalizasyonu
Veritabanı normalizasyonu, ilişkisel veritabanında tablolara karar verme anayasasıdır. Veritabanı uygulamasının ciddiyeti arttıkça, bu kurallara uymak zorunluluk arzeder.Aslında ilişkisel veri tabanı tasarımından ziyade bir tablo içerisinde yer alacak kaydın nelerden oluşmasına karar vermeye yarayan normalizasyon kuralları başlı başına bir işlemdir. Sonuç itibari ile veritabanı tasarım aşamasında gerekli bir işlem olduğundan bu bölüme almayı uygun bulduk.Genel kabul görmüş 5 normalizasyon kuralı vardır. Burada her bir kuralı tam olarak anlatmak mümkün değildir.Ancak bu kurllar, ilişkisel veritabanının tanımı ile birlikte ortaya konmuştur. Özet olarak fikri vermesi açısından yer verilmiştir.
1. Normalizasyon Kuralı:
Bir satırdaki bir alan yalnızca bir tek bilgi içerebilir. Örneğin kitap tablosunda, birden fazla yazarı olan kitap için yazar1, yazar2, yazar3 diye alanlar açsaydık, bu kurala uymamış olurduk. Böyle bir durumda, ayrıca yazarlar tablosu da oluşturarak kuralı çiğnememiş oluruz.
Genellikle yapılan hata:
Verileri virgül veya bir başka karakter ile ayırıp aynı alana girmek. Daha sonra program içerisinde split ile bu değerleri ayırmak. Ancak bu ilişkisel veritabanının doğasına terstir.
2. Normalizasyon Kuralı:
Bir tablo için, anahtar olmayan her alan, birincil anahtar olarak tanımlı tüm alanlara bağlı olmak zorundadır. Mesela, Ödünç tablosunda KitapAdi diye bir alan eklese idik, bu sadece ödünç verilen kitap ile ilgili bir bilgi olacaktı ve oduncNo’na bağlı bir nitelik olmayacaktı. Bunu çözmek için, kitap adlarını ayrı bir tabloda tutarak sorunu çözdük.
Ya da anahtar alanın birden fazla alandan oluştuğu tablolarda, anahtar alanlardan sadece birine bağlı veriler, tabloda yer almamalı, ayrı bir tabloya taşınmalıdır.
Bunun tersi de geçerlidir. Yani iki ya da daha fazla tablonun birincil anahtarı aynı olamaz. Şayet böyle ise, bu iki tablo tek tabloya indirilmelidir.
3. Normalizasyon Kuralı:
Bir tablo için, anahtarı olmayan bir alan, anahtarı olmayan başka hiç bir alana bağlı olamaz. Örneğin, kitaplarımız için cilt tipi adında bir alan ekleyip burada da karton kapak için K, deri cilt için D, spiral cilt için S yazsaydık, bu kodlama, kitap tablosunun birincil anahtarı olan kitapNo alanına bağlı bir kodlama olmayacaktı. Çünkü bu kodlama bir başka anahtarı olmayan alana bağlıdır. Bunun sonucunda da veritabanımızda, karşılığı olmayan bir kodlama yer almış olacaktır. Cilt tipi bilgisini kodlu olarak tutan alan aslında cilt tipi açıklaması olan başka bir alana bağlıdır. Bu ilişki başka bir tabloda tutulmalıdır.
Bu durumda, ciltSekli adında bir tablo açmamız gerekir. Bu tablonun alanları da ciltTipKodu ve ciltSekli olmalıdır. Ancak bundan sonra, kitaplar tablosunda ciltTipi adında bir sütun açıp buraya da D,S,K gibi kodları yazabiliriz.
4. Normalizasyon Kuralı:
Birincil anahtar alanlar ile anahtarı olmayan alanlar arasında, birden fazla bağımsız bire-çok ilişkisine izin verilmez. Örneğin, tablomuzda yer alan bir kitap hem hikaye kitabı hem de kişisel gelişim kitabı olabilir.(Bu durumda kitabın adı, kişisel gelişim hikayeleri olurdu her halde) Bu durumu Kitap tablosunda nasıl ifade edeceğiz?
4.Normal formu sağlamak için, her bağımsız bire çok ilişki için ayrı bir tablo oluşturmak gerekir.
Bu örnekte, türler diye bir tablo açmamız gerekiyor. Daha sonra kitapTurleri diye bir başka tablo daha açmamız gerekiyor. ‘Kişisel Gelişim Hikayeleri’ adlı kitap için, öncelikle kitap numarası, Hikaye bölümünün kodunun yer aldığı bir satır; ardından da yine kitap numarası, ardından da kişisel gelişim türünün kodunun aldığı yeni bir satır daha eklemek gerekir.
5. Normalizasyon Kuralı:
Tekrarlamaları ortadan kaldırmak için her bir tabloyu mümkün olduğunca küçük parçalara bölmek gerekir. Aslında ilk 4 kural sonuçta bu işe yarar ancak, bu kurallar kapsamında olmayan tekrarlamalar da 5.nolu normalizasyon kuralı ile giderilir.
Örneğin, kitaplarımız için bir edinme şekli bilgisi girilecek sütun eklemek isteyelim: Bu bölüme girilebilecek bilgiler bellidir: Bağış veya satın alma.
Bu bilgileri başka bir tabloda tutabiliriz. Böylelikle, kullanıcıların bu alan gelişi güzel bilgiler girmesini engellemiş oluruz. Bu da sorgulama esnasında verilerimiz arasında bir tutarlılık sağlar. Bu işlem sonucunda, tutarsızlıklara neden olabilecek ve sık tekrarlayan veriler başka bir tabloya taşınmış olur. Bu tablo için, veritabanı programlamada ‘look-up table’ terimi kullanılır.
Ancak, veritabanı normalizasyon kuralları, bir ilişkisel veritabanının tasarlanma aşamalarını değil de ilişkisel veritabanında yer alacak kayıtların ilişkisel veritabanı ile uyumlu olup olmadığını denetlemeye yöneliktir.
Özetle ilişkisel bir veritabanı tasarımı şu dört öğeyi barındırmalıdır.
* Veri tekrarı yapılmamalıdır.
* Boş yer mümkün olduğunca az olmalıdır.
* Veri bütünlüğü sağlanmalıdır.
* Veriler, aralarında bir ilişki tanımlanmaya müsait olmalıdır.
3.SQL Veri İşleme Dili
DDL ile tanımlanan nesneleri bir kaba benzetirsek, DML'in görevi bu kabın içini doldurup-boşaltmak ile ilgi şeylerdir.Veri İşleme dili, verinin şablonu üstünde değişiklik yapmaz. Sadece var olan tablolardaki bilgileri uygun şekilde raporlamak(SELECT), yeni kayıtlar eklemek(INSERT), kayıtlar üstünde güncelleme yapmak(UPDATE) ve kayıtları silmek(DELETE) için kullanılır. Veri işleme dili sadece veritabanında kaydı tutulan bilgilerle ilgilenir. Bu bilgilerin nasıl tutulduğu ile ilgilenmez.
RESULTSET, RECORDSET ve DATASET kavramları
VTYS’de bir sorgu çalıştırıldığında, tablo mantığında bir sonuç üretir. Bu sonuca resultset denir. Bir ResultSet, birden fazla tablodan kayıt içerebilir. Bir ResultSet’in içeriği, veritabanı programları geliştirilirken, ADO nesnelerinden RecordSet içerisine aktarılır ve veriler program içerisinde bu nesne aracılığıyla yönetilir. ADO.NET içerisinde ise ResultSet’ler (birden fazla recultSet) ADO.NET içerisinde ise DataSet denilen nesnelere aktyarılabilir . RecordSet ve DataSet konusunu, 3.Kitapçıkta teferruatlı olarak incelenecektir.
3.1.SELECT
SELECT komutu ile bir veritabanından kayıtlar seçilir, sadece okunur ve gösterilir. SELECT komutunun tek işlevi, VTYS'nin depoladığı yapılandırılmış veriyi kullanıcıya, istediği şekilde sunmaktır.
SELECT [DISTINCT] { * | alan_adi1, alan_adi2, ....., [SUM(alan_adi)], [AVG(alan_adi)], [MAX(alan_adi)], [MIN(alan_adi)], [COUNT( * | alan_adi)]}
FROM tablo_adi1, [tablo_adi2], ...
LEFT [OUTER] JOIN | RIGHT [OUTER] JOIN |INNER JOIN
GROUP BY {alan_adi}
HAVING koşul
ORDER BY sıralamanın yapılacağı alan_adi1 ASC|DESC, alan_adi2 ASC|DESC ,
WHERE koşullar
[alan_adi IN (veri kümesi) | (SELECT işlemi)]
[alan_adi BETWEEN değer1 AND değer2]
[alan_adi LIKE ‘%ifade ? _* %’]
[tablo_adi1.alan_adi = tablo_adi2.alan_adi]
[alan_adi matematiksel operatör ANY|SOME|ALL (SELECT işlemi)]
[EXISTS|NOT EXISTS (SELECT işlemi)];
En Basit SELECT
En basit olarak bir tablodaki tüm kayıtları seçmek için,
SELECT alan1[,alan2, alan3,..... | *]
FROM tablo_adi;
Yapısı kullanılır.
Örnek-1:
Kitaplar tablosundaki tüm kayıtları seçelim:
SELECT * FROM Kitap
Koşula bağlı SELECT ve WHERE Yapısı:
Bazı koşullara uyan bilgileri almamız gerekebilir. Bu durumda WHERE cümleciğini takip eden kısımda, bu şartı belirtebiliriz.
SELECT alan1[,alan2, alan3,..... | *]
FROM tablo_adi
WHERE şart1[AND şart2[OR şart3[NOT şart4>];
Matematiksel Karşılaştırma İşaretleri:
Koşullarda, verilerin durum Matematiksel Karşılaştırma İşaretleri kullanılarak ifade edilir. Bu işaretler Şunlardır:
İşaretİşlev = Eşittir > Büyüktür < Küçüktür >= Büyüktür veya Eşittir(Büyük-Eşit) <= Küçüktür Veya Eşittir(Küçük-Eşit) <> Eşit Değildir != Eşit Değildir LIKE bkz Like
Örnek-2:
KitapNo 12’den büyük olan kitapları seçelim:
SELECT * FROM Kitap
WHERE kitapNo>12;
Örnek-3:
Sayfa sayısı 200’den fazla olan ve kitap numarası da 12’den büyük olan kitapların listesi:
SELECT * FROM Kitap
WHERE kitapNo > 12 AND sayfaSayisi > 200;
Mantıksal İşaretler
Birden fazla koşula göre seçme işlemi yapılırken, AND, OR, NOT mantıksal operatörlerinden faydalanılır.
Mantıksal fonksiyon tabloları şu şekildedir:
AND İŞARETİ:Şartlardan her ikisini de sağlayan kayıtları seçmek için kullanılır..
X(1.Şart)Y(2.Şart) SONUÇ(X AND Y)
0 0 0(Seçimez)
1 0 0(Seçilmez)
0 1 0(Seçilmez)
1 1 1(Seçilir)
OR İŞARETİ: Şartlardan en az birinin sağlanması halinde, kayıtlar seçilir.
X(1.Şart)Y(2.Şart)SONUÇ(X OR Y)
0 0 0(Seçilmez)
1 0 1(Seçilir)
0 1 1(Seçilir)
1 1 1(Seçilir)
NOT İŞARETİ: Şartı sağlamayan kayıtları bulmak için kullanılır.
X(Şart)NOT X(Şartın tersi)
0 1(Seçilir)
1 0(Seçilmez)
Bu fonklsiyonların dışında XOR ve XNOR işlemleri de bazı VTY’leri tarafından desteklenmektedir. Bu iki komutla ilgili bir işleme ihtiyaç duyarsanız başka kaynaklardan detaylı olarak bakmanızda yarar olabilir. Ancak bu iki komut pek nadir kullanılmaktadır.
Örnek-4:
Kitap No 12’den büyük olan veya, sayfa sayısı 200’den büyük olan veya adı ‘Visual Basic.NET’ olan kitapların listesi:
SELECT * FROM Kitap
WHERE kitapNo > 12
AND sayfaSayisi > 200
OR KitapAdi='Visual Basic.NET';
İPUCU:
Birden fazla şartın yer aldığı koşullarda parantez kullanılarak şartların sırası değiştirilebilir, mantıksal operatörlerin etkileyeceği şartlar sınırlandırılabilir.şekilde tercih etmek okunurluğu artıracaktır.
Örnek-5:
Kitap No 12’den büyük olan veya, sayfa sayısı 200’den büyük olan veya adı ‘Visual Basic.NET’ olan ama ISBN NO ‘975-316-622-2’ olmayan kitapların listesi:
SELECT * FROM Kitap
WHERE (kitapNo > 12 AND sayfaSayisi > 200 OR KitapAdi='Visual Basic.NET') AND ISBNNO <> '975-316-622-2';


LinkBack URL
About LinkBacks
İPUCU:
diyagram_1: Bu kısımda anlatılanlar doğrultusunda örnek projemizin SQL Server 2000 üstünde görünen diyagramı. İlişkili her iki tablo bir birincil alan ve bir yabancı anahtar alan üstünden birbirine bağlanır. Aynı diyagramın bir benzerini MS Access ile degerçekleştirebiliriz. 

DİKKAT:Verileri virgül veya bir başka karakter ile ayırıp aynı alana girmek. Daha sonra program içerisinde split ile bu değerleri ayırmak. Ancak bu ilişkisel veritaba*nının doğasına terstir.





Alıntı ile Cevapla

