22 Mart 2014 Cumartesi

Veri Yönetimi - Bağımsız Müzakere Platformu

Veri Yönetimi platformu, "veri yönetimi" şemsiyesi altında olabilecek tüm kavramların müzakere edilmesi planlanan ortak bir platformdur.

Amacı farklı deneyimlere sahip profesyonellerin bir araya gelerek fikir alış verişinde bulunması ve yeni bakış açılarının geliştirilmesini sağlamaktır.

Bu konuda uğraşları olanlar bilirler ki;
Farklı bakış açıları her zaman mevcuttur ve yeni fikirler üzerine düşünmek çoğu zaman keyiflidir.

Tartışılmasını istediğiniz konuları açarak keyifli bir sohbet başlatabilir hem kendinizin hem de diğer katılımcıların zihinlerinde parlak fikirler üretebilirsiniz.

Bağımsız "Veri Yönetimi" platformunun, işlerinde etkin profesyonelleri bir araya getireceği gibi Türkçe kaynak konusundaki açığı da bir nebze olsun kapatacağını umuyorum.

Yeni fikirler edinmenin kıymetini gösterebilecek şu ünlü sözleri sizlerle paylaşmak istiyorum...

"Hepimizin aynı fikirde olması iyi bir şey değildir, çalışmayı yaratan fikir ayrılıklarıdır."
Henry Huxley

"Fikirlerini hiç değiştirmeyen kimseler; gerçekten çok, kendilerini sevenlerdir."
Joseph Joubert

"Eğer son birkaç yılda önemli bir fikrinizi değiştirip yenisini edinemediyseniz, hemen nabzınızı kontrol edin, ölmüş olabilirsiniz."
G. Burgess

"İnsanların aklı, yeni yeni fikirlerle genişler ve bir daha ilk orijinal boyutlarına geri dönemez."
Oliver Wendell Holmes

"Veri Yönetimi" platformuna buradan ulaşabilirsiniz.

Karşılıklı değer üretme temennisiyle...


19 Mart 2014 Çarşamba

SQL Server 2014 1 Nisan'da Release Oluyor

SQL Server 2014'ün 1 Nisan itibari ile genel kullanıma sunulacağı açıklandı.

İlk bakışta eğitimlerde ve makalelerde değindiğimiz tüm yeniliklerin ürün release olduktan sonra da aynı şekilde kullanılabileceği anlaşılıyor.

SQL Server 2014 yenilikleri ile ilgili daha ayrıntılı makalelere önümüzdeki günlerde devam ediyor olacağız.

Duyuruya şu linkten ulaşabilirsiniz:

http://blogs.technet.com/b/dataplatforminsider/archive/2014/03/18/sql-server-2014-releases-april-1.aspx


18 Mart 2014 Salı

Veritabanı Proje Geliştirme Çözümleri - Visual Studio Özellikleri

Microsoft SQL Server verileri iki farklı modeldeki veri tabanlarında tutabilmektedir. Bunlar operasyonel işlemlerin yapıldığı OLTP veri tabanları ve analitik işlemlerin yapıldığı OLAP veri tabanlarıdır.

Yazımızın amacına uygun olabilmesi için kavramlar üzerine şu şekilde bir özet yapabiliriz; Database Engine günlük işlemlerin tutulduğu normalize yapıdaki operasyonel veri tabanlarını veya kompleks analitik işlemler için gerekli verilerin tutulduğu dimensional yapıdaki analitik veri ambarlarını yönetir. Analysis Services ise OLAP amacı ile tutulan, veri ambarlarından beslenen ve cube (Tabular ve PowerPivot da aynı şekilde) olarak ifade edilen yapıları yönetmektedir.

Herhangi bir veritabanı türünü tasarlamak için bir notepad’den faydalanılabileceği gibi (pek iyi bir yöntem sayılmaz) tamamen bu iş için donanımlı hale getirilmiş Visual Studio (SSDT - BIDS - SSMS) veya duruma göre Office ürünleri de kullanılabilir. Her iki modelin kendine has rahat ettiren geliştirme ortamları artık developerların alışkanları arasında yerini almıştır. Örneğin bir BI Developer Multi-Dimensional Cube tasarlamak için SSTD(önceden BIDS)’da proje başlatması gerektiğini bilir. Benzer şekilde veri ambarı tasarımı yapacak bir developer SSMS’yu açarak kısa sürede kodlarla veya arayüzlerle çalışmaya başlayabilir.

