Kategori arşivi: Bilgisayar Programlama

Mssql Sınırsız Kategori Yapımı

sınırsız kategori sql

Sql ile sınırsız kategori nasıl yapılır?

Geliştirdiğim bir erp projesi için sınırsız kategori özelliği lazım olmuştu, bu işi çözmenin en mantıklı yolunun sql olacağına karar verdim ve yazdım.

Kategori listesinin olduğu bir tablomuz olduğunu düşünelim. Sütun olarak kategoriid, kategoriismi ve bir de ustkategori isimli 3 adet sütunumuz olsun.
kategoriid: primary key olarak her kategorinin kendine özgü değer alacağı sütundur, int tipinde olacaktır.
kategoriismi: kategorinin ismini belirten sütundur, nvarchar tipinde olacaktır.
ustkategori: kategorinin herhangi bir kategorinin altı olduğu durumunda hangi kategorinin alt kategorisi olduğunu bu sütundan anlayacağız, eğer kategori alt kategori değilse bu sütun 0 değerini alacaktır, eğer bir alt kategoriyse alt kategorisi olduğu kategorinin id numarasını alacaktır.

tedarik2

Yukarıdaki örneğin uygulamasını içeren kod aşağıdadır.


with KTG as
(

select kategoriid, CAST(kategoriismi as varchar(255)) as kategoriismi, ustkategori
from tedarik_kategoriler
where ustkategori = 0

union all

select c.kategoriid, CAST(p.kategoriismi + ' -> ' + c.kategoriismi as varchar(255)), c.ustkategori
from tedarik_kategoriler as c
join KTG as p on p.kategoriid = c.ustkategori
)

select * from KTG
order by kategoriismi

Sorgunun çıktısı aşağıdaki gibi olacaktır:
kategorilerSınırsız kategori yapımını elimden geldiği kadarıyla anlatmaya çalıştım, yapamadığınız veya anlamadığınız yer olursa her zaman sorabilirsiniz

Mssql join kullanımı

sql join

Sql join kullanımı nasıldır?

sql ile join işlemleri gerçekleştirebilmek için aşağıdaki örneği uygulayın.

Elimizde üç adet tablo olsun ve tablolar aşağıdaki gibi olsun

Tablo1: personel
Sütunları: personelid, adsoyad

Tablo2: departman
Sütunları: departmanid, departmantanimi

Tablo3: departmanindex
Sütunları: departmanindexid, departmanid, personelid

Yaptığımız her personel kaydı için ait olduğu departman bilgisini de çekeceğiz, ama bu departman bilgisini kayıt tekrarını önlemek için departman id si ile kaydedeceğiz, yani departman isimleri değil departmanların id numaraları tekrar edecek, bu sayede veritabanı hem daha organize bir şekilde oluşacak hem de kayıt tekrarı yüzünden şişmeyecek

Insert işlemini daha önce yaptığımızı düşünerek buna uygun select işlemi örneği aşağıdaki gibidir.


select

personel.adsoyad,
departman.departmantanimi

from personel

inner join departmanindex on departmanindex.departmanid = departman.departmanid
left outer join departmanindex on departmanindex.personelid = personel.personelid

Bu şekilde veritabanından personel ad ve soyadı birinci sütunda, bağlı olduğu departman ikinci sütunda olacak şekilde bir kayıt döndürebiliriz.

İlk joinde departman isimlerini inner join ile departmanindex tablosuna bağladık.

İkinci joinde left outer join yerine inner join kullanmış olsaydık sadece departman bilgisi olan personeller karşımıza çıkacaktı, right outer join veya full join kullanmış olsaydık herhangi bir personele bağlı olmayan departmanlar da personel adı ve soyadınının bulunduğu sütun null fakat departman bilgisinin bulunduğu sütunda bilgi var olacak şekilde kayıt dönecekti.

Diğer tüm kodlama yöntemlerinde olduğu gibi bu yöntemi de en iyi öğrenme yolu verilen örneği uygulamaktır, aklınıza takılan bir soru olursa çekinmeden sorabilirsiniz.

