Algoritma, yazılım ve veritabanı kavramlarına giriş
#1
Merhabalar;
Aşağıda göreceğiniz Algoritma, yazılım ve veritabanı kavramı hakkındaki makaleler, büyük üstat Türkay ÜRKMEZ'DEN alıntıdır.. Kendisinin sitesine de uğramanızı tavsiye derim..

http://www.turkayurkmez.com/


Programcılık ? yani yazılım ? olaya dışarıdan bakan birçok kişi için asosyal bir meslek gibi gözükmesine rağmen aslına bakarsanız; programcılığın, kod yazmanın bir aşk olduğunu görürsünüz. Ve bu aşkın en büyük sebebi ise, o yazılan programın iskeletini oluşturan algoritmadır.

Peki ama nedir bu algoritma ? Bu kadar övülmeye değer mi gerçekten ? Neden bir aşk gibi heyecan verici ve eğlencelidir? Ve en önemlisi neden bu kadar önemlidir ?

Sanırım çocukluğunda, Tom ve Jerry? i sevmeyen yoktur. Özellikle, Tom? un Jerry? i yakalamak için kurduğu, şu ciddi zeka gerektiren tuzakları herkes hatırlar.

Örneğin; Tom, bilardo ıslakası ile, bilardo topuna vurarak düzeneği başlatır. Top yuvarlanarak masanın sonunda, kaldıraç işlevini gören bir tahtaya çarparak düşürür. Tam tahtanın düşmesiyle birlikte bir bowling topu yuvarlanmaya başlar ve tam hızla bir davula çarpar. Davuldan gelen ses titreşimleri, birkaç bir şeyi tetikler ve sonunda bir ağ jerry? nin üzerine düşmek üzere serbest kalır. Gerçi çoğu zaman Jerry kurtulur. Ama bu konumuzun dışında J

Böyle bir düzeneğin çalışmasını izlemek oldukça eğlencelidir. Peki böyle bir düzeneği inşa etmek ? Eğer bunun da çok eğlenceli olacağını düşünüyorsanız, emin olun iyi bir programcı olabilirsiniz demektir. Çünkü iyi bir program, hedefe ulaşmak için tasarlanmış sağlam bir algoritma üzerine kurulmuştur.

Algoritma kavramını irdelemek için, biraz kafamızı bilgisayarların ve sanal hayatın dışına uzatıp, evrenin ve hayatın kendisine bakalım. Tamam, belki bir algoritma fanatiği olarak iddialı bir cümle olacak ama şunu rahatlıkla söyleyebilirim ki; ?Hayat ve Doğa?da bile algoritma vardır.?

Evet.. Bilinen en klasik felsefeye göre hayat bir neden ? sonuç bütünüdür. İnanmazsanız gelin Şişman Adam?ın (ki o ben oluyorum) her sabah tekrar eden algoritmik yaşamına bir bakın:

Saat 07.30 Saat çalar.. Şişman Adam uyanır ve ?beş Dakka daha uyuyayım? diyerek mırıldanır. Genellikle yirmi dakika uyur ve aniden yataktan fırlar çünkü işe geç kalmak üzeredir. Hemen mutfağa koşar kendine bir şeyler hazırlar ve kahvaltı yapmaya başlar.. Yer,yer, yer, yer doymuş mudur ? HAYIR ! Yine yer, yer, yer, doymuş mudur ? Yine hayır... Tam o sırada beyni, ?işe geç kaldığını? söyler ve maalesef doymadan kalkar. İşe gitmek üzere yola koyulur. Çıktığında üç olasılık vardır; a.) Otobüs, b) Tren, c)Dolmuş birini seçmek zorundadır. Bunun içinse saatine bakar ve şu şekilde düşünür:

Eğer saat 07.50 ise trenle gider.

Eğer saat 08.00 ise otobüs?

Eğer saat 08.05 ise dolmuş?

Çünkü; hedefi zamanında işte olmaktır.

Tüm bu söylediklerimiz üzerine algoritma kavramını bir inceleyelim..

İyi bir Algoritma ;

* Hedef
* Koşullar
* Parametreler

Olarak sayabileceğimiz öğelerden oluşan bir kavramdır. Eğer bu öğeleri sorunsuz bir şekilde tamamlayıp, birleştirirseniz algoritmanızı tamamlamışsınız demektir.

Hedef, zaten belirli bir ihtiyaç analizi süreci sonrasında oluşturacağınız bir kavram, Diğer iki öğe ise bu hedefin nasıl, ne şekilde gerçekleşeceği üzerine yoğunlaşır.

Bana kalırsa, bu noktada en önemli öğe, ?koşul? öğesidir. Hedefine kilitlenmiş bir algoritmanın temelinde, koşul kavramı yatmaktadır. Hatta işin en eğlenceli kısmıdır diyebilirim. Şişman Adam?ın algoritmasında, tüm koşullar ?işe zamanında gitmek? hedefi üzerine şekilleniyor. O nedenle; uykusunu alamasa da, kahvaltıda karnını doyuramasa da hedefini gerçekleştirmek üzere, tek bir parametre yani saatin kaç olduğuna bakarak hareketine karar veriyor?

İşte bir bilgisayar programının çalışma algoritması da böyledir. Söz yine programa gelmişken şunu söyleyebiliriz?

