SQL Tasarımı ve Tabloların Oluşturulması
SQL ile ilgili bu 5 seride bir e-ticaret sitesi için basit anlamda bir veri tabanının oluşturulması tablolar arası bağlantıların kurulması ve çeşitli sorgular,prosedürler,triggerler vb. konulardan bahsedeceğim.İlk olarak veri tabanımız için gerekli senaryoyu kuralım ve tablolarımızı oluşturalım aslında bu işlemler esnasında ER diyagramları ile başlangıç yapmak gerekir fakat karışık bir veri tabanı olmadığı için bu adımı yapmayacağız.
Başarılı bir veri tabanında tüm veriler tek bir kayıt ile birleşmelidir,örneğin bu veri tabanı için bütün kayıtlar ürün ile bağlantıya geçebiliyor olmalı,ikinci olarak veri tekrarında n kaçınmalıyız,ve veri tabanını tablo bazında parçalayabildiğimiz kadar parçalamalıyız.Çünkü bir tablo içinde ne kadar çok veri varsa performans o kadar düşer öyleyse
1.Sütun sayısı az olursa,tablo daha çabuk okunup alt satıra geçer.
2.Veri tabanı için parçalar daha hızlı geri bildirim yapar.
Bu veri tabanı için ihtiyaç duyacağımız tablolar:
--Ürün
-Fiyat
-Kampanyalar
-Kategori
-Marka
-Ürün Özellikleri
-Sipariş
-Stok
-Taksit Seçenekleri
-Ürün Resimleri
-Ürün Yorumları
-Kullanıcı
-Rol
Veri tabanını hayalinizde canlandırmak adına hepsiburda.com gittigidiyor.com vb. e- ticaret sitelerini inceleyebilirsiniz.Ayrıca veri tabanının kullanıcı(müşteriye bakan yuzu olduğu gibi)çalışan(kargo-stok,müşteri temsilcisi,patron vb.)tarafları da düşünerek tasarlanmalıdır.
Neden bazı özellikler aynı tabloda iken pazıları parçalanarak ayrı tabloda tutulu yada ara tablolar ne zaman oluşturulur şimdi onlara bakalım.
Urun tablosunda olması gerekenler:
Urun ID,Ürünün adı ,markası,kategorisi,fiyatı,özellikleri,urun hakkında yorumlar,odeme şecenekleri,urunle ilgli varsa kampanya vb.
Bunları göz önüne alırsak bu ozelliklerden bazılarını tabloda bulunduracagız bazılarını ise ayrı tabloya atıp sadece ID sini ürün tablosunda kullanacağız,bazen de ara tablolar oluşturacağız.
Öncelikle Microsoft SQL Server Management kurulumunu yapalım bu kurulumun nasıl yapıldığını buradan öğrenebilirsiniz,daha sonra SQL Management’e bağlandıktan sonra sol tarafta bulunan Database ye sağ tıklayarak New DataBase seçeneğini seçelim.Database adını ETicaret koyalım .Oluşan Databasede alt seçenekler araında Tables kısmına yine sağ tıklayarak Add New Table . diyelim ve Tablenin ismini de Urun olarak adlandıralım.Column Name kısmında ID ozelligi oluşturalım ve bu satıra sağ tıklayarak set primary key diyerek ID özeliğini primary key yapalım,data typesini de int olarak seçtikten sonra kayıt eklendiğinde ID nin değerinin otomatik olarak artması için hemen Alltta olan Column Properties kısmından Identity Speciation kısmının alt seçeneğinde Is Identitiy e iki defa tıklayalım No dan Yese dönüştüğünü göreceğiz,Burada identity increment ve identity seed ayarlarınıda yapabilirsiniz. Tabloya bir Adi özelliği ekleyelim,tipini ise varchar(50) yapalım SQL Data Types kısmı hakkında detaylı incelemeye buradan ulaşabilirsiniz.Tablonun suanki hali
Urun fiyatını ise bu tabloda tutmayacağız çünkü ürün fiyatı bir çok bileşene sahiptir:Alış-fiyatı,KDV,Kar,Kampanya(İndirim) dolayısı ile fiyat için faklı tablo tutup Fiyat tablosu içinde UrunId yi yada Urun tablosu içinde FiyatId yi bulunduracağız.
Herhangi bir alanda birden çok özellik olacak ise bu alanı ayrı bir tabloda tutmalıyız.
Marka ve kategori tabloları için ; bir veri girişi vardır ve bu giriş de bir çok üründe tekrar eder dolayısı ile veri girişini kullanıcıya bırakmak doğru olmaz o nedenle kategori ve marka diye ayrı tablolar tutmalıyız,Ayrıca bu iki tabloda yukarda bahsettiğimiz gibi bir çok özellik içinde barındırmaktadır,örneğin marka için: Marka adı,marka iconu,vb.Kategori tablosu için ise alt kategoriler gerekmektedir.Ayrı bir tablo tutacağımız için urun tablosu içinde MarkaId ve KategoriId sutunları oluşturalım.tipleri ise small int olsun ve tum Urun tablomuzda tum bu ozellikler boş geçilemez.(Allow nulls tiki kaldırılmalı)
UrunResmi için bir urunun birden çok resmi olabileceği için yine ayrı bir tabloda tutulmalıdır.Yorumlar tablosunda benzer şekildedir.fakat Urun Tablosuna ResimId yada UrunResim tablosuna UrunId yazarak tablolar arası ilişki kuramayız çünkü bir ürünün birden çok resmi olabilir ve biz buna ResimId ile ulaşamayız ulaşsak bile bir tek ürün resmine ulaşılabilir,bu sorunu SQL sorguları ile halledebilirz. Yorumlar tablosu da benzer şekilde,dolayısı ile suan için urun tablomuza ekledğimiz herhangi bir sutun(özellik) yok.
Urunun odeme şekli ve Kampanyası da bir çok bileşen içerdiği için ayrı tablolarda tutulmalıdır.
UrunOzelliği tablosunda ise Urun ile çift taraflı bir ilişki barındırmaktadır çünkü bir ürünün birçok özelliği olacağı gibi bir özellik de bir çok ürüne ait olabilir.Oyleyse bu durumlarda bir ara tablo tutulmalıdır.
Stok ve Sipariş tabloları kendi içinde birçok özellik bulundurmalıdır ve farklı tablolarda saklanmalıdır.Ürün tablosunun son şekli:
Ürün tablosunu oluştururken bahsettiğimiz bu özelliklerden yola çıkarak bazıları için farklı tabloda tutma kararı yada ara tablo oluşturma kararı aldık.Şimdi bu tabloları oluşturalım:
Fiyat Tablosu
Fiyat tablomuzda dikkat etmemiz gereken en onemli husus alış fiyatı ve satış fiyatını ayrı ayrı tutumamaktır,bunun yerine alış fiyatı+KDV+Kar+KampanyaId ile=UrunSatışFiyatı bulunabilir.Bu işlem sorgu ile yapılır,ayrıca veri tabanında fiyatla ilişkin bazı raporlama işlemlerini de hızlandırır,gereksiz veri depolamaktan kaçınılmış olur.Fiyat tablosunun son hali:
Marka Tablosu
Kategori Tablosu
Kategori tablosunda alt kategorilerde bulunacağı için Ana kategori tablosunda Root sutunu oluşturulur.
Ürün Resmi Tablosu
SQL data base kendi içerisinde resim saklayabilir(bmp formatında) fakat local de bir klasor oluşturarak resim dosyalarını burada saklamak resim dosyalarının pathlarını SQL databaseye vermek daha doğru olacaktır.O nedenle ResimAdi ozelliğinin tipide nvarchar(50) olarak seçilmiştir,bu çağrımı Eval ile yapabliriz,eval bildirimi databaseden bir veri çağırır.
Dosyalar/Uploaded/<%#Eval(Resim)%> gibi
Ürün Yorum Tablosu
Kampanyalar Tablosu
Datetime kısmınının otomatik olarak alınması için Başlangıç Tarihi ya da Bitiş tarihi kolonlarından birine tıkladığımızda Column Properties kısmından General Başlığı altında Default Value or Binding özelliğinin karşısına (getdate()) yazabiliriz.
Ürün Özellik Tablosu
Özellikler tablonsun daha detaylandırabiliriz ve ikinci bir alt tablo açabiliriz Özellik detay tablosunda:
Urun olarak ayakkabı düşünüldüğünde özellik ayakkabı numarası ,rengi;ozelliDetay Tablosunda ise Ozelliği olarak 42,kahverengi diyebiliriz.
Taksit Seçenekleri Tablosu
Bu alanda da iki tablo bulunmalı bunlardan biri banka iken diğeri taksit seçenekleri tablosudur.Bu iki tabloya göz atacak olursak:
Stok Tablosu
Sipariş Tablosu
Ürün ve Özellik Ara Tablosu
Şuana kadar oluşturduğumuz iki Özellik tablosunda Urunle Tablosu ile ilgili bir bağlantı yoktu,ve daha oncede bahsettiğim gibi ürün ile özellik arasında çift yönlü bir ilişki olduğu için ara tabloya ihityaç vardır.Ör:Bir urunun renk,model gibi birçok ozelliği olabileceği gibi model ve renk de bir çok urunde bulunabilir.
Kullanıcı Tablosu
Bu tabloda bir Unique örneği görüyoruz bir tabloda unique oluşturmak için primary key ile birlikte oluşturmak istedğimiz sütuna ctrl tuşuna basılı iken seçerek sağ tıklayıp set primary key diyebilirz. Ve yukarda olduğu gibi iki sutunun da yanına anahtar simgesi çıkacaktır.
Unique -> Bir tabloadaki alana sadece tekil bilgileri girmenizi sağlar. Örneğin eposta adresi gibi. Bir öğrencinin numarası gibi. O alanda sadece bir öğrencinin numası bir defa kaydedilir ikinci bir defa kayıt yapılmasına izin vermez.Hata döndürür,fakat Unique boş geçilebilir.
Rol Tablosu
Helal olsun :D
YanıtlaSilhaha :D
YanıtlaSilpeki 42 numaralı kahverengi ayakkabıların stoğunu nasıl çekicez =)
YanıtlaSilMerhaba Gökhan,
YanıtlaSilÖzellikle- Özellik Detay tablolarında Id alanında foreign key ilişkisi var bu ilişkiyle kahverengi ve 42 numara olan ayakabıları çekebilirsin.
İlginize teşekkürler
YanıtlaSilKahverengi ve 42 değerlerini ozellikdetay tablosunda tutuyoruz . kahverengi olan ürünleri çekebilirim 42 numara olanlarıda çekebilirim (ayrı ayrı). Hem kahverengi hemde 42 olan ürünü nasıl çekebilirim ? pivot tablomu kullanmam gerekir ?
merhaba bir ürünün birden fazla özelliği olabiliyor
YanıtlaSilayakkabıdan gidersek
marka model renk numara resimleri
ürün tablosu dışında bu özellikleri
ikinci bir tablo olan detay tablosunda ürün id sini vererek tutucam ancak
tamam diyelimki
GUID URUNID adidas yürüyüs modeli mavi 42 1.resim
diye ekledim peki birden fazla resmi olduğunda o resimleri nasıl kaydetcem ?
mavi renge ait diyelim 5 resim var
yine ikinci kırmızı modele ait 3 resim var
yine tekrar kayıt yapsam saçma olur ?
birde
yine bir şirketin tek bir adresi ve n tane şubesi var ancak her şube ve merkezin birden fazla telefon numarası var
FIRMA DETAY
GUID FIRMID ADRESI TELEFON NUMARASI
şimdi
firma adını yazdım adresini yazdım tel numarasını yazdım ikinci satırda yine adres kısmını boş geçmem saçma olur yine aynısını yazsam olmaz
yardımcı olursanız sevinirim
bu resimler için bana resimler tablosu oluştur oraya urun id si yaz diyebilirsiniz ancak bunu yapmak istemiyorum telefon içinde o zaman bunu yapmam lazım yani her n tane gelebilcek özellik için tablomu oluşturcam ? teşekkürler
serdar şengül
Çok güzel
YanıtlaSilmeraba
YanıtlaSilkargo websitesi veritabanı oluşturmam için hangi tabloları oluşturmam gerekir :?
Sipariş tablosu, ürün ve özellik ara tablosu ile aynı olmuş.
YanıtlaSilGüzel anlatım olmuş. Emeğinize sağlık. Tesekkürler
YanıtlaSilSipariş tablosu ile ürün özellik ara tablosu aynı olmuş gibi hatalı mı açıklayabilir misiniz?
YanıtlaSilsipariş tablosu ve ürün özellik ara tablosu aynı olmuş gibi geldi bana değilse açıklar mısınız?
YanıtlaSil