Tasarım Kodlama

MYSQL Sıfırdan E-Okul Veritabanı Oluşturma

Bu yazımızda MySql ile sıfırdan EOkul veritabanı oluşturacağız. veritabanı içine gerekli tabloları ve sütunları oluşturarak bu tabloları nasıl ilişkilendirebileceğinizi öğreneceksiniz.

Örneğimizi MySql WorkBench Programını kullanarak oluşturacağız.

Hadi başlayalım.

Veri Tabanı Oluşturma

Veri tabanları, SQL komutları ve MySQL arayüzü kullanılarak iki farklı şekilde oluşturulabilir.

İlk yöntem MySQL Workbench arayüzünde bulunan aşağıdaki simgeye tıklamaktır.

Biz örneğimizde tüm işlemleri SQL komutları kullanarak gerçekleştireceğiz.

SQL komutuyla veri tabanı oluşturulurken “Create Database İsim” komutu ile belirtilen isimde veri tabanı (database) elde edilir.

Yukarıdaki gibi kodumuzu yazıp çalıştırdığımızda aynı isimde bir veritabanı olmaması halinde veritabanı oluşturulacaktır.

Soldaki Navigator pencersinde Shemas kısmında yenileme yaparsanız eOkul veritabanının oluştuğunu göreceksiniz.

Veritabanı tasarımı yaparken bazı temel kavramlarıda bilmemiz gerekiyor. Bunlardan birisi veritabanında kullanılan anahtarlar (keys) dır.

Veritabanında anahtarlar konusuna BURADAN ulaşıp bilgi sahibi olabilirsiniz.

Tablo Oluşturma

Bir veri tabanı içinde onlarca ya da yüzlere tablo yer alabilir.

Tablolar, veri tabanları içinde verileri tutan yapılardır.

En başta analiz doğru yapılırsa tablolar oluşturulurken yaşanacak sıkıntılar en aza indirilir.

Tabloda özel bir durum yoksa mutlaka bir tane primary key bulundurulur.

Böylece tablo, diğer tablolarla ilişkilendirilmek istenildiğinde sıkıntı yaşanmaz.

Tablo oluştururken komutlar veya arayüz kullanılabilir. Aşağıda bir tablo taslağı görülmektedir.

CREATE TABLE tabloadı (
sütunAdı1 veriTipi diğerParametreler ,
sütunAdı2 veriTipi diğerParamatreler ,

)

Create Table komutu kullanılırken tablonun her alanı (sütunu) için veri tipi ve başka parametreler girilir. Bu parametreler şu şekilde sıralanabilir:
• Not Null: Alan için bir değerin mutlaka girilmesi gerektiğini gösterir (Bu parametre daha çok birincil
anahtarlar için kullanılır.).
• Primary Key: Alanı birincil anahtar olarak belirler.
• Auto_increment: Primary key alanına kayıt eklendikçe otomatik olarak bir sayı artacaktır.

Şimdi örneğimizde kullanacağımız ogrenciBilgi isimli tablomuzu ve bu tablomuzun alanlarını oluşturacak kodlarımızı yazalım.

Öğrenci numarasından sonra öğrencinin adı, soyadı ve bölümü varchar veri türüyle belirlenir.
Varchar veri türlerinin yanındaki sayılar, o alan için hafızada ne kadar yer ayrıldığını göstermektedir.

Daha sonra öğrencinin sınıfının (9, 10, 11, 12) kaydedileceği sınıf alanı ve öğrencinin doğum tarihinin girileceği doğum tarihi alanı belirlenir. aşağıdaki kodlar yazıldıktan sonra üst taraftaki yıldırım simgesiyle kodlar çalıştırılabilir ve sonuçlar “Output” bölmesinden takip edilebilir.

12345678create table ogrenciBilgi(ogrenciNo int primary key,ogrenciAdi varchar(20) not null,ogrenciSoyadi varchar(20) not null,ogrenciBolumu varchar(30) not null,ogrenciSinifi tinyint not null,ogrenciDogumTarihi date not null);