Eğer program bir canlı olarak düşünülürse, programcı onun ebeveynidir. Büyüyünce ne olacağını (hedefi), hayata dair bilgileri (parametreleri) ve onları nasıl kullanacağını (koşullar) ona ebeveyni öğretir.

Eh.. Artık onun neden bir aşk olduğunu ve önemli bir aşk olduğunu sanırım daha net anlamışsınızdır. Bu yazı da size keyifli gelmişse, mutlaka bir programlama dilini öğrenmeye başlayın derim. İyi çalışmalar.


Daha önceki makalemizde belirttiğimiz gibi, programcılık, hayatın kendisidir. Bu nedenle, Şişman Adam üzerinden kavramları incelemeye devam edeceğiz.

Şişman adam; hareketlerine, yapacağı işlere nasıl karar verir ? Mutlaka ve mutlaka, herkes de olduğu gibi onun da bir karar mekanizması var ve bu mekanizma temel olarak neden ? sonuç ilişkisine dayanır. Bu ilişkideki ?nedensellik? ise en temelde var ? yok ya da evet ? hayır değerleri taşır. Efendim ? Elektronikteki gibi mi dediniz ?

Daha ötesine bakın lütfen... İnsanlardaki gibi desek çok mu abartmış oluruz ? Şu sözü, bir elektronik aygıt mı söyledi yoksa; ?Olmak ya da olmamak...? ? Evet insan düşüncesi de bu temel ilke ile karar veriyor: Herhangi bir eylemin gerçekleşip gerçekleşmediğine bakmak... Programcılıktaki adıyla; ?True? ya da ?False? olup olmadığına...

Şişman Adam?ın, bu konudaki örneklerine bir bakalım isterseniz...

Adamımız; günlerden birgün, yalnızlığa canının tak ettiğini düşünür ve biraz rahatlamak için (!) Bara gider. Barda meyve suyunu yudumlarken karşısındaki bayandan etkilendiğini hisseder. O anda ? farketmese de ? beyni şu şekilde düşünür:

EĞER karşıdaki bayan sana bakıyorsa

Git onunla konuş.

DEĞİLSE

Kısmet değilmiş.

KARAR VERİLDİ

Bu yapıyı VB.NET?e çevirirsek:

IF bayanbakıyormu = true THEN

MessageBox.Show("Git Konuş")

ELSE

MessageBox.Show("Kısmet Değilmiş")

END IF

İşte sevgili yazılım dostları, tüm yazılım dilleri için bel kemiği olan ?Karar yapıları? na temel bir giriş yaptık. Ancak tabii ki olay bu kadar değil. Olayı çok da uzatmadan Şişman Adam?a geri dönelim.

Şişman Adam?ın ayda bir kere psikolog bir arkadaşına gidip danışma gibi bir özelliği var. Şimdi size bu son görüşmeden kısa bir konuşmayı aktaralım.

?Her şey dokuz yaşımdayken başladı dostum... Kahvedeki o yaşlı amca beni o kadar yıpratmıştı ki, hala hatırladıkça tüylerim diken diken oluyor:

O gün, mahallede arkadaşlarımla oyun oynuyorduk. Birden kahvenin önünde oturan yaşlı bir adam yanıma geldi ve elinde tuttuğu boş Uzun Samsun paketini bana göstererek şu aşağıdaki cümleyi kurdu:

EĞER bu sigara varsa

Bu sigaradan al

YOKSA EĞER Kısa Samsun varsa

Onu Al

YOKSA EĞER Uzun Maltepe varsa

Onu Al

YOKSA EĞER Kısa Maltepe varsa

Onu Al

O KADAR

Bu cümleyi unutamadım dostum....?

Evet Şişman Adam?ın bu garip anısının tabii ki, VB.NET ile bir bağlantısı var. Yukarıdaki cümlenin aynısını bakın VB.NET dilinde nasıl yazıyoruz:

IF uzunsamsunvarmi = true THEN

Messagebox.Show(?Uzun Samsun Al?)

ELSE IF kisasamsunvarmi = true THEN

Messagebox.Show(?Kısa Samsun Al?)

ELSE IF uzunmaltepevarmi = true THEN

Messagebox.Show(?Uzun Maltepe Al?)

ELSE IF kisamaltepevarmi = true THEN

Messagebox.Show(?Kısa Maltepe Al?)

END IF

Sanırım farketmişsinizdir, şimdiye kadar karar yapılarını sadece bir eylemin sonucuna göre kullandık. Oysa ki, normal bir insan çoğu zaman, karar verirken birbirinden farklı birkaç eylemin sonucuna bakmaktadır...

Örneğin Şişman Adam, ÖSS?de barajı geçip de, sıra tercih aşamasına geldiğinde şöyle düşünmüştü:

?EGER puanım bu bölüme yetiyorsa VE bu bölümde okumak beni mutlu edecekse

Yazarım....

KARAR VERİLDİ.

Ya da daha spesifik bir örneği Şişman Adam?ın anılarından aktaralım:

Şişman Adam, katıldığı bir nikah töreninde şöyle bir gözlem yapmış:

Damat ve Gelin, nikah memurunun huzuruna çıktıkları anda, hayatları boyunca unutamayacakları en güzel ?evet? i diyeceklerini biliyorlardı. Ve yine bildikleri birşey vardı ki; içlerinden birinin ?hayır? demesi durumunda, bu evlilik gerçekleşmeyecekti.

Yani bir cümleyle şöyle özetlenebilir bu durum:

EĞER Damat ?evet? der VE Gelin de ?evet? derse

Evlenirler.

DEĞİLSE (İçlerinden biri hayır derse)

Evlenemezler

BUDUR.

İşte bu cümlede VB.NET? de kullanılan AND operatörünü anlamamıza olanak sağlayacaktır.

IF Damat = ?Evet? AND Gelin = ?Evet? THEN

MessageBox.Show(?Evlenirler?)

ELSE

MessageBox.Show(?Evlenemezler?)

END IF

Normal hayattaki kararlara geri dönelim...

Zaman zaman, öyle durumlar oluşur ki; karar vermeniz için iki eylemden birinin gerçekleşmesi yeterli olur. İşte bu durumda da VB.NET tarafında ?VEYA? anlamına gelen OR kullanırız...

IF Gun = ?Cumartesi? OR Gun = ?Pazar? THEN

MessageBox.Show(?Hafta Sonu?)

ELSE

MessageBox.Show(?Hafta İçi?)

END IF

Peki... her eylemin bir sonucu mu vardır şu hayatta ? Hayır tabii ki... Bazen, eylemin gerçekleşme şekline göre birden fazla sonuca kendinizi hazırlayıp ona göre karar vermeniz gerekir.

Bunun örneğini bakalım Şişman Adam nasıl veriyor...

Şişman Adam, paranoyak bir adam olduğu için, araba kullanırken ışıklara gelmeden neredeyse bir kilometre önceden aşağıdaki gibi düşünür...

Işıklara Ulaştığında

Işık Kırmızı ise

Duracak

Işık Sarı ise

Bekleyecek

Işık Yeşil ise

Geçecek

Bitti

İşte sevgili Şişman Adam fanatikleri...

Bu tarz bir karar mekanizmasını VB.NET ?de select case yapısını kullanarak yapıyoruz

SELECT CASE isiklar

Case is ?Kırmızı?

MessageBox.Show(?Dur?)

Case is ?Sarı?

MessageBox.Show(?Bekle?)

Case is ?Yeşil?

MessageBox.Show(?Geç?)

END SELECT

Gördüğünüz gibi dostlar... Programcılığı hayatın temellerinden ayıramayacağınızı bir kez daha gösterdik.

Şunu asla unutma ey sevgili okur... Burada olduğunuz sürece şişman adam maceralarına devam edecek.

Hepinize sağlam algoritmalı kodlar diliyorum...





Hayatın tüm anlarının, yazılımda bir karşılığı olduğunu artık anladınız biliyorum... Ama, durmayacak bu şişman adam ! Koşacak ve zayıflamayacak ! : )

Şimdi sevgili dostlar... Üçüncü makalemizde, şişman adamımız bizi döngülerin içine atıyor. Bakalım neler olacak...

Öncelikle, döngünün ne anlama geldiği hakkında biraz beyin fırtınası yaşayalım. Çoğu aksiyon filminde klişeleşmiş bir replik vardır : ?Zamanı geldiğinde harekete geçeceğiz.. Saatlerimizi ayarlayalım.? Bu repliği söyleyen arkadaş, koşul olarak kendisine zamanı seçiyor ve bu koşul gerçekleştiği an, eyleme geçiyor..

Biz yine buradaki ?koşul? kavramının felsefesine bir inelim. İnsan, her türlü hareketine ? yaşamının devam etmesi için zorunlu olanlar da dahil ? koşullar aracılığı ile karar verir. Zaman da, insanların icad ettiği koşullardan biridir bu durumda...

Peki.. Beklenen koşul gerçekleşmediğinde ne yapar ? Buna verilecek en temel yanıt, ?koşulun gerçekleşmesini bekler? olacaktır öyle değil mi ? Koşul gerçekleştiği anda ise, zafer onun olacak ve eylemine başlayacaktır. İşte tüm bu sürece biz, programcılıkta ?döngü? adını veriyoruz..

Bu kadar felsefi giriş yeter, Şişman Adam?a dönelim.. Bakalım o bize bunu nasıl anlatacak ?

Bizim Şişman Adam, bir zamanlar bir bankada yöneticilik yapıyordu. Kahramanımız, pek de otoriter biri sayılmaz ama, stratejist biri olduğu rahatlıkla söylenebilir. Günlerden birgün, mesai saatinin bitiminden yaklaşık bir saat önce, acilen bir yere gitmesi gerekir.

Bankadan çıkmadan önce, yaklaşık elli kişilik bir kuyruğun, bir banka memurunun önünde biriktiğini görür. Memurun yanına giderek şöyle der :

İşin bitmesi İÇİN Birinci kişiden başla, ellinci kişiye kadar birer birer git

Bir kişinin işini hallet

Sıradakini çağır.

Memur bu durumdan ne kadar memnun bilmiyorum ama yukarıdaki cümle sanki bir For Next döngüsünü çağrıştırıyor:

FOR kisi as integer = 1 to 50 Step 1

MessageBox.Show (kisi & ?. Kişinin işi yapıldı?)