Web sitesi barındırmak için gerekenler

Çok iyi programlama biliyor olabilirsiniz, fakat web sitesini barındırmak ve bakımını sağlamak apayrı bir konudur. Öncelikle bir web sitesinin nelerden oluştuğunu ve nasıl bir mantıkla var olduğunu düşünelim

Öncelikle elimizde bir alan adı olmalı, terim kullanacak olursak “domain”. Bir de web sitesini fiziksel olarak barındıracak bir alan olmalı, bunu da değişik türlerde sağlayabiliyoruz, fakat genel olarak bu işleme hosting denir.

Alan adı(domain) ve IP adresi

Her web sitesinin bir fiziksel adresi var, bu fiziksel adresler IP adresi dediğimiz adreslerle belirlenir. Tüm dünyada internete bağlı olan her bir bilgisayarın IP adresi vardır, eğer çoklu bir ağda bulunuyorsanız birden fazla bilgisayar tek IP adresini kullanıyor olabilirsiniz. Örnek vermek gerekirse evinizdeki interneti cep telefonu, masaüstü bilgisayar ve dizüstü bilgisayar ile ortak olarak kullanıyorsunuz, bunların hepsi aynı ağı kullandığında tek bir IP ye sabit olacaktır, daha doğrusu tek bir “external ip” ye sahip olacaktır. Yani WWW(World Wide Web) üzerindeki ip.

Bir de “internal ip” adresimiz var ki, bu da external ip içerisinde dağıtılmış ip adresleridir. Örnek vermek gerekirse 192.168.1.25 bir internal ip adresidir, oysa ki 74.125.228.46 bir external ip adresidir. Yani tek bir external ip yi kullanan her cihaz için, o ağ içerisinde, sadece o cihaza özel bir internal ip verilir. Internal ip yi otomatik dağıtma işini DHCP sunucusu halleder, genelde bu sunucu evimizdeki adsl modemlerin kendi içerisinde bulunur, buna rağmen modem ayarları izin verirse manuel olarak da internal ip mizi kendimiz seçebiliriz.

IP ile ilgili konuya çok fazla dalmadan asıl anlatmak istediğim konuya gelmek isterim

Alan adı: Alan adı yani domainin işlevi aslında çok basittir. IP adresleri akılda tutması zor olabileceğinden alan adları kullanılmaktadır. Örnek vermek gerekirse Google arama motorunun ip adresi olan 74.125.228.46 adresine bu numarayı tarayıcımızın üst kısmına yazarak da ulaşabiliriz, veya bunun yerine direk olarak www.google.com şeklinde bu adrese gidebiliriz, ikinci yolun ilkine göre daha akılda kalıcı olduğu şüphesiz.

Hosting

Hosting adıyla anılan hizmet ise web sunucusunun fiziksel olarak barındırılmasıdır. Yani dünyanın bir yerinde sizin için açık olan bir bilgisayar var ve internete bağlı bir şekilde dosyalarınızı başkaları için yayınlıyor. İşte hosting tam olarak bu işe yarar. Bu hizmetin çeşitli seviyeleri ve türevleri bulunmakta, kendi adıyla alınan bir türevi ise bir web sunucusundaki sayıları genelde 500 civarında olan sanal web sunucularından birinin satın alınması hizmetine denir.

Dedicated adıyla anılan hizmet ise direk olarak bir bilgisayarın sizin hizmetinize adanmasıdır.

VPS ise bir bilgisayarın içerisinde kurulu olan birden fazla sayıdaki sanal bilgisayarlardır, bu bilgisayarlara web sunucusu veya başka bir şeyler kurmak size kalmış. 1gb ramli 2 çekirdek işlemcili bir VPS niz olduğunu düşünün, bu kaynakların yüzde 50 sini kullandığınızı düşünelim, kalan yüzde 50 yi başkaları o anda sunucu yoğunluğuna bağlı olarak paylaştırılmış olarak kullanabilir. Herkes aynı anda kullanmaya kalkarsa doğal olarak kaynak yetersizliği var olacaktır, ve vps nizin kaynaklarını tam anlamıyla kullanamıyor olacaksınız.