Şimdi de dersler tablosunu aynı yöntemle oluşturacağız.

1234create table dersler(dersKodu varchar(6) primary key,dersAdi varchar(50) not null);

Burada dersler için 6 karakterlik bir primary key alanı ve ders adının kaydedileceği bir alan oluşturulur.
Tıpkı veri tabanı gibi tablolar da hem SQL kodlarıyla hem de MySQL Workbench arayüzüyle oluşturulabilir.

Şimdide 3. tablomuzu oluşturalım. Tablomuzun adı ogrencinot olacaktır.

12345678910111213create table ogrencinot(idOgrenciNot int not null auto_increment primary key,ogrNoFK tinyint not null,dersKoduFK varchar(6) not null,yazili1 tinyint,yazili2 tinyint,yazili3 tinyint,uygulama1 tinyint,uygulama2 tinyint,sozlu1 tinyint,sozlu2 tinyint,ortalama tinyint null default 0);

TABLOLARI İLİŞKİLENDİRME

İçinde veri olmayan üç adet tablo oluşturuldu. Bu tabloların gerekli alanları birbirine bağlanarak aralarında anlamlı bir ilişki oluşturulmalıdır.

Tüm modern veri tabanı yönetim sistemleri, ilişkisel veri tabanı yönetim modelini kullanarak bilgi saklar ve işler. İlişkisel terimi, veri tabanındaki her kaydın bir tek konu hakkında ve yalnızca o konuyla ilişkili bilgileri içerdiği gerçeğinden ortaya çıkar.

İlişkisel veri tabanı yönetim sisteminde (RDBMS-Relational Database Management System)
tüm veriler tablolar içinde yönetilir. Ayrıca birden çok tablo ya da sorgudan alınan ilişkili değerler birleştirilebilir.

Örneğin; hangi yazarların, hangi kitapları yazdığını öğrenmek için yazar ve kitap bilgileri veya hangi satış elemanının prim hak ettiğini bulmak için çalışan ve sözleşme bilgileri birleştirilebilir.

İlişkisel veri tabanı modelinin amacı, yüksek verimliliktir. Örneğin; personel bilgileri bir veri tabanında
tutulduğunda personel adı, adresi ve telefonu personelin çalıştığı farklı bölümler için çoğaltılacaktır. Bu
gereksiz fazlalık, önemli sayıda kayıtla uğraşan veri tabanları söz konusu olduğunda hem artan disk boşluğu ihtiyacı hem de artan veri ulaşım zamanı sorunlarına yol açar.

Veri, ilişkisel modelde iki tabloya ayrılacaktır. Birinci tablo sigorta numarası, kimlik numarası, adres, telefon, yaş gibi kişisel bilgileri içerir. İkinci tablo ise bu bilgileri çoğaltmak yerine personelin çalıştığı bölüm bilgilerini içerir. Bu durum, normalizasyon ile doğrudan ilişkilidir.

MySQL’de İlişkisel Veri Tabanı Oluşturmak (Reverse Engineer)

Oluşturduğumuz tablolar arasındaki ilişkiyi MySql Workbench programında Database >> Reverse Engineer menüsünden gerçekleştireceğiz.

Reverse Engineer tıkladıktan sonra aşağıdaki pencere gelecektir.

Next diyerek ilerliyoruz.

Bu pencerede de Next diyoruz.

Gelen ekranda kullanacağımız veritabanını seçiyoruz ve Next diyoruz.

Next diyoruz.

Burada Import MySql Table Objects işaretledikten sonra Execute butonuna tıklıyoruz.

Next diyoruz.

Finish butonuna basarak pencereyi kapatıyoruz.

Karşımıza aşağıdaki görüntü gelecektir.