NEXT

Bakın bir For...Next döngüsü için en temel parametreler karşımıza çıktı. Bunlar;

* Başlangıç Noktası
* Bitiş Noktası
* Başlangıç?tan Bitiş?e hangi adımlarla gideceği...

Buradaki, örnek lütfen sizi yanıltmasın... Örnekte; başlangıç noktası minimum, bitiş noktası maksimum (1 to 50) artış değeri ise 1 (step 1) olarak belirtiliyor. Ancak bu bir zorunluluk deği. Yani maksimumdan minimuma da For..Next döngüsü kurmak mümkün. Fakat bu durumda STEP -1 olarak verilmelidir.

FOR kisi as integer = 50 to 1 Step -1

MessageBox.Show (kisi & ?. Kişinin işi yapıldı?)

NEXT

Bakınız sevgili dostlar, For...Next döngüsü çalışırken üç tane zorunlu parametre sahibiyiz. Ancak, hayatımızdaki koşulların gerçekleşme süreçleri (döngüler) her zaman böyle spesifik parametrlerden oluşmazlar. Her ne kadar yurdum insanı, sorulan adrese hep ?100 metre ilerde solda? dese de, genelde spesifik bir değerden (50 kişi gibi) bir çırpıda bahsetmemiz pek olası değildir. Tabii Yağmur Adam gibi değilseniz...

Durum böyle olunca işin içine, spesifik parametre içermeyen; yalnızca, koşulun gerçekleşip gerçekleşmeme durumuna göre hareket eden bir döngü mekanizmasına ihtiyaç duyulur...

Ya tamam biliyorum biliyorum çok resmi gidiyor bu yazı... Hani şimdi Şişman Adam fanatikleri hafiften ?kısa kes beaaa, ben şişman adamı arıyorum? diyor olabilir. Tamam canım hemen sözü bizim Şişman Adam?a bırakıyorum...

Şişman Adam, akşamları eve trenle dönmeyi tercih ediyor genelde. Söğütlüçeşme tren istasyonundan bindiği banliyö treninden Atalar istasyonunda iniyor ve ulaşımında tren ya da otobüs kullanan çoğu insan gibi arada kaç tane istasyon olduğunu hiç bilmiyor.

Yani şişman adamın bilinci, trene bindikten sonra şöyle işliyor:

? Trenin durduğu istasyon Atalar?dan farklı olduğu SÜRECE

Trende Kal

Tren sonraki istasyona devam etsin

?

Bu ifadede görüldüğü gibi, spesifik olan tek şey, koşulun kendisi yani, tren istasyonunun Şişman Adam?ın ineceği durak olan Atalar?dan farklı olması.

Bu durumu bakın VB.NET?e nasıl çeviriyoruz

While istasyon <> ?Atalar?

Trende Kal

Sonraki istasyona git

End While

Bu kadar basit !!!

Şimdi sevgili dostlar... Programcılık aleminin ve VB.NET? in en sağlam döngüsü olan FOR EACH döngüsünü tamamen Şişman Adam?ın tombul ellerine bırakıyorum...

Şişman Adam, yalnız yaşayan bir adam. Yo yanlış anlamayın, asosyal olduğundan falan değil, evi o kadar dağınık ki, hiç kimse onunla yaşamaya tahammül edemiyor. Tabii her kahramanda olduğu gibi, bizim şişman adamın da duygusal bir yönü var. Gel gelelim bu duygusal taraf geçen günlerde dank etti ve adamımız bundan sonra temiz bir adam olacağına söz verdi.

Hemen evi temizlemek için bir algoritma düşündü... Düşündü... Ve aşağıdaki cümleyi kurdu :

Odanın içindeki herbir eşya için

Eşyanın tozunu al.

Sıradaki eşyaya geç.

Sonra da bunu günlüğüne aşağıdaki gibi geçirdi:

For Each esya in oda

MessageBox.Show (esya & ??nın tozu alındı?)

Next

Mükemmel bir döngü ! Kral bir döngü !!!

Sevgili algoritma aşıkları ! Döngülerde sık karşılaşılan bir mantıksal hataya karşı hepinizi uyarmak Şişman Adam?ın boynunun borcudur. Bu mantıksal hatanın adı : ?Sınırsız Döngü? dür. Ve yazılımcılar arasında, ?sınırsız döngülere giresice? diye bir takılma bile söz konusudur.

Makalenin başında belirttiğimiz döngü tanımına gönderme yaparak diyebiliriz ki; ?gerçekleşmesi mümkün olmayan bir koşula yönelik oluşturulan döngü, sınırsız döngüdür.?

Nasıl yani ? Şöyle yani... ?Kırmızı kar yağdığında, seninle evleneceğim? derseniz birine, yüzünüze tokadı yiyeceğiniz aşikardır. Çünkü, bu bir sınırsız döngüdür.

Örneğin For...Next döngüsünde anlatılan ikinci örneği sınırsız döngüye sokalım:

FOR kisi as integer = 50 to 1 Step 1

MessageBox.Show (kisi & ?. Kişinin işi yapıldı?)

NEXT

Dikkat !! 50?den başlan kisi degiskeni, 1?er 1?er ARTARAK 1? ulaşmaya çalışıyor ! 30 Şubat?da buluşuruz demek gibi birşey bu !!