SSAS tarafının esas geliştirme ortamı olan Visual Studio(SSDT-BIDS) ve/veya Excel PowerPivot araçları gerekli rahatlığı sağlayabilmektedir. Database Engine için düşünürsek, acaba SSMS proje sürecindeki tüm ihtiyaçların karşılanması konusunda yeterli midir? Veya mevcut özellikler etkin bir şekilde kullanılmakta mıdır?
Bu yazımızda, Database Engine tarafından yönetilen veritabanlarını inşa etmek için kullanılabilecek yöntemlerin elit olanlarına odaklanacağız.

Geleneksel Yöntemler

Geleneksel olarak(DBA bakış açısıyla) bir veritabanı şu yöntemlerle oluşturulmaktadır:

1-      Kodlar ve arayüzler yardımıyla gelişigüzel:
SQL Server Management Studio içerisinde sıfırdan kodlama imkânı olduğu gibi birçok konuda hazır script ve büyük kolaylık sağlayan kullanıcı dostu arayüzler de mevcuttur. Geliştirme bunlar yardımıyla yapılabilir.

Bu ilk yöntem küçük veri tabanları için mantıklı olabilir. Ancak yapılacaklar çoğaldıkça iş çığırından çıkmaya başlayacaktır. Bu durum çok iyi bilmediğiniz bir yoldan işaret bırakmadan geçip gitmek gibi olacaktır. Yeterince uzaklaştıktan sonra geri dönmek istediğinizde ise her izden bir anlam çıkarmaya zorlanmış olursunuz. Yani veritabanında neler olup bittiğini anlamak için bir nevi tersine mühendislik yapmanız gerekir. Hâlbuki bu şekildeki çalışma bir kademe daha geliştirilerek derli toplu hale getirilebilir.

2-      Solution yaklaşımı ile daha düzenli
Veritabanı scriptlerini solution mantığında SSMS üzerinde bir araya getirmek düzenli ve katmanlı çalışma olanağı sağlar. Geliştirme esnasında bir nevi proje dokümantasyonu yapılmış olur. Ayrıca diğer türdeki dosyaları da (notlar, resimler vs.) solution içerisindeki projelerle birlikte taşıma imkânı doğar.

Bu yöntemle çalışmak için SSMS üzerinde File > New > Project yoluyla açılan aşağıdaki pencereden SQL Server Scripts templatei tercih edilir.


Bu pencerede scriptlerin kaydedileceği lokasyon, solutionın ve ilk açılacak projenin adı girilir. Açılan Solution Explorer penceresindeki Solution çatısı altına yeni projeler (Solution > Add > New Project) açılarak scriptler daha üst hiyerarşilerde gruplanabilir.


3-      Database Diagramlar kullanarak daha görsel
Kodlar ile çalışmak artık sizi yorduysa tablo oluşturma ile ilgili işlemleri görsel olarak da yapabilirsiniz.

İlgili tabloları aynı diagramda tutup aralarındaki ilişkileri sürükle bıraklarla kolayca tanımlamak mümkün. Yeni diagramlar Object Explorer’dan ilgili veritabanı altındaki Database Diagrams klasörünü sağ tıklayıp New Database Diagram seçeneği ile oluşturulabilir. Diagramlar üzerinde yapılan tüm değişiklikler veritabanını doğrudan etkileyebilecek şekilde işleneceği unutulmamalıdır.


Geleneksel yöntemler ortalama bir veritabanı projesini başarıyla ilerletmenize olanak tanıyabilir. Ancak proje birkaç developerın birlikte çalışması gerekecek kadar büyüyorsa, değişiklikler ve zaman baskısı artıyorsa, yapılan değişikliklerin versiyonlanması ve versiyonlar arası değişimin takibi gibi talepler doğuyorsa artık geleneksel yöntemlerin biraz dışına çıkma vakti gelmiş demektir. İşte bu noktada Visual Studio üzerinde başlatılabilen SQL Server Database Project devreye girecektir.

SQL Server Database Projesi

Genelde veritabanı oluşturma işi bir yazılım projesi gibi değerlendirilmez. Yazılım projelerinde bir birbirinden beslenen katmanların oluşturulması, defalarca kez yapılan işlemlerin kod kütüphaneleri(dll) haline getirilmesi ve kaynak kullanımının optimize edilebilmesi için tasarım desenlerinin uygulanması gerekir.

Veritabanı geliştirmek istendiğinde ise daha çok konu ve konular arası ilişkiler düşünülerek yapılar bir bir ortaya çıkartılır. Bu süreç her ne kadar geleneksel yöntemlerle sürdürülebilir olarak görünse de yazılımsal mantıkta bir proje yaklaşımı çıkabilecek aksaklıkları ve düzeltmeleri en aza indireceğinden geliştirme aracı tercihini Visual Stuido tarafında kullanmakta fayda vardır.