Veri tabanları arasındaki bağlantılar; bire çok (one to many), bire bir (one to one),
çoka çok (many to many) olmak üzere üç şekilde sağlanmaktadır
• Bire Bir Bağlantı Türü (1:1): Her iki tablodaki bağlantılı alan, her iki tabloda da benzersiz olursa bire bir bağlantı türü kullanılmıştır. Örneğin, öğrenci bilgi tablosundaki öğrenci numarası ile mezuniyet tablosundaki öğrenci numarası arasında 1:1 bağlantı vardır çünkü okuldan o numara ile mezun olabilecek 1 öğrenci vardır ve numara alanları bağlandığında ekrana 1 tane kayıt gelecektir.

• Bire Çok Bağlantı Türü (1:n): Bir tabloda primary key olan alanın başka bir tabloda birden çok tekrar etmesi ile ortaya çıkan bağlantı türüdür. Örneğin, öğrenci bilgi tablosundaki öğrenci numarası alanı ile öğrenci not tablosundaki öğrenci numarası alanı ilişkilendirildiğinde bir öğrencinin birden çok ders notu olacağı için öğrenci numarası, öğrenci not tablosunda birden çok tekrarlanacaktır.

 Çoka Çok Bağlantı Türü (n:m): İki tablo arasında yapılan bağlantı birden çok kez tekrarlanmışsa bu ilişki türü kullanılmıştır. Örneğin, bir film veri tabanı ve bu veri tabanında film ile kategori tabloları olsun. Filmin kategorileri ilişkilendirilmek istenildiğinde bir filmin birden çok kategorisi olabileceği için kategori tablosunda hem film id’si birkaç kez görülebilir hem de o kategoride başka filmler bulunabileceği için kategori id’si de aynı tabloda birden çok tekrar edebilir.

Tablolar Arası Bağlantı Yapılması

Tablolar hazırlanırken ogrencinot tablosunda gerekli foreing key alanları oluşturulmuştu. O yüzden
bağlantı kısmında en altta yer alan ve istenilen alanlar arasındaki bağlantıyı kullanıcının yapmasına olanak
sağlayan bire çok simgesiyle bağlantılar gerçekleştirilir.

Bunun için aşağıdaki şekilde gösterilen işaretli simgeye tıklanarak,

önce ogrencinot tablosundaki ogrNoFK alanına sonra da ogrencibilgi alanındaki ogrenciNo alanına gelinir.

Ardından yine simgeye tıklanarak önce ogrencinot tablosundaki dersKoduFK alanına sonra da dersler tablosundaki derskodu alanına gelinir.

Sonuçta yukarıdaki gibi bir görselle karşılaşacaksınız.

Görselde ogrencibilgi ve dersler tablolarına gelen uçlar tekli, ogrencinot tablosuna gelen uçlar
ise çoklu olmuştur.

ogrencinot tablosundaki ogrNoFK ve dersKoduFK alanları tekrar edecek şekilde (Foreing
Key) yapılandırılmış ve ilişkilendirilmiştir.

İlişkileri gösteren bağlantı üzerinde çift tıklayarak Foreign Key sekmesinde Identifying Relationship işaretliyoruz.

Yapılan değişiklikleri veri tabanına uygulamak için “Database” menüsünden “Synchronize Model” seçeneği
işaretlenir.

Yapılan değişiklikleri SQL kodlarıyla göreceksiniz.

— MySQL Workbench Synchronization– Generated: 2021-10-09 21:25– Model: New Model– Version: 1.0– Project: Name of the project– Author: Lenovo SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’; ALTER TABLE eokul.ogrencinot ADD INDEX fk_ogrencinot_dersler_idx (dersKoduFK ASC) VISIBLE,ADD INDEX fk_ogrencinot_ogrencibilgi1_idx (ogrNoFK ASC) VISIBLE;; ALTER TABLE eokul.ogrencinot ADD CONSTRAINT fk_ogrencinot_dersler  FOREIGN KEY (dersKoduFK)  REFERENCES eokul.dersler (dersKodu)  ON DELETE NO ACTION  ON UPDATE NO ACTION,ADD CONSTRAINT fk_ogrencinot_ogrencibilgi1  FOREIGN KEY (ogrNoFK)  REFERENCES eokul.ogrencibilgi (ogrenciNo)  ON DELETE NO ACTION  ON UPDATE NO ACTION;  SET SQL_MODE=@OLD_SQL_MODE;SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Dilerseniz kodları inceleyebilirsiniz.

