Önsöz
12 Temmuz 2007
ÖNSÖZ
Gerçeklikle karşılaştırıldığında, bilimde vardığımız düzey ilkeldir, çocuk oyucağıdır. Ama sahip olduğumuz en değerli şey de odur.
ALBERT EINSTEIN ( 1879-1955)
Daha önce matbaanın, radyonun ve televizyonun gündelik yaşamda yarattıkları devrimlerin bir benzerini bugün internet gerçekleştiriyor. İnternet henüz emekleme aşamasında, ama daha şimdiden dünyayı değiştiriyor. Bugün, ABD deki 1000 den fazla kasabanın ve kentin homepage i , internet de bir sitesi var. 200den fazlasının şimdiden, birbirine bağlanmış bilgisayarlar kullanarak hayata geçirmeyi planladıkları yerel siyasi enformasyon yurttaş ağı ( civic networking) projeleri var. Sadece Hollanda da, altmış kasaba bilgisayar aracılığıyla iletişimi benimsemiş durumda ve bir çeşit yurttaş ağına sahip.
Database firmalari her geçen gün daha fazla veri depolamak, verileri hiçbir durumda kaybetmemek, verilere kolayca ve daha hızlı ulaşabilmek adina birbirleriyle yarışıyorler. Peki ama neden verilerle uğraşıyoruz ? Çünkü verileri topladiğimizda bir sonuca ulaşmak ve raporlar elde etmek çıkan sonucu görerek geleceği tahmin etmek istiyoruz. Verileri değerlendirme aşamasinda ise işin içine istatistiksel yöntemlerin girmesi kaçınılmaz oluyor.
Database firmalarının bugün hemen hepsinin hedefi ınternet uzerinde databaselerini kullanmak ve degerlendirmek. Database i internet üzerinden çalıştırımayan, uygulamalarını internete taşıyamayan firmalar , ürünlerini pazarlayamıyacaklarını biliyorlar.Bu nedenle hem internet hem de database kavramları gelecekte son derece önemli olacaktır.
Okul sırasında ekonomik nedenlerden dolayı piyasadaki bilgisayar firmalarinda çalışmak zorunda kaldık. Bu hem ekonomik anlamda bir rahatlama getirdi hem de okulda ogrendiklerimizi piyasada kullanma olanagı verdi. Çoğu öğrenci okuldaki bilgilerinin iş hayatinda hiç yararli olmadığı düşüncesindedir. Biz bu düşüncede değiliz. İstatistik bolumunde değerli hocamiz Prof.Dr Aziz Bener in bizlere bilgisayar programlama dersinde, iki donem boyunca gosterdiği C programlama dili sayesinde , programlama ve database ile ilgili temel kavramları çok daha hızlı ve çabuk kavradığımızı söyleyebiliriz. Piyasadaki nesneye yönelik programlama araçları ve dördüncü kuşak dilleri kolayca öğrenebiliyorduk çünkü hepsinin mantiği ayni idi ve C programlama dilini bilen bir öğrenci için diğer dillerde uygulama geliştirmek su içmek gibi bir şeydi.
Internet ve database uzerine bir bitirme odevi hazırlamak oldukça zordu ve bu odevin hazırlanması ile bildiklerimizin uzerine yeni bilgiler katmış olduk. Oyle bir odev hazırlamalıydık ki bizden sonra bölüme girecek öğrenciler bu ödevi okuyarak internet üzerinde bir veritabanı uygulaması geliştirebilmeliydi.Umarız bu konuda başarılı olabilmişizdir.Bu ödevin hazırlanması sırasında yardımlarını bizlerden esirgemeyen Progress ve Oracle firması yetkililerine ve değerli hocamiz Sayin Prof.Dr Aziz Bener e sonsuz teşekkürler.
Reşat Bayraktar.
Baran Ertaş.
Veritabanı
Veritabanı ve Akılcı Düşünce Üzerine
Veritabanı bir yazılımdır. Veritabanı bilginin hammaddesinin depolandığı yerdir. Bilgiyi oluşturan bileşenleri sınıflara ayırarak ama aralarındaki ilişkileri de dikkate alarak depolar, istendiği zaman birleştirerek sunar. Bilgi teknolojileri ile ilgili hemen her konunun bileşenlerden birini veritabanı oluşturmaktadır.Kişisel fax yazılımlarından, en gelişmiş fax sunucu sistemlerine kurumsal kaynak planlamasına (Enterprise Resources Planing-ERP) yazılımlarından, döküman arşiv sistemlerine, CAD/CAM uygulamalarından, OT/VT sistemlerine ve nihayet veri ambarı uygulamalarına kadar her sistemin içerisinde mutlaka bir veri tabanı bulunmaktadır. Hatta işletim sistemleri bile sistem bilgilerini özel yapıları olan veritabanlarında tutmaktadır.
Geçmişten günümüze yaklaşımlar ve yapısal özellikler değişime uğramış olsa bile, onlardan beklenen hizmet hep aynı kalmıştır ki o da Hemen şimdi bilgi olarak ifade edilebilir. Veritabanı dendiğinde yalnızca verilerin depolandığı bir kavram algılamak çok doğru bir yaklaşım olmayacaktır.
O verinin bilgiye dönüştürülerek diğer verilerle işlendiği koca bir fabrika gibidir. Bugün teknoloji üretenlerin pek anlamlı olmayan düşünce biçimlerinin bir sonucu olarak bazı benzer kavramlar istemeden de ayrı ayrı ele alınıyor olsa bile, (daha fazla ürün satmak adina uygulanan pazarlama stratejilerinin bir sonucu bu belki de !) gelecekte bugünün veri ambarı olarak adlandırılan yaklaşımları da aslına dönerek, veritabanı kavramı içerisindeki olması gereken yere oturacaktır.
Veritabanı kavramını tek başına ele almak kurumsal bilgi teknolojileri profesyonelleri için pek anlamlı olmayacaktır. Çünkü veritabanı mimarileri, algoritmaları, bellek ve kaynak kullanımı gibi konular kimi zaman oldukça ağdalı bir dilin kullanılmasını gerektirecektir. Bu dili anlayacak mühendislik eğitimi almış teknik elemanlar, çoğunlukla bu bilgiler sahiptirler (sahip olmaları gerekir) ve profesyonel yöneticiler, yanlarında çalıştırdıkları bu çalışanlardan dilerlerse bu bilgileri alabilirler. Yanlarında personel çalıştırmayan ve bu tip hizmetleri dış kaynaklı firmalardan alan kurumlar içinde bu hizmeti sağlayan danışmanlık şirketleri mevcuttur. Veritabanı kullanarak kurumlar hangi katma değeri sağlayabileceklerini çok iyi bilmelidirler. Eğer bir profesyonel kurum kullanacağı veritabanı ile teknik ayrıntıları detaylı olarak öğrenmek isterse, bu onun tercihidir. Ancak bu bir zorunluluk değildir.
Devlet kurumlarında ya da yerel yönetimlerin yazılım ve donanım ihalelerine katılan ve bilirkişi olduğunu söyleyen kişiler kendi aralarında veritabanı sistemlerinin üzerine tartışırken içlerinden biri Benim veritabanım 10 yıllık bilgiyi saklar derken diğeri Ama benim veritabanım renkli ekranda çalışıyor demişti. Dünyaca kabul görmüş veritabanı sistemleri arasında yaptıkları tartışmada sonucun ne olduğunu tahmin etmek zordu, çünkü hangi kriterlere göre karar verildiğini anlamak veritabanı kavramını anlamaktan daha da zordu.
Teknolojiyi takip edenler, eski dergileri karıştırdıklarında daha birkaç yıl öncesine kadar yere göğe sığmayan teknolojilerin bugün anlamını yitirdiğini kavramakta güçlük çekmeyeceklerdir. Birkaç yıl öncesine kadar sözü edilen Client/Server (İstemci/ Sunucu) mimarisi bugün gözden düşmüş durumda. Teknoloji firmalarının profesyonel kurumlara şöyle bir dayatması oluyor.Eğer yeni çıkan teknolojiyi satın almazsan dünyanın gerisinde kalırsın ve bunu satın alan diğer rakip kuruluşlar senin 5 yıl önünden gidecektir. Bu dayatma veya tehdit diyelim bir pazarlama ya da satış staretejisi olarak görülebilir ama bazı durumlarda doğru da olabilir. Bu yüzden kavram kargaşaları yerine yeni teknolojilerin kurumsal katma değerini firmaya uygulanabilirliğini ayırt etmek en doğru yaklaşım olacaktır.
Bugün kullanılan veri tabanları ve geliştirme araçları bazı çekirdek algoritmalarda farklılık gösterse bile, birbirlerine yakın ölçüm değerleri veriyorlar. Bir veritabanı bir test işleminde belli bir kritere göre en yüksek değeri verirken diğeri aynı test işleminde farklı kriterler kullanarak kendisinin en yüksek değeri verdiğini söylemekte. Önemli olan teknik personelin bu bilgileri yorumlayabilme becerisine sahip olmasıdır.Çalıştığı kurum hangi tür işlemleri daha fazla kullanıyor ? Bugün yoğun olarak kullanılan sistem gelecekte neler ihtiyaç duyacak ?
Son zamanlarda büyük mağaza ve alışveriş merkezlerinde local ya da internet müşteri bilgi formları dolduruluyor. Bazı müşterilere o mağazaların manyetik kartları veriliyor.Manyetik kartla mağazadan alışveriş yapan ya da internet üzerinden alışveriş yapan müşteri bilgisini ele geçirdikten sonra o müşterinin hangi saatte, hangi ürünü aldığını , promosyon satışlarından yararlanıp yararlanmadığı gibi bilgiler veri tabanına aktarılıyor. Aslında başlangıçta bir sayfalık form ve döküman arşiv sistemi ile başlayan bilgiler, bir anda veritabanı ve nihayet veri ambarı sistemine dönüşüyor. Eğer bu dönüşüm planlı değilse veritabanı ve sistem değişikliğinin yarattığı lisans ücreti, yazılım ve donanım maliyeti başlangıçta düşünülmeyen pahalı yatırımların yapılmasına neden olur.
Kurumsal firmaların kullandıkları veri tabanları bazen gömülü bazen de açık olmaktadır. Kuruluşun ihtiyaçlarına göre veritabanı üzerinde yeni yazılımlar geliştirmek mümkündür. Çok gelişmiş bir uygulama geliştirme aracınız olabilir ama veritabanı sisteminiz iyi değildir ya da veritabanı sisteminiz çok iyi olmasına rağmen uygulama geliştirme aracınız istediklerinizi karşılamayabilir.
1986 yılında ANSI ( American National Standart Institute) tarafından kabul edilen SQL(Structure Query Language -Yapısal Sorgulam Dili) ile tüm veri tabanları tek bir dil ile ortak sorgulanabilmesi ve belli standart sağlanması hedeflendi. İlerleyen yıllarda veritabanlari giderek daha fazla bilgiyi depolamaya başladı.Başlangıçta düşünülen veri yapılarından çok daha fazlası ile çalışıyordu ve herşey veri olarak saklanabiliyordu. Ses, resim, harita, video ,hesap tabloları gibi pek çok veri vardı ve bu verilerle uğraşmak için her veritabanının kendi özel yazılım geliştirme araçları ortaya çıktı. Bu araçlar ortaya çıkarken her ne kadar yalnızca kendi veritabanları ile değil, tüm sistemlerle uyumlu olduklarını savunsalarda, bazı istisnalar dışında her veritabanı en iyi sonucu kendi uygulama geliştirme aracında veriyordu. Sonuç olarak SQL tüm veri tabanları için ortak bir dil olmasına rağmen günümüzde yalnızca belli başlı basit sorgulamalar için kullanılmakta. Karmaşık uygulamalarda, veritabanı şirketleri kendi yazılım geliştirme araçlarını ve kendi programlama dillerini kullanmaktadır.
Veritabanlarını genel anlamda üç değişik grupta toplanabilir.Birincisi kişisel diyebileceğimiz veritabanı sitemleri. MS-Office Proffessional paketi içerisinde bulunan Access bunun dışında dBase, FoxPro, Paradox ve çok küçük de olsa Excel. Bu veritabanı sistemleri diğerleri ile karşılaştırıldığına dezavantajları olduğu tartışma götürmez. Ancak hataları nedeniyle değil kapasitelerinin yetersizliği nedeniyle böyle. Örneğin xbase tabanlı bu sistemlerde dbspace adı verilen özel bir disk bölümü yoktur ve veritabanı dosyaları geleneksel dosya yapılarıyla aynı güvenlik yapısına sahiptir. İkinci grup İlişkisel veritabanları (Relational Database) adiyla bilinen uygulamalar ve bu uygulamalar bugün ve gelecek stratejilei karşılamaktadır.İlişkisel veritabanları bilgiyi saklama, işleme, yedekleme, raporlama ve geri getirme konularında çözümler getirmektedir. Kurumsal firmaların tercihi bu sistemlerdir.Bugün bilinen popüler ilişkisel veritabanları arasında Oracle, DB2, Sysbase, Informix, Progress, Ms SQL Server bulunmakta.Veritabanı ile ilgili üçüncü ve son grup kurumların çok büyük ve boyutlu veri tabanı analizlerine dayalı gereksinimlerini karşılamak amacıyla kurduğu Veriambarı (Datawarehouse) türü teknolojilerdir. Karmaşık veriler ve bu veriler arasındaki analize dayalı teknolojiye OLAP ( On line Analytical Processing) işlemleri veriambarında kullanılmaktadır.İlişkisel veri tabanı kuruluşlarının neredeyse tamamının veri ambarı çözümü bulunmaktadır. Geleneksel anlamdaki veri ambarı projeleri yalnızca veritabanı sistemlerinin değil, donanım ve işletim sistemini de içine almaktadır. Ancak günümüze gelindiğinde tüm eğilimler, veri ambarı kavramının ortam bağımsız bir şekilde günden güne Internet e dayalı teknolojilere üzerinde çalıştığını gösteriyor.
Internet üzerinden veriye ulaşabilen, bu verileri saklayabilen , gerektiğinde istediği raporları bu veriler üzerinden alabilen kuruluşlar güçlü veri tabanı sistemlerine sahip olduklarında kurumsal yapılanmaları ve gelişmeleri çok daha hızlı olacaktır. Günümüzde güç bilgi ile , bilgi de veri ile sağlanmaktadır.Bilgi kimin elindeyse gücün de sahibinin o olması kaçınılmaz görünüyor.
VERİTABANI HAKKINDA GENEL BİLGİLER
Bilgisayar programları, seçilen bir bilgisayar dilinde, bir konu ile ilgili verilerin girildiği ve değerlendirildiği komutlar topluluğudur. Programlamayı öğrenirken bir programcının ilgilenmesi gerekli olan konuları aşağıdaki gibi sıralayabiliriz.
Girilecek verilerin yapılarını tanımlayabilmek(Veritabanı)
Kullanıcı ile irtibatı sağlayan ekranların görüntüsünü (Ekran Dizaynı) ve çıktıların şeklini (Rapor Dizaynı) tasarlayabilmek
Bu iki şık arasındaki bağlantıları gerektiren program parçalarını yazabilmek
Yeni windows tabanli nesneye yönelik programa dilleri ile yukarıda belirtilen 3 şıkkı gerçekleştirmek çok basittir.
Veritabanı tasarımı ve tanımı için, Data Dictionary hizmet programı kulllanılır.
Ekran dizaynları ve bağlantılar, SMARTOBJECTS (Programlanabilir Akilli Nesneler) tanımlama ve onları programlama işlemini gerçekleştiren APPBUILDER (Uygulama Geliştiricisi) hizmet programı ile sağlanır Çıktılar için ise REPORT BUILDER (Çıktı Formları Düzenleyicisi) kullanılır..
Yukarida belirtilen Data Dictionary, Smart Objects , AppBuilder, ReportBuilder programlari her database de aynı isimde olmayabilir.Veritabaninin ozelliklerine gore farkli isimler alabilirler , işleyişleri ve database e ulaşma mantıkları aynıdır.
Netice olarak biz; veritabanı, basit nesne ve SMARTOBJECTS kavramlarını iyi öğrenirsek buna da nesneye dayali proglama dillerin komutlarını eklersek, veritabani uzerinde programlamayı öğrenmiş oluruz.
Veritabanı
Bugün kullanılmamakla beraber, kartoteks sistemini hatırlamayan yoktur. Örneğin müşterilerimizle ilgili bilgileri, aşağıda gösterildiği gibi, kartonlar üzerine kaydederdik. Sonra da bu kartonları çekmecelerde saklardık. Siparişler ve stoklar için aynı yöntem kullanılırdı. Bunu yaşayanlar, karşılaştıkları problemleri çok iyi hatırlarlar (Müşteri bulmak, değişiklikleri yansıtmak,müşteri-stok-sipariş bağlantısını kurmak ve bunu güncelleştirmek vs.)
Müşteri Adı
Borcu
Telefonu
Ali Uyanık
50000000
345 34 34
Bilgisayarda da veritabanı zihniyetini kullanan diller bu yöntemi, tabiyatıyla problemleri ortadan kaldırarak, devam ettirmişlerdir. Fakat bilgisayarın gözü olmadığı için bir kartoteksi görerek değil, ismi ile tanıyabilir, müşteri adı için ayrılan yerin adını ve niteliğini önceden bilmesi gerekir, müşteri-stok-sipariş bağlantılarını kurabilmesi için bu bağlantıları ona önceden tanımlamak gerekir vs.. Kısaca; programcının veritabanı dediğimiz müşteri-sipariş-stok bilgilerinin nereye ve nasıl depolanacağını yani kalıbını tanımlayarak bu veriler arasındaki bağlantıları da bilgisayara bildirmesi gerekir. Bu tanımların nasıl yapıldığını az sonra göreceğiz.
Veritabanının bilgisardaki avantajları
Veritabanının bilgisayarda sağladığı avantajları sıralayalım.
Ortaklaşa kullanım : Çekmecelerdeki bir kartotekse, aynı anda iki kişinin yerlerinden kalkmadan bakabilmesi adeta olanaksızdır. Ayrıca, yoğun çalışan kişilerden bazıları iş yerlerindeki dosyaları yüklenerek evlerine taşırlar. Bilgisayar ortamında, birden fazla kişi farklı terminallerden aynı veriye erişebildiği gibi, evde çalışması gereken kişinin de dosyaları eve taşımasına gerek yoktur.
Yerden tasarruf: Kağıt, dosya, klasör gibi çok yer tutan veri depolama ortamlarını büyük ölçüde ortadan kaldırarak yerden tasarruf edilir.
Kolay güncelleştirmek: Örneğin gerçekleşen bir siparişin bilgilerini anında ve otomatik olarak stok ve müşteriye yansıtmak mümkündür.
Kolay erişim: Bir veriyi bulmak, sıralamak, istenen bilgileri ve toplamlarını yazıcıdan almak kartoteks örneği ile kıyaslanmayacak kadar kolaydır.
Emniyet: Girilen verilerin geçerliliğini kontrol etmek, bazı kişilere erişimde kısıtlamalar koymak mümkündür.
Analiz imkanı: Özellikle üretimde çok büyük bir avantajdır. Fakat maalesef genelde, bilgisayardan sadece takip ten (ne gitti, ne geldi) yararlanılmaktadır.
Relational Database ya da İlişkili(Bağlantılı) veritabanı
Müşterimizin yaptığı bir ödeme, doğal olarak müşteriyi etkiler. Kartoteks devrinde, bu ödemeyi müşterinin borcundan elle düşüyorduk. Bilgisayarda ise bunun otomatik olarak yapılması gerekir. Bunun için, müşteri bilgilerinin müşteri hareket bilgileri ile bağlantılı olarak tanımlanması gerekir. Diğer bir deyimle, veritabanımızı iyi tanımlarsak, programlamayı çok basit bir şekilde halledebiliriz.
Örneğin, tasarımı tamamlanmış bir veritabanında, aşağıdaki kısa program:
Tüm müşterileri listeler(Müşteri numarası, Unvanı)
Kullanıcının gireceği birkaç harfle başlayan müşteriyi bulur, gösterir
Bu müşteri ile ilgili tüm sipariş bilgisini gösterir(Sipariş ana bilgileri:Sipariş numarası, sipariş tarihi, gerçekleşen tarih vs.)
Bu siparişle ilgili tüm detay bilgilerini gösterir (Sipariş detay bilgileri.:Stok numarası, fiyatı, indirim oranı, miktarı, tutarı vs.)
İlişkili(bağlantılı) veritabanını tasarlamak
Bir veritabanında: müşteri, sipariş, stok vs. ile ilgili tüm bilgilerin bulunduğunu söyledik. Bu kadar çok veriyi içeren bir bütünün içerisinden istenen verileri bulabilmek ve bu verilerin birbirleri ile bağlantılarını kurmak için veritabanını oluştururken, bazı ek tanımların yapılması gerektiği açıktır.
Örneğin; sadece muşteri bilgilerine ulaşabilmemiz gerekir, müşterilerden sadece istenen bir müşteriye hızlı bir şekilde erişebilmemiz gerekir, bu müşterinin siparişlerine erişebilmemiz için bir müşteriye göre müşteri-sipariş bilgilerini ilişkilendirmemiz gerekir.
Bu sebeplerden dolayı, ilişkili bir veritabanı aşağıdaki tanımlardan oluşur:
Veri Tablosu (Table)
Sütun (Column) veya alan (Field)
Satır (Row) veya kayıt (Record)
Anahtar (Key)
İndeksler(Indexes)
Mus-adi
Borcu
Telefonu
Ali Uyanık
50000000
345 34 34
1.Satır, Kayıt (Row,Record)
2.Satır
3.Satır
4.Satır
1.Sütun,Alan (Column,Field)
2.sütun
3.Sütun
Veri Tablosu
Yukarıda gördüğümüz gibi çok basit düzeyde bir müşteri veri tablosu tasarlanmıştır. Bunun gibi sipariş, stok ve uygulamada gerekli olan diğer tablolar aynı çatı altında tasarlanarak bu uygulamanın veritabanını oluşturabiliriz.
Anahtar (Key)
Ana anahtar (Primary Key) , iç anahtar
Bağlantı anahtarı (Foreign Key), dış anahtar
Ana anahtar, bir veri tablosunda bir kaydı tamamen, ve sadece o kaydı, temsil edebilecek sütun veya sütunlardır. Belirlenen bir kaydı ve sadece onu temsil edebilmesi için tek olmalıdır. Örneğin, isme göre bir müşteriye erişmeyi düşünürsek, aynı isimli birden fazla müşteri olabileceği için, erişimde ve bağlantılarda karışıklıklar doğabilir(İstemediğimiz bir AHMETin telefonu veya siparişleri ile kaşı karşıya kalabiliriz).Bundan dolayı müşteri kayıtlarını temsil etmek için her bir müşteriye ayrı bir numara vermek uygundur.
Ana anahtarın özelliklerini aşağıdaki gibi sıralayabiliriz.
Tek olma özelliği: İki ayrı müşteri, boş bilgi dahil, aynı bilgiyi içeriyorsa, verdiğimiz anahtarın hangi müşteriyi temsil ettiğini bilemeyiz.
Değişmemesi gerekir: Bir müşteriye bir numara verdikten sonra o numarayı değiştirirsek, müşteriyi temsil eden iki ayrı numara elde ederiz.
Kısa olmalıdır: Çok yer almamalı, ayrıca ne kadar kısa olursa ona erişim daha hızlı olur.
Bu bilgilerin ışığı altında yukarıda tanımlanan musteri veri tablosu aşağıdaki şekli alır.
MUSNO
MUS-ADI
BORCU
TELEFONU
Ali Uyanık
50000000
345 34 34
Aynı şekilde stok veri tablosunda, stok numarası ana anahtar olarak tasarlanabilir.
Bağlantı anahtarı(dış anahtar), adından da anlaşılacağı gibi, veritabanındaki diğer veri tablolarıyla irtibat kurmaya yarayan bir anahtardır. Tabloları birleştirmek için de kullanılır.Bu anahtar, irtibat kurulan veri tablolarının bir tanesinin de ana anahtarıdır.
Anahtar kavramının önemini daha iyi anlamak amacıyla; Stok, Sip-Detay, Siparis ve Musteri veri tablolarının tanımlandığını varsayalım ve bu tablolar arasında bazı ilişkiler kuralım. İlişki kurarken, amaç çok önemlidir. Amaç, verilen bir maldan hangi müşteriye satış yapıldığını bulmak olsun. Bunun için, Stokà musteri ilişkisini ve dolayısıyla ara ilişkiler de dahil olmak üzere, Stok à Sip-Detay à Siparis à Musteri ilişkisini gerektiği gibi kurmamız lazımdır.
Önemli Not: İlişkiler sadece anahtarlarla kurulmayabilir. Başka metodlar da vardır.
Tablo Adı
Ana anahtar
Bağlantı Tablosu
Bağlantı anahtarı
Musteri
MusNo
Siparis
MusNo(Sipariste)
Siparis
SipNo
Sip-Detay
SipNo(Sip-detayda)
Sip-Detay
SatNo
Stok
StokNo(Sip-Detayda)
Stok
StokNo
Ana anahtarlar, bulundukları veri tablosu haricinde, bu tablo ile ilişkili tabloda da dış anahtar(bağlantı anahtarı) olarak tanımlanmalıdır.
Burada görüldüğü gibi, müşteri (Musteri) tablosunda MusNo ana anahtar olmasına karşın, bağlantı kurmak istediğimiz sipariş (Siparis ) tablosunda bağlantı anahtarı olarak tekrar tanımlanmıştır. Aynı şekilde; SipNo hem sipariş(ana anahtar) hem de Sipariş detay(dış anahtar), StokNo da hem Sipariş detay (dış anahtar) hem de Stok tablolarında (ana anahtar) olarak tekrar tanımlanmışlardır.
Basit bir örnek, bunu daha iyi açıklayacaktır. Kayak botu alan tüm müşterilerimizi görelim..
Bunun için:
Stok tablosundan kayak botunun stok numarasını buluruz(I1).
Stok ile sipariş detay tabloları ilişkili olduğu için, I1 ile ilgili sipariş numaraları (SipNo) sipariş detay tablosundan bulunur. (01 ve 04)
Sipariş detay ile sipariş, SipNo ile ilişkili olduğundan, hangi müşterilerin bu stokları aldığını bulmak için (müşteri numaraları önemli) sipariş tablosundan 01 ve 04e denk gelen müşteri numaralarını buluruz (C1 ve C3).
Müşteri tablosundan C1 ve C3ün karşılığındaki müşteri isimlerini buluruz (Kemal Öz ve Oya Şafak).
Netice olarak tabloları ilişkilendirmek için, ilişki kurulan tablolarda ortak bir alan (sütun) tanımlanacak ve bu sütun; bir tabloda ana anahtar olarak, diğerinde ise dış anahtar olarak tanımlanacaktır. Başka bir deyimle, ana anahtar olarak tanımlanan sütun (alan) diğer tabloda da tanımlanacak ve bu sütun, bu tabloda dış anahtar görevini üstlenecektir.
Indeks (index)
Bir kitabın sonundaki indeksi hepimiz biliriz. Aranan kelimeyi belirledikten sonra, indeksten bakarak hangi sayfada olduğunu bularak, o kelime ile ilgili tüm bilgileri kitaptan alabiliriz. Bir veritabanındaki indeks de buna benzer. Örneğin müşteri arama ve sıralamalarında, müşteri adını içeren sütunu indeks olarak tanımlarsak, arama çok çabuk gerçekleşir.
Bir sütuna göre indeks oluşturabileceğimiz gibi, birden fazla sütunu birleştirerek birleşik indeks adını verdiğimiz indeksler de oluşturabiliriz. Ana anahtarı içeren sütünla indeks oluşturmak, çok doğaldır(Yukarıdaki örnekte, MUSNO sütunu indeks oluşturmak için iyi bir örnek teşkil edebilir).
Her tabloda bir indeks olmalıdır. Birinci indeks her zaman tablonun ana indeksi olarak otomatik olarak tanımlanır. Örneğin, sipariş veri tablosunda SipNo ana indeks , Sip-Tarih ise tarihe göre bir indeks şeklinde tanımlanabilir.
İndeks oluşturmanın faydalarını aşağıdaki şekilde sıralayabiliriz.
Hızlı kayıt arama: Veri tablosu sıralı ise istenen bilgiye erişim daha hızlı olur.Örneğin sayfası belli olmayan bir kitapta bir bilgiyi aramak zordur.Fakat, sayfası ve aranan bilginin hangi sayfada olduğu belli olan bir kitapta arama doğal olarak kolaydır.
Kayıtların sıralanması: Tüm kayıtlar seçilen indekse göre otomatik olarak sıralanır. Örneğin, bir müşteri veri tablosunu alfabetik sırada listelemek için, müşteri ismini içeren alanın indeks olarak seçilmesi yeterlidir.
İlişkili erişim: Veritabanı içerisindeki veri tabloları birbirleri ile ilişkili oldukları takdirde, bir veri tablosundan itibaren diğer veri tablolarındaki ilgili kayıtlara erişim kolay ve hızlıdır.
Çoklu sütun: Birleştirilmiş bir indeks kullanılırsa, gruplandırma kolaylaşır. Örneğin Türkiyedeki tüm bilgisayar firmalarını içeren bir veritabanında İSTANBULun tüm semtlerindeki firmaların listesini alfabetik sırada almak için, indeksi, şehir + semte göre yapmamız yeterlidir. (Şehirler ve onun içerisinde semtler otomatik olarak alfabetik sıraya sokulurlar).
Tabloları birleştirmek: İki farklı tablodan bir çıktı alınacaksa, ortak sütunu indeks olarak tanımlamak faydalıdır.
Tabloları ilişkilendirmek: Bir tablodaki bir sütun değeri ile diğer bir tablodaki bir kayda (satıra) erişilebiliyorsa, bu iki tablo ilişkilidir. İkinci tablodaki aramnın hızlı olması için, aranan değere göre indeksli olması arzulanan bir durumdur.
NOT: İki tablo arasındaki ilişkiyi kuran sütunların aynı ismi taşıması gerekmez.
İndeks oluşturmanın bazı zararları da vardır.
Her bir indeks için, diskte bir yer ayırımı yapılır. İndeksin değeri ve bu değeri içeren kayıt numarası ROWID, ağaç yapısını andıran biçimde diskte depolanır. İndeks bölümünden, aranan indekse denk gelen kayıt numarası bulunduktan sonra, bu kayıt numarasını içeren kayıt ana dosyadan bulunur.
Yeni bir kayıt eklendiği veya bir kayıt silindiği zaman, ilişkisel veritabanı indeks bölümünü otomatik olarak yeniden düzenlediği için bir zaman kaybına neden olur.
Ne zaman indeks kullanmalıyız ? sorusu aklımıza gelebilir.
Sıkça silme veya ilave yapılan küçük tablolarda indeks kullanmamalıyız; sıralama yapmalıyız.
Veri aramada, aranan veri oranı tüm verilere oranla büyükse, indeks kullanma yerine sıradan arama yaptırmalıyız(Örneğin, arama neticesinde 20 000 kayıttan 19 000 kayıt bulunacaksa sıradan arama, 20 000 kayıttan 100-200 kayıt bulunacaksa indeks kullanımı tercih edilmelidir).
NOT: Tüm ilşkisel veritabanı sistemleri işletim sistemine göre 1024, 2048, 4096, 8192 bytelık bloklara ayrılmıştır. Veri erişiminde, sadece bulunan kayıdı içeren blok diğer kullanıcılara kapalıdır(Genelde, diğer dillerde erişim şekline bağlı olarak tüm indeks dosyası kilitlenerek, o anda diğer kullanıcılara kapalıdır).
Hatalı tasarım örnekleri:
MusNo
İsim
Sehir
SipNo
101
Kemal Öz
İSTANBUL
M31, M98, M129
102
Ali Kara
İSTANBUL.
M56
103
Oya Şafak
ANKARA.
M37, M40
104
Filiz Sarı
BURSA.
M41
Doğrusu: Müşteri ana tablosu ve bu müşteri ile ilgili sipariş hareketlerini ayrı ayrı tablolar şeklinde düzenlemektir.
Müşteri tablosu
MusNo
İsim
Sehir
101
Kemal Öz
İSTANBUL
102
Ali Kara
İSTANBUL.
103
Oya Şafak
ANKARA.
104
Filiz Sarı
BURSA.
Sipariş tablosu
SipNo(Ana anahtar)
MusNo (Dış, bağlantı anahtarı)
M31
101
M98
101
M129
101
M56
102
M37
103
M140
103
M41
104
Not: Aynı mantıkla, tüm bilgileri bir dosyada toplamak yerine, güncel değişmeyen bilgileri içeren bir ana bilgi dosyası ve güncel değişen hareket dosyası oluşturmak ve ikisini bağlayan bir anahtar kullanmak en doğal tasarım şeklidir.
Veri tasarımı için pratikte izlenen yol
Kağıt üzerinde veya akıldan:
Uygulamada gerekli olan veriler ortaya dökülür
Bu verilerin veri tablosu şeklinde, paylaşımları tasarlanır (Tablo adedi ortaya dökülür)
Veri tabloları arasındaki bağlantılar tasarlanır
Veri tablolarının kalıbı tasarlanır
Her bir tablo için ana anahtar ve gerekiyorsa, her bir alan için geçerlilik kuralları tasarlanır
Bu aşamadan sonra, veri yapısının daha ayrıntılı tasarımına geçilir.
Ortak kullanılan veriler hangileridir?
İndeks, hangi sütuna göre seçilecek?
Optimizasyon (En verimli durum) nasıl sağlanır?
Performans için, yapı değişikliği gerekir mi? (Örneğin, KDV her zaman miktar ve KDV oranından hesaplanabilir. Normalde, tabloda KDV sütunu açmaya gerek yoktur.Fakat KDV miktarının sıkça istendiği bir şirkette, her defasında, KDVyi yeniden hesaplatmak performansı düşüreceği için KDV sütunu tabloya eklemek daha mantıklıdır)
Bu bilgilerin işiği altında veritabanını oluşturmadan önce; hangi veriler girilecek, veriler bağlantılı olarak nasıl işlenecek ve hangi raporlar alınacak sorularına yanıtlar verebileceğimiz bir veritabanı kalıbının hazırlanması gerektiğini aklımızdan asla çıkarmamalıyız. Veritabanlari sistemlere install edildiğinde içlerinde ilişkisel veritabanının özelliklerini sağlayan küçük bir prototip bulunmaktadir. Örnek standart ilişkisel veritabani genellikle müşteri, sipariş ve sipariş detay gibi table lar içerir.. Bu veritabanında maçlananlardan bazılarını şu şekilde sıralayabiliriz.
Müşteri, sipariş ve stok bilgi girişlerinin sağlanması.
Kayıt eklemek, silmek ve değiştirmek
Müşteri adreslerini şehir koduna göre sıratmak
Bakiyesi belirli bir miktarı geçen müşterileri alfabetik sıraya göre listelemek
Bir bölgedeki müşterilerin belirli bir tarihe kadar, tüm senelik satiş ve borçlarının listelerini alabilmek
Verilen bir stokla ilgili tüm siparişleri görebilmek
Stoklarımızın son durumlarını görebilmek. Gerekiyorsa, sipariş vermek.
Satılan malların satış tutarlarını gözleyebilmek
Müşterilerimizle ilgili borç alacak takibini yapabilmek
Müşterilerimizle ilgili sipariş bilgilerini gözleyebilmek
Veritabanının özelliğine göre diğer seçenekler
HTML (HyperText Markup Language)
HTML Nedir?
HTML (HyperText Markup Language / Hareketli-Metin İşaretleme Dili) basitçe, browserlarla görebileceğimiz, internet dökümanları oluşturmaya yarayan bir çeşit dildir. Örneğin okuduğunuz bu sayfa HTML dili kullanılarak hazırlandı. Siz de browser’ınızı (Internet Explorer, Netscape Navigator,..) kullanarak bu sayfayı ekranınızda görüntülüyorsunuz. Tanımda geçen “internet dökümanı” ifadesinin yanısıra HTML ile oluşturduğunuz belgeleri harddiskinize kaydedebilir ve internet bağlantınız olmasa bile bu belgeleri görüntüleyebilirsiniz.
HTML, programlama dilleri (pascal, basic,..) gibi bir programlama mantığı taşımadığından öğrenilmesi gayet kolay bir dildir. Dilden ziyade kabaca metinleri ya da verileri biçimlendirmek, düzenlemek için kullandığımız komutlar dizisi bile diyebiliriz HTML için.
HTML’de Temel Unsurlar
HTML nispeten kolay bir dildir dedik. Bu dilde binary veya hexadecimal kodlar yok. Herşey metin tabanlı ve bir HTML dökümanı oluşturmak için ihtiyacınız olan şey bir editör. Hatta sizde herhangi bir HTML editörü bulunmuyorsa bu işi Windows’un Notepad’i ile dahi halledebilirsiniz. Piyasada iki tip editör bulunuyor. Birisi metin tabanlı, kod yazmayı gerektiren fakat bunun yanısıra rutin bazı işlemleri kolaylaştıran editörler (HotDog, HomeSite..) diğeri WYSIWYG (What You See Is What You Get / Ne görürsen onu alırsın) tarzı denen kısaca görsel, kodlamayla uğraştırmayı gerektirmeyen editörler (FrontPage, Dreamweaver, NetObjects Fusion,..). Benim yeni başlayanlara tavsiyem Windows’un Notepad’i. Bu işlerin nasıl yapıldığını öğrendikçe ilerde siz de görsel editörlere geçebilirsiniz. Çünkü bir yerde istenmedik sonuçlar çıkabilir ve kodlara müdahele etmeniz gerekebilir. Üstelik görsel editörler bazen istenmeyen kodlar ekliyorlar, bu da döküman boyutunun büyümesi demek.
Burada şunu da belirtmek gerekiyor; browserlar arasındaki yorum farklarından dolayı sayfanız bir browser’da iyi görünürken bir başka browser’da hiç istemediğiniz bir şekilde görüntülenebilir. Hele yeni bazı teknikleri (css, dhtml gibi) sadece MS Internet Explorer 4 ve üstü desteklerken Netscape henüz bu teknikleri tam olarak desteklemiyor. Yine de piyasayı neredeyse yarı yarıya paylaşan bu iki browser’ın birbirlerine üstün olduğu yönleri var. Sonuçta, ne kadar fiyakalı bir sayfa da yapsanız elde ettiğiniz başarı sayfanızı ziyaret eden kişinin kullandığı browser’a mahkum. Hatta ziyaretçiniz browser’ına verdiği bir talimatla “yalnız şu fontu kullan”, “grafikleri görüntüleme” şeklinde bir ayar yapmışsa emekleriniz boşa gitti demektir. Yine de bu kadar karamsar olmayalım.
İlk sayfam
İşte ilk HTML sayfamızı yapıyoruz.
Öncelikle çalışmalarınızı saklamak için kullanacağınız boş bir klasör oluşturup uygun bir ad verin, mesela html_ders olsun. Daha sonra bu ad bize lazım olacağından kolaylık olması için siz de yeni klasöre bu adı verebilirsiniz.
Şimdi de bu klasörü açıp yeni bir metin belgesi oluşturun (sağ fare/Yeni/Metin belgesi).
Dosyayı çift tıklayarak açın ve şunları yazın:
Sayfama Hoşgeldiniz