VDS ise vpsdeki kaynak eksikliklerinden arındırılmış hizmettir. Yani bilgisayarın içerisinde yine sanal sunucular var fakat bu sanal sunucuların söz verilen kaynakları tamamen size ait. Örneğin yine 2 çekirdek işlemcili ve 1gb ramli bir VDS niz var diyelim. Bir başkası o anda aynı sunucudaki vds leri kullansa da kullanmasa da siz tam anlamıyla 1gb ram ve 2 çekirdek işlemciye sahip olursunuz, kaynaklar paylaşılmaz

Bir de son zamanlarda çokça duyulan cloud hosting, cloud computing terimleri bulunuyor. Cloud teknolojisi dediğimiz ve türkçe adıyla bulut teknolojisi mantık olarak birden fazla bilgisayarın tek bilgisayar gibi çalışmasını temsil ediyor, fakat bulut bilişim kelimesi buna benzer ve tamamen başka anlamlarda da kullanılabiliyor, yine de hosting ile ilgili kısımda bilmeniz gereken anlamı bu şekilde. Bulut bilişime örnek olarak bir hosting firmasını verelim. Bu hosting firmasında 400 adet bilgisayar olsun, bunları tek bir bulut ağında birleştirelim ve 400 bilgisayar gücünde tek bir bilgisayarımız olsun. Artık bütün hostingleri, bütün vps, vds vb hizmetleri bu tek bilgisayar üzerinden verebiliriz. Her şey kontrol altında ve tek bir yerden olacağı için verilen hizmetin kalitesi de büyük oranda artıyor, tabi buna bağlı olarak fiyatı da. Popüler cloud hosting firmalarının verdiği hizmetlerle dakikalar içerisinde bir vps, vds veya hosting yaratıp kullanıma hazır hale getirebiliyorsunuz, kolayca yedek alabiliyorsunuz, ip değiştirebiliyorsunuz ve bunun gibi bir çok kolaylığı var.

Sonuç:

Alan adı ve hosting olmak üzere gerekli iki şeyi de satın alabilir veya ücretsiz fakat daha az özellikli olanlarını tercih edebilirsiniz. Bir çok büyük kuruluş ücretsiz web sitesi dağıtıyor, tabi bunların eksi yanı, size domain yerine subdomain(alt alan adı) vermeleri ve hosting için çok kısıtlı yetkiler vermeleri. Eğer biraz para ayırabilirim diyorsanız bir adet alan adı ve bir adet hosting(diğer adıyla shared hosting, yani paylaşılan hosting) ile bu işe başlayabilirsiniz, hosting yetmediğinde daha üst seviye barındırma hizmetlerine başvurabilirsiniz.

MSSQL DateTime toplama-çıkarma

mssql datetime

Mssql ile datetime toplama çıkarma nasıl yapılır?

Mssql veritabanında datetime alanı üzerinde toplama ve çıkarma yapabilmek için hazırladığım kod aşağıdadır

Datetime kolonlarını dakika bazında birbirinden çıkarıyor ve ilgili tabloya yerleştiriyor.


select

servis_personelcalismasuresi.sureid,

servis_personelcalismasuresi.personelid,

(personel_kimlik.ad + ' ' + personel_kimlik.soyad) personel,

sum((DATEDIFF(n, CAST('00:00' AS DATETIME), servis_personelcalismasuresi.mesaibitis)
-DATEDIFF(n, CAST('00:00' AS DATETIME), servis_personelcalismasuresi.mesaibaslangic))) mesai

from servis_personelcalismasuresi

inner join personel_kimlik on personel_kimlik.personelid=servis_personelcalismasuresi.personelid

group by servis_personelcalismasuresi.sureid, servis_personelcalismasuresi.personelid, personel_kimlik.ad, personel_kimlik.soyad

order by servis_personelcalismasuresi.sureid desc