Bu pencerede Execute butonuna basalım.

VERI TABANINA BILGI GIRIŞI

Tablolar oluşturulduğuna ve ilişkileri yapıldığına göre tablolara veri girişine başlanabilir. Tablolara SQL kodları veya MySQL arayüzü kullanılarak iki şekilde veri girişi yapılabilir.
insert into tabloadı (alan1, alan2, …, alan(n)) VALUES (deger1, deger2, …, deger(n))

MySQL arayüzü kullanılarak ogrencibilgi tablosuna veri girişi yapmak için tabloya sağ tıklanıp;

“Select Rows – Limit 100” seçimi yapılır ya da tablonun üzerine gelindiğinde çıkan simgelerden en sağdaki tıklanır.

SQL kodları kullanark dersler tablosuna giriş yapalım.

INSERT INTO dersler (dersKodu,dersAdi) VALUES(“FZK”,”Fizik”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“KMY”,”Kimya”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“BED”,”Beden Eğitimi”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“BTT”,”Bilişim Teknolojilerinin Temelleri”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“PROTEM”,”Programlama Temelleri”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“NTP”,”Nesne Tabanlı Programlama”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“TDE”,”Türk Dili ve Edebiyatı”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“BIY”,”Biyoloji”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“YBDIL”,”İngilizce”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“BDT”,”Bilgisayar Destekli Tasarım”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“WEB”,”Web Tasarım ve Programlama”);INSERT INTO dersler (dersKodu,dersAdi) VALUES(“GRA”,”Grafik”);

Yukarıdaki kodları yazıp çalıştırdığınızda;

şeklinde bir çıktı alacaksınız.

Şimdi deneme amaçlı önceden eklenmiş ders kodunu tekrar eklemeye çalışalım.

INSERT INTO dersler (dersKodu,dersAdi) VALUES(“FZK”,”Fizik”)

Hata sebebi : Ders kodu Primary Key olarak ayarlanmıştı. Yani tekil olmak zorunda. FZK kodu daha önceden kaydedildiği için tekrar aynı kodu kaydetmeye izin vermeyecektir.

ogrencibilgi tablosu için deneme amaçlı birkaç kayıt girişi yapalım.

INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’62’, ‘Derya’, ‘Çakmak’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.05.03’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’64’, ‘Ufuk’, ‘Ateş’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.01.13’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’65’, ‘Recep’, ‘Orta’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’68’, ‘Hüseyin’, ‘Kuzey’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’70’, ‘Mehmet’, ‘Güney’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’72’, ‘Ahmet’, ‘Bilir’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’77’, ‘Gül’, ‘Çalışkan’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’80’, ‘Pervin’, ‘Bulur’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’82’, ‘Burak’, ‘Çivi’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’90’, ‘Nuray’, ‘Koçar’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’91’, ‘Nurgül’, ‘Dertli’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);INSERT INTO eokul.ogrencibilgi (ogrenciNo, ogrenciAdi, ogrenciSoyadi, ogrenciBolumu, ogrenciSinifi, ogrenciDogumTarihi) VALUES (’96’, ‘Hülya’, ‘Neşeli’, ‘Bilişim Teknolojileri’, ’10’, ‘1980.03.21’);

Tablodaki kayıtları görüntüleyelim.

Şimdi ogrencinot tablosuna deneme amaçlı kayıt girişi yapacağız.

Veritabanımızın tasarımını bitirmiş olduk. Bir sonraki aşamada C# ile bağlantı kurma işlemini gerçekleştireceğiz.

Yorum yap