Bunun için öncelikle Visual Studio’yu açarak File > New > Project seçeneği üzerinden aşağıdaki SQL Server proje türünü tercih ederiz.


Bu örneğimizde YMagaza isimli Solution ve içerisinde YMagaza_1 isimli bir Project oluşacaktır.

Proje özelliklerinin ayarlanması

Proje kapsamındaki ayarları örneğin ortaya çıkacak olan veritabanın konfigürasyonunu yapmak için YMagaza_1 > Properties yoluyla açılan ekrandan faydalanabilirsiniz. Açılan bu ekranın bölümleri arasında gezinerek Debug, Build ve CLR ile ilişkili gerekli ayarları en başta yapmak daha mantıklı olacaktır. Kullanılan ifadelerin uyumluluğu sürekli olarak buradaki ayarlara göre kontrol edilmektir.


Project Settings bölümündeki Target Platform kısmında veritabanının publish edileceği server versiyonunu, Output types kısmında Build edilen projenin Bin\Debug klasöründeki son çıktısının format ve dosya versiyonunu belirtebilirsiniz.

Nesneleri oluşturmak (Table, Schema vs.)

İhtiyacımız olan proje ayarlarını yaptıktan sonra artık gönül rahatlığı ile veritabanını inşa etmeye başlayabiliriz. Düzenli çalışabilmek için proje altında klasörler oluşturarak scriptleri gruplamanızı tavsiye ederim. Örneğin biz YMagaza_1 > Add > New Folder ile Satis isimli bir klasör oluşturup veri tabanlarındaki Schema/Object hiyerarşisini kurmayı tercih edeceğiz. Projemizde Satis klasörü altında tablo, view vs. gibi nesneleri ayrı ayrı klasörlerde tuttuk. Gereken veritabanı nesnelerini YMagaza_1 > Add > New Item… Seçeneği ile istediğimiz klasöre bir bir ekliyoruz. Bu yöntemle tüm veritabanı nesnelerinin şablonlarını projenize dâhil edebilirsiniz.


Eklediğimiz nesneye özgü arayüz, şablon ve varsa yaptığımız hatalarla ilgili açıklamalar çalışmamızı oldukça kolaylaştırıyor.


Birden fazla proje yardımıyla veritabanı geliştirmek

Proje büyüdükçe geliştirme sürecine dâhil olan developerların sayısı veya birbirinden ayrı yönetilmesi gereken işlerin miktarı-çeşidi artacaktır. Bu noktada bir veritabanını birden fazla proje açarak geliştirebilir ve işleri daha üst hiyerarşide ayırabiliriz. Örneğin her bir Schema için ayrı bir proje başlatmak isteyebilirsiniz.

Bu şekilde çalışabilmek için YMagaza > Add > New Project seçeneği ile yeni bir proje başlatıyoruz ve YMagaza_2 adını veriyoruz. Şuanda YMagaza_1 ve YMagaza_2 projeleri bir birinden bağımsız projelerdir. YMagaza_2 projesine References > Add Database Reference… Yoluyla veritabanı referansı ekleyelim.

Add Database References penceresindeki Database Reference bölümünde, bu proje içerisinden işaret edilebilecek nesnelerin bulunduğu projeyi, system veri tabanlarından birini veya dacpac uzantılı olup içerisinde veritabanı iskeletini saklayan herhangi bir dosyayı seçebilirsiniz. Database Location bölümünde ise referansımız ile aynı veritabanı için mi yoksa aynı serverda farklı veritabanı veya farklı serverda farklı veritabanı için mi geliştirme yaptığınızı belirtebiliyorsunuz.


Örneğimizde aynı solution altındaki YMagaza_1 projesini referans ediyoruz ve her iki projenin de aynı veritabanı için sürdürüldüğünü ifade ediyoruz.

Bu sayede artık YMagaza_2 projesindeki bir tablo üzerinde çalışırken YMagaza_1 projesindeki Kategori tablosunda bulunan kolona erişip PK-FK ilişkisini hatasız kurabiliyoruz.


Nesnelerin bağlılıklarını görüntülemek

Bir veritabanı nesnesini nelerin kullandığını görüntülemek isteyebilirsiniz. Bunun için nesnenin üzerine gelip Find All References seçeneğini tıklamanız yeterli. Sonuç penceresinde tüm bağlılıkları listeleyebilirsiniz.