Amman dikkat derim !

Evet sevgili dostlar... Şişman adam, bu maceranın da sonuna bu şekilde geldi. Bir sonraki makalede görüşmek üzere...

Şişman Adam?ın bir yenisi gelene kadar sınırsız döngüye girmemeniz temennisiyle...





Sevgili dostlarım; eğer bu maceraların takipçisiyseniz; yazılımın, hayatın tam içinden olduğunu biliyorsunuz demektir ve eğer bunun bilincindeyseniz; benden de böyle bir yazım tarzı bekliyorsunuz demektir?

Ama söz konusu Veritabanı olunca?

Ya? Heyecanlanmayın tamam? Şaka yaptım sadece ?Ama? sı falan yok? Veri tabanı da, hayatımızın içinden bir kavram?

Şöyle düşünün arkadaşlar (bu tarzı yemin ederim çok özlemişim.) Günlük hayatımızda, doğumumuzdan ölüme kadar olan süreç içersinde tüm yaşamsal ihtiyaçlarımızı karşılamamızda yardımcı olan en önemli şey nedir sizce? Hadi canım dürüst olun! ?Para? dır. Öyle değil mi?

Peki sizler günlük hayatınızda bu paraya sürekli ulaşabilmeniz, üzerinde işlem yapabilmeniz ve paranın güvenliğini sağlamak için ne yaparsınız? Sıralayalım:

* Anneme veririm, annemden alırım.
* Yastığımın içine koyarım.
* Testiye koyup bahçeme gömerim
* Bankaya yatırırım ve böylece internet, telefon gibi iletişim cihazlarını kullanarak parama istediğim zaman erişir, üzerinde işlem yapabilirim. Hem de güvenli olur.

Buradaki durumda; ?en hızlı ve güvenilir? olanı seçersek; bu seçenek hiç şüphesiz ki; ?Banka? olacaktır.

İşte sevgili dostlarım; günlük hayatımızdaki paranın yerini, yazılım hayatında ?veri? almaktadır. Bankanın yerini ise Veritabanı?

O zaman Yukarıda yer alan son maddeyi buna göre tekrarlayalım

?Veritabanını kullanarak verime istediğim zaman erişir, üzerinde işlem yapabilirim. Hem de güvenli olur? (yo hayır tabii ki copy-paste yapmadım ellerimle yazdım).

Arkadaşlar, üzerinde önemle duruyorum ki, veritabanına kavramına hakim olmak ve ona hak ettiği ehemmiyeti vermek çok önemli. Lütfen ve lütfen veri tabanı bilmeden yazılım konusunda çok fazla yol kat edilemeyeceğinin bilincinde olalım?

Bu benden beklenmeyen ciddi uyarıdan sonra, hayattaki örneklerimize geri dönelim?

Dostlarım; mademki, veriyi para ile bir tutuyoruz, bu yoldan hareketle şunu söyleyebiliriz, önemli olan parayı BİRİKTİRMEK değil YÖNETMEK? tir. Yoksa efenim enflasyonu var, devalüasyonu var? Risk yönetimini ciddiye almak lazım.

Yatırım yönetimi konusunda tecrübeli insanlardan öğrendiğim kadarıyla; paranın birbiriyle ilişkili olacak şekilde birden farklı yatırım kanallarına bölünerek değerlendirilmesi çok daha iyiymiş. Ama burada önemli olan kriter, yatırım kanallarının çok olması DEĞİL, ilişkilerinin sağlıklı olmasıymış?

Devam etmek isterim ama, konumuz SQL değil mi? Mademki veri eşittir para, o zaman acaba yatırımcı ağabeylerin / ablaların sözlerini veritabanında da kullanabilir miyiz ?

Evet, aslında sevgili dostlarım iki paragraf önce, ilişkisel veritabanı yönetimi sistemi ? Relational DataBase Management System (RDBMS) kavramına girmiş oldunuz. Yazılım dünyasına hayırlı ve uğurlu olsun.

Evet arkadaşlar, veritabanındaki yatırım araçlarımız ise tablolarımızdır. Tablolar arası kurulan ilişkiler aracılığıyla; verinize güvenilir ve hızlı erişir ve aynı oranda güncelleyebilirsiniz? İşte bu, verileri tablolara bölme ve tabloları birbiriyle ilişkilendirme yöntemlerine de normalizasyon adı verilir.

Dostlarım, tecrübeli yatırımcılar nasıl tecrübelerini diğer yatırımcılara aktarıyorlarsa, RDBMS kavramına yılların emeğini vermiş insanlar da bizlere öyle aktarıyorlar modelleme yöntemlerini? Normalizasyon kavramı da aslında bu tarz önerilerin bir manifestosudur. Söz gelimi; Excel?de oluşturulmuş bir belge de veri tabanı olarak düşünülebilir ancak ?hmm bak böyle yaparsan daha iyi olur? der bize normalizasyon?

Bir veritabanının normalizasyonunu oluştururken başlangıç olarak ?amaçladığınız sonuç? a karar vermelisiniz dostlar. Yani elinizdeki verinin olabilecek en detaylı çıktısını örnekleyerek yola çıkarsınız.

Hadi eğlence başlasın o zaman