Bu örneğimizde YMagaza_1 isimli projedeki Kategori tablosunun bağlıklarını istedik. Sonuç listesinde YMagaza_2 projesindeki Uretim tablosuyla aralarında bir PK-FK ilişkisi olduğunu görüntüledik. Listeden ilgilendiğiniz yolu tıklayarak kodların bulunduğu sayfayı açabilirsiniz.
Benzer şekilde bir nesnenin tanımlandığı(oluşturulduğu) yere ulaşmak istediğinizde ise nesnenin ismini sağ tıklayıp Go To Definition seçeneğini kullanabilirsiniz.

Snapshot almak

Proje geliştirme süresince zaman zaman belli bir ana kadar olan değişiklikleri saklamak isteyebiliyoruz. Bunun için örneğin YMagaza_2 > Snapshot Project seçeneği ile projenin anlık görünümlerini dacpac paketleri halinde saklamak mümkün.

Publish ayarları

Visual Studio üzerinde yapısını inşa ettiğimiz veritabanını SQL Server’a gönderme işlemine Publish denir. Projeyi publish etmek için YMagaza_2 > Publish seçeneği ile açılan pencerede veritabanı bağlantı bilgilerini, publish scriptini ve davranışlarını ayarlayabilirsiniz. Aşağıdaki pencerede bağlantı cümlesini belirtip Publish butonunu tıklayarak veritabanının serverda inşa edilmesini sağladık.


Artık veritabanımız servera gönderildi ve SSMS üzerinden erişilebilir duruma geldi.


Import Database Özelliği

Projenin sıfırdan nasıl inşa edilebildiğini inceledik. Peki, var olan bir veritabanını da benzer şekilde geliştirmeye devam ettirebilir miyiz?

Bunun için açtığınız bir proje üzerinden (bu örnekte AdwCalisma isimli projede) AdwCalisma > Import yoluyla gelen seçeneklerden uygun olanını tercih ederek hazır yapıyı Visual Studio projesi kapsamına alabilirsiniz.


Buradaki örnekte Database seçeneği ile ilerlersek açılan pencerede gerekli bağlantı ayarlarını ve import opsiyonlarını belirttikten sonra Start butonunu tıklayarak yapının proje içerisine aktarımını başlatabiliriz.


Kısa süre içerisinde import işlemi tamamlanacak ve aşağıdakine benzer bir çalışma ortamı karşımıza çıkacaktır.


Schema Compare Özelliği

Proje geliştirirken takip edilmesi gereken bir başka şey ise iki yapı arasındaki değişikliklerin neler olduğudur. Bu ihtiyaca cevap olarak Schema Compare özelliği kullanılabilir. Bir başka yazımızda Data Compare özelliği ile birlikte incelemeyi planladığım bu özelliğe kısaca bir göz atalım.

Örneğimizde AdwCalisma > Schema Compare seçeneğiyle açılan sayfada karşılaştırmak istediğimiz kaynak ve hedefi belirtiyoruz. Ben bu örnekte proje içerisinde ProductCategory tablosunda birkaç değişiklik yaptım. Şimdi serverdaki veritabanı ile projemizdeki yapıyı mukayese edelim.


Kaynak kısmında projeyi, hedef kısmında serverdaki veritabanını gösterdikten sonra Compare butonu ile mukayese işlemini başlatıyoruz.

Kısa süre içerisinde analiz yapılıyor ve aşağıdakine benzer bir arayüz ile farklılıklar ifade ediliyor.


İsterseniz üst menüde bulunan Update butonunu kullanarak değişikliklerin hedefte uygulanmasını sağlayabilirsiniz.

Veritabanı inşası için kullanılan bu son yöntem, proje süresince doğabilecek neredeyse tüm ihtiyaçları karşılayabilmektedir. Ancak belki siz de benim gibi karma yöntemleri tercih etmek isteyebilirsiniz. Her ne kadar birçok kolaylık sağlasa da geliştirmeyi bir noktaya kadar SSMS üzerinde diagramlarla ilerletmek daha pratik geliyor bana.

Arayüzler beni kesmez kodlar benim işim diyorsanız Visual Studio içerisindeki SQL Database projesi sizin için biçilmiş kaftan demektir.

Örneklerimizde Visual Studio 2013 Ultimate kullandık. İhtiyacınız olan Visual Studio biraz da kendi ortamınıza bağlı olduğu için versiyon ve gereklilikler meselesini size bırakıyorum.


Faydalı olması dileğiyle…