Senaryomuz bir telefonla pazarlama şirketi üzerinden olsun. Bu şirketin, nasıl çalıştığını kaba taslak bir çizelim önce?

Şirketimiz birkaç kategoriden oluşan ve birkaç farklı tedarikçinin sağladığı ürünleri, kayıtlı müşterilerine ulaştırmaktadır. Satılan ürünler, anlaşmalı kargo şirketleri tarafından müşterilere ulaştırılmaktadır. Bu arada, şirketin çalışanları sattıkları ürünlere belli oranlarda prim alırlar. Bu durumda söz konusu şirket için sipariş verilerinin tutulması çok büyük önem taşımaktadır.

Bu paragraf, bazı şeylerin kafamızda canlanması için yeterli sanırım. Bakınız bazı kelimelerin üzerinden geçelim ve daha dikkatli olalım

* birkaç kategoriden oluşan
* farklı tedarikçinin sağladığı
* ürünleri
* kayıtlı müşterilerine
* anlaşmalı kargo şirketleri
* çalışanları
* sipariş

(Bu sefer copy ? paste yaptım. İtiraf ediyorum).

İstediğimiz en detaylı veri çıktısı ise aşağıdaki gibi olsun:


Sipariş No.........1
Müşteri Adı....... Ayhan Çalışkan
SiparişTarihi...... 07.01.2007
Gönd.Gereken T. 14.01.2007
Kargo Tarihi...... 10.01.2007
Kargo Ücreti..... 100 YTL
Alınan Ürün...... Plazma TV
Ürün Kategorisi. Elektronik
Ürün Adedi 1
Sipariş Toplam 2500 YTL


Şimdi? Biraz kendimizi zorlayalım ve bazı sorular soralım:

1. Böyle bir veriyi en hızlı ve en güvenli şekilde nasıl elde ederim
2. Bu veriden daha farklı olarak nasıl veriler üretilebilir ?

İkinci sorumuzdan başlayalım.

* Çalışanlar satışları üzerinden prim aldıklarına göre, hangi çalışanın ne kadar ürün sattığı bilinmek istenecektir.
* Hangi müşterinin belirli bir dönemde ne kadar ürün aldığı görülmek istenebilir.
* Bir tarih verilip, o tarihteki siparişler görülmek istenebilir.
* Kargo şirketlerinin durum takibi istenebilir
* En çok hangi ürünün satıldığı / kar ettirdiği bilinmek istenebilir.
* En çok kazandıran sipariş görülmek istenebilir

Ve daha fazlası.. Bu patronlar hep böyle canım isterler de isterler? Şimdi biz, bu veritabanının nasıl normalize edileceğine bakalım?.

Bir an için, bilgisayar diye bir şeyin icat edilmediğini var sayalım. Ama yine de, yukarıdaki raporları isteyen bir patron mutlaka olurdu herhalde !! (Ey sevgili patronum eğer bu yazıyı okuyorsan seni tenzih ederim? Sözüm meclisten dışarı

Şimdi madem bilgisayar yok, o zaman raporları hazırlamanız için kendinize bir ekip kurardınız di mi? Peki Bu ekibin görev dağılımı en verimli nasıl olabilirdi ?

Verimlilik derken şunu kastediyorum, ekibinizdeki tüm kişilerin performansı yüksek olmalıdır ki; istediğiniz raporu hızlıca hazırlayabilsinler. Çok sıkılıp bunalmasınlar. Her veriyi nerede bulabileceklerini çok iyi bilsinler. Yani o konuda uzman olsunlar.

Demek ki, ekipteki her kişiye uzman olması gereken bir konu vereceğim;

Örneğin;

* Mehmet bey; siz yalnızca çalışanların bilgilerinden sorumlusunuz. Her bir çalışanın, adı, soyadı, iletişim bilgileri, doğum tarihi sizden sorulacak
* Aykut bey; siz ise Kargo şirketlerinden sorumlusunuz efenim
* Emre bey, siz Kayıtlı Müşterilerden sorumlusunuz. Şirketin müşteri portföyündeki tüm bilgileri ne var ne yok bilmenizi istiyorum
* Cihan bey aramızdaki en tecrübeli sizsiniz bu nedenle Sipariş bilgilerini de size emanet ediyorum?Hangi siparişimiz hangi müşterimiz tarafından alınmış.. Hangi çalışan satmış, sipariş tarihleri falan sizden sorumludur efendim
* İlhan bey, siz siparişlerin bazı detaylarından sorumlusunuz. Örneğin hangi siparişte hangi üründen kaç adet var ? indirim felan yapılmış mı bu görev sizin?
* Derya hanım, siz ürün bilgilerinden sorumlusunuz?
* Ayhancım dostum, sen kategorileri çok iyi bileceksin. Ona hakim olacaksın hadi göreyim seni?
* Tuğrul bey siz de, efenim lütfen tedarikçi şirketlerimiz hakkındaki tüm verilere hakim olunuz?

Şimdi değerli ekip arkadaşlarım beni iyi dinleyiniz. İşleri hızlandırmak için şöyle bir şey yapacağız; Şöyle ki :

1. Ayhan ve Tuğrul bey siz telefon numaralarınızı Derya hanıma veriniz.
2. Derya hanım siz de telefon numaranızı İlhan bey?e veriniz lütfen.
3. İlhan bey siz, Cihan beyin de telefon numarasını alın?
4. Emre Aykut ve Mehmet bey sizlerde telefon numaralarınızı Cihan beye veriniz lütfen?

Bakın arkadaşlar bu sayede şöyle bir sistem kurmuş olduk;

[Resim: 1000001041image003jk0.jpg]


Şimdi niye böyle bir şey yaptık? Şöyle düşünün yazılım dostları, ben Derya hanım?a, Ürünlerin hangi kategorilere ait olduklarını ve bu ürünleri kimden tedarik ettiğimizi sorarsam; Derya hanım hemen Ayhan bey?i arayarak ürünlerin kategorilerini soracak. Bilgileri aldıktan sonra da, Tuğrul beyi arayıp, tedarikçilerin isimlerini alacak. Yani, bu bilgiler, Derya hanım?da toplanacak ve istediğim rapor hazırlanmış olacak. Di mi ? Peki yukarıdaki ?en detaylı veri çıktısı? nı istersem?

O zaman;

1. Cihan Bey, Mehmet Bey?i arayarak, Çalışan ismini sorar

2. Cihan Bey, Emre Bey?i arayarak, Müşteri ismini sorar

3. Cihan Bey, Aykut Bey?i arayarak siparişi götüren kargo şirketini sorar

4. Cihan Bey, İlhan Bey?i arayarak hangi ürünün sipariş edildiğini sorar

5. İlhan bey bunu bilmediğinden, Derya hanımı arar ve ürün adını öğrenir

6. Derya hanım kategorisini öğrenmek için Ayhan bey?i arar

Ve ben raporumu yine elde ederim !!!!

Ya sevgili dostlar tahmin ettiğiniz gibi yukarıdaki senaryoda, ekibimde bulunan insanlar aslında birer tablo. Ve tablolar birbirlerine ilişkiler ile bağlı?

Bakın bir kavram daha görmüş oluyorsunuz böylece?.

PrimaryKey?ler ve ForeignKey?ler? Bunu şöyle açıklayalım?

Tuğrul bey?in cep telefonu numarası kendisinin PrimaryKey?idir?

Derya hanımın cep telefonundaki rehberde yer alan Tuğrul Bey?in numarası ise ForeignKey?dir?

Derya Hanım bu ForeignKey?i kullanarak Tuğrulbey?e ulaşır?

İŞTE VERİM DİYE BEN BUNA DERİM

Süper oldu ama di mi ? Ben yöneticilik mi yapsam ne ?

Evet sevgili yazılımseverler? Bu makalemde, normalizasyon kavramını naçizane Şişman Adam tarzında anlatmaya çalıştım sürç-i lisan ettiysek affola?

Umarım hoşunuza gitmiş ve veritabanı kavramının mantığını anlamışsınızdır?


Not: Bu makaleler sayın Türkay Ürkmez den izin alınarak sitemizde yayımlanmıştır.
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#2
muhteşem, excellent, perfect, prikrasna söylenecek söz yok.



  Alıntı
Bu mesajı beğenenler:
#3
mükemmel bir anlatım. sizi tebrik ediyorum. öok öok faydası oldu. ellerinize sağlık. çok teşekkürler.



  Alıntı
Bu mesajı beğenenler:
#4
emeği geçen herkese tşkler tşkler şişman adam)) tşkler üstadlar ve access'i sıkılmadan usanmadan bana öğretmeye anlatmaya çalışan sayın smmustafa beye ve tüm access ailesine bizi aranıza aldığınız için tşkler.



  Alıntı
Bu mesajı beğenenler:
#5
evet bu anlatım dili harika ve ben diyorum ki galiba o günlerde 90000*12 taksite aldığım commodore 64 de hazır programları tam okunmayan aynı derginin eklerinde verilen oyun programları veya telefon rehberi programları yazılırken kullanılan diller aklıma geldi yıl 1986 makine dili editörü MDE veya basic dili editörü BDE ile yazdığım o günler oğlum 8 yaşına giderken ondan yardım alıyor oğlum bunları sırasıyla yazacağız ve sonra seninle bilgisayarda oynacağız ama önce bir oyun yazacağız tamam mı evet baba oku o zaman 88 78 90 01 giibi rakamların ne anlama gelmeden yazıyoruz go to 1313 deyimin de bu defa go to 1515 okumuş renkli fasükullerde bazen yüklenmeden elektrik gider gelir televizyona bağlı aletin ;neyse bir defa çalıştı bizim muslukcu ali programı bu arada teyp kasetlerine yükleme yapan datasette var numarasını ayarlıyoruz yani sayaça ve yüklüyoruz ses kasetlerine sayaç 90 ile 150 arasına bunu bir yere kaydetmezsen sayaça oraya getirmezsen bu defa akşama kadar oyun yüklemek için beklersin işte böyle günler uzayıp gitti bir ara denildi ki Türkiye de yok satan disket ve makinası gelmiş almak mümkünmü 2 çamaşır makinası parası evde makina yok sen o oyuncaklarla uğraş dur fırça fırça üstüne ama kafayı takmıştım bir kere tekerlekli sandalyede oturan adama ;ağzında kalem ile bilgisayar başındaki adama ; üstelik adam ünlü fizikçiydi adı steven hawking....

bizim elimiz kolumuz var fakat Türkiyede bilgisayar deyince karşımda korkan bir topluluk ama diyordum gün gelecek bu alet belediyemize alınacak ve ben bu aletten en iyi anlayan adam olacağım veya en azından ondan korkmayacağım.....evet ve hanım dan gizli olarak biriktirdiğim para ile internetçimiz şehire terfi edeceğim dediği için onun en iyi makinasına 486 dx sini 370 milyona aldım oğlanlarım bunu bazen kardeş gibi sarıldılar bazen hanımlarıymış gibi tecavüz ettiler pardon içine açtılar karıştırdılar baba remi yükseltelim baba faxs modem alalılm dediler dedik ya bilmiyoruz diye bizimkiler 145 yerine 146 dan bağlanmışlar baba pc hızlandı internete hızlı giriyoruz vede kendimize bir site yaptık iyi de bu faturayı kim ödeyecek oğlum benim maaşımın yarısı bu delireceğim bu makineyi de nerden aldınız diyor bizim hanım kayın valide diyor şeytan işi bu ne tıkıldatıp duruyorsunuz işte o makineyi bu defa dizüstüne terfi ettiğim gün hanım bu kalabalık ediyor misafir odasına iste satın ister atın evet o düştü kötü yola çünkü onu ilkokul çocuğuna bedavaya versem bile burnuna kıvırdı bir zamanlara 450 milyona verelim fakat 3 taksit verebiliriz denilen alet akvaryum bile olamıyacağından çöpe attık ama insanların bende olsa nankör olduğumu birkez daha anladım evet işte bazı erkeklerde güzel kadına görünce eskisini ve bir yastıkta ömür boyu deyimini unutup gidiyoruz evet bu algoritmayı hemen yazmalıyım eskiylemi idare etsek yoksa eski artı yeniylemi idare etsek veya eskiye biraz para verip terk mi etsek yenisini son model artı araba ile mi tavlasak....
ve bu defa yemin ettim yaşım 50 ama VBA diline öğrenmeden ölmeyeceğim...
sağolun iyiki varsınız dostlar bu gün biraz daha beynimin kıvrımları arasına birşeyler daha girdi bu yazı sayesinde
çeşmede su akarken testisine doldurmayan ahmaktır...



  Alıntı
Bu mesajı beğenenler:
#6
Güzel bir anlatımla geçmişi, şimdiyi ve geleceği bağlamışsınız. Beğendim.

Bu azim ile ilgili benim de 2 örneğim var, bahsedeyim kısaca izninizle.

Ağabeyim, Anadolu'nun şirin bir ilçesinde devlet memuru. Bilgisayarla tanışıklığı yakın bir geçmişe dayanır.
Tanışmalarının ilk senesinde excel ile süper bir personel/bordro programı yapmış. Görünce hayran kaldım
gerçekten. Geçtiğimiz kurban bayramında access ile neler yapabileceğinden bahsettim biraz. Aynen sizin
dediğiniz gibi bu işi öğrenmeyi kafasına koydu. Eminim kısa bir sürede öğrenecektir. Çünkü azim üst seviyelerde.

Bir başka örnek de amca oğlundan. O da başka bir kasabada ikamet ediyor ve ticaretle uğraşıyor. Excel i deneme
yanılma yoluyla öğrenerek kendi ihtiyacını gören, çok pratik uygulamalar geliştirmiş. Muhasebesini, stoğunu,
müşterilerini en ince ayrıntısına kadar entegre olarak tutabiliyor.

Bu örnekleri verme sebebim, insan azmettikten sonra, hangi yaşta, eğitimde, yerde olursa olsun yapmak istediği şeyi
rahatlıkla yapabiliyor.

Sizin gibi azimli insanları gördükçe keyifleniyorum.
Saygıyla...



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  ACCESS'E GİRİŞ EĞİTİM (FurqanTr YAPIM) furkan_68200 18 14.163 15-11-2022, 16:46
Son Mesaj: CoruC
  Veritabanı Nasıl Tasarlanmalı? (.PDF FORMATINDA) Taruz 48 47.718 09-03-2017, 13:55
Son Mesaj: cankalkan
  Access ve Veritabanı Yönetimi (.Doc Formatında) Taruz 8 8.572 08-04-2016, 09:25
Son Mesaj: huzun_bulutu
  Veri Tabanı Kavramına Giriş beab05 5 5.651 15-01-2015, 13:14
Son Mesaj: huzun_bulutu
access-sql-12 Microsoft Access Dersleri -1- Veritabanı- Kurulum ve Menüler (.PDF FORMATINDA) Taruz 25 33.190 13-04-2012, 08:35
Son Mesaj: d_rago_n
  Programlamaya Giriş ve Algoritma Ders Notları (PDF) onur_can 16 24.774 08-04-2012, 18:32
Son Mesaj: furkan_68200
  Veritabanı Yönetim Sistemlerine Kısa Bakış (PDF Formatı) onur_can 4 4.003 31-01-2011, 08:39
Son Mesaj: İsmail Küçükşengün
  Access ve Veritabanı Yönetimi 2 (.Doc Formatında) Taruz 7 6.446 19-01-2011, 12:11
Son Mesaj: scraaby

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi