SQL Server Veritabanları
Veritabanı geliştirmek ve tamamlamak için SQL Server veritabanı yapısını anlamak gerekir.
Veritabanı Tipleri
Her SQL Server, iki veritabanı tipine sahiptir. Bunlar Sistem Veritabanları ve Kullanıcı Veritabanları. Sistem Veritabanları, SQL Server hakkındaki bütün bilgileri tutar. SQL Server, Sistem Veritabanını, sistemi yönetmek için kullanır. Kullanıcı veritabanları, kullanıcının yarattığıdır. SQL Server�ın bir kopyası, bir veya daha fazla kullanıcı veritabanınını yönetebilir. Veritabanlarının her iki tipi de veriyi depolar.
Sistem ve Kullanıcı Veritabanları
SQL Server Setup kurulurken, SQL Server 4 Sistem Veritabanı ve 2 Kullanıcı Veritabanı yaratır. Kopyalama işlemleri için, SQL Server konfigüre edilirken distribution veritabanı kurulur.Aşağıda herbir veritabanı tanımlanmıştır:
Veritabanı |
Tanım |
Master |
Kullanıcı account�ları, sistem hata mesajlarını tutarak tüm kullanıcı veritabanlarını ve SQL Server işlemlerini kontrol eder |
Model |
Yeni kullanıcı veritabanları için kalıp ve örnekler sağlar. |
Tempdb |
Geçici tablolar için depo alanlar sağlar. |
Msdb |
SQL Server Aracısını destekler. Tasarlanmış bilgiler ve job için bir depo alanı sağlar. |
Distribution |
Kopyalamada kullanılan işlem verilerini tutar. |
Pubs |
Bilgi aracı olarak basit bir veritabanı sağlar. |
Northwind |
Bilgi aracı olarak basit bir veritabanı sağlar. |
User1 |
Kullanıcı tanımlı veritabanını teşhis eder. |
Uyarı: msdb veritabanını silme, SQL Server�ın pratikliğini azaltır.
Veritabanı Nesneleri
Bir veritabanı, veri, tablo ve diğer nesnelerin bir yığınıdır. Veritabanı nesneleri, veriyi tasarlamada ve veri güvenlik mekanizmasını tanımlamada yardımcı olur. Aşağıda SQL Server veritabanı nesneleri tanımlanmıştır:
Veritabanı Nesnesi |
Tanım |
Table |
Sütunlarla birleşen satır yığınlarını tanımlar. Nesnelerin adlarını, tiplerini, anahtar özelliklerini tutar. |
Veri tipi |
Bir kolon veya değişken için izin verilen veri değerlerini tanımlar. SQL Server veri tipleri sağlar. Ayrıca kullanıcılar veri tipleri yaratabilirler. |
Constraint |
Kolonlarda tanımlanmış olan değerleri korumak için kurallar tanımlar. Veri uyumunu yöneten standart bir mekanizmadır. |
Default |
Başka değer sağlanmamışsa, kolona, önceden tanımlanmış bilginin yerleştirilmesini sağlar. |
Rule |
Veri tipinde veya sütunda yerleştirilmiş olan geçerli değerleri tanımlayan bilgileri içerir. |
Index |
Veri alımı için hızlı erişim sağlayan depo alanıdır. Veri uyumunu yürütür. Gruplanmış indexlerde anahtar değerlerin mantıksal veya indexlenmiş kuralları fizikseldir. Gruplanmamış indexlerde mantıksal index kuralı, fiziksele uymaz. |
View |
Bir veritabanındaki viewlardan veya bir yada daha fazla tablolardan veri arama yolu sağlar. |
Stored Procedure |
Birlikte çalışan Transact-SQL ifade kümelerinin ismidir. |
Trigger |
Stored procedure�ların özel bir formu. Bir kullanıcı bir tablodaki veriyi değiştirdiği zaman otomatik olarak çalıştırılır. |
SQL Server Nesnelerinden Söz Etme
Bir SQL Server nesnesi iki şekilde tanımlanabilir.
1. Tam isim olarak server ismi, veritabanı ismi, owner ismi ve nesne ismi olarak 4 bölümden oluşur.
Formatı: server.database.owner.object (Fully Qualified İsmi)
SQL Server�da yaratılan her bir nesnenin tek bir fully qualified ismi olmalı. Yani aynı veritabanı içinde aynı owner�lara bağlı orders isimli iki tablo olabilir. Bunlar farklı owner�lara bağlı olabilir. Ayrıca sütun isimleri tablo veya view içinde tek olmalı.
2. Bölümlü olarak belirlenmiş isim; bir nesneden söz edilirken serverı, veritabanını ve ownerı her zaman belirtme zorunluluğu yok.
Formatı: server.database..object
Server�object
Bir nesne yaratılırken, ismin farklı bölümleri belirlenmemişse SQL Server aşağıdaki geçerli değerleri kullanır.
§ Server belirlenmemişse, lokal server göz önüne alınır.
§ Veritabanı belirlenmemişse, geçerli veritabanı göz önüne alınır.
§ Owner belirlenmemişse, LoginID ile bağlanan kullanıcı ismi göz önüne alınır.
Örnek: Bir kullanıcı, northwind veritabanında db_owner veya db_ddladmin rolünün bir üyesidir. Nesnenin owner�I olarak dbo kullanılabilir.
CREATE TABLE northwind.dbo.order_history
(OrderID INT
, ProductID int
, UnitPrice money
, Quantity int
, Discount decimal
)
Bir çok nesne yerel server�a gelmeyip daha çok Üç bölümlü isim kullanırlar.
Dört bölümlü isim genellikle stored procedure�leri çağırmak veya distributed (dağılmış) sorgular için kullanılır.
Sistem Tabloları
Sistem tabloları, veritabanlarındaki sistem ve nesneler hakkındaki bilgileri içerir ve metadata olarak adlandırılır. Metadata veri hakkındaki bilgilerdir.
Database Katalog
Her bir veritabanı, belirli veritabanı hakkındaki metadataları depolayan sistem tablolarını yığınlarını içerir. Sistem tabloları yığını veritabanı kataloğudur.
Sistem Katalog
Sadece master veritabanında bulunur. Tüm sistem veya diğer tüm veritabanları hakkındaki metadataları depolayan sistem tablolarını içerir. Sistem tabloları sys ön eki ile başlıyor.
Sistem Tablosu |
Veritabanı |
Fonksiyon |
Syslogins |
Master |
SQL Server�a bağlanabilen her bir login account�u için bir satır (row) içerir. |
Sysmessages |
Master |
SQL Server�ın döndürebildiği herbir sistem hatası için bir row içerir. |
Sysdatabases |
Master |
SQL Server üzerindeki herbir veritabanı için bir row içerir. |
Sysusers |
Bütün |
Bir veritabanı üzerindeki herbir SQL Server rolü, SQL Server kullanıcısı, WinNT grubu, WinNT kullanıcısı için bir row içerir. |
Sysobjects |
Bütün |
Bir veritabanındaki herbir nesne için bir row içerir. |
Metadata�nın Elde Edilmesi
Bir uygulama yazarak, sistem tablolarından metadata geri elde edilebilir. Bunun için sistem stored procedure�ları, sistem fonksiyonlarını, veya sistem supplied information schema views kullanılır. Bir sistem tablosu diğer veritabanı tabloları gibi sorgulanabilir. Sorgulanan sistem tablosunun script�I yazılamaz; çünkü eğer bir sistem tablosu gelecek versiyonlarda değiştirilirse yapılan script başarısızlığa uğrayabilir.
Uyarı: Kullanıcılar sistem tablolarını doğrudan değiştiremezler. Bir sistem tablosunu değiştirme, SQL Server�ın sistem başarısızlıklarını düzeltmesini imkansız hale getirebilir.
Sistem Stored Procedure
Veritabanı nesneleri ve server durumu hakkında bilgileri toplamak için büyük kolaylıklar sağlar. Sistem procedure�lar sp_ öneki ile başlar.
Sistem Stored Procedure |
Tanım |
Sp_help [object_name] |
Belirlenmiş veritabanı nesneleri üzerindeki bilgileri sağlar. |
Sp_helpdb [database_name] |
Belirlenmiş veritabanı üzerindeki bilgileri sağlar. |
Sp_helpindex [table_name] |
Belirlenmiş tablo için index üzerindeki bilgileri sağlar. |
Aşağıdaki örnek employee tablosundan bilgi almak için kullanılmıştır. Geçiş Parametresi
Sp_help employee
Sistem Fonksiyonları
Transact-SQL ifadeleriyle sistem tablolarının sorgulanması için bir metod sağlar.
Sistem Fonksiyonu |
Geçiş Parametresi |
Sonuçlar |
DB_ID |
İsim (Name) |
Veritabanı ID�sini |
USER_NAME |
ID |
Kullanıcı adını geri döndürür |
COL_LENGTH |
Sütun (Column) |
Sütun genişliğini geri döndürür. |
STATS_DATE |
Index |
belirlenmiş indexin son güncellendiği tarihi geri döndürür. |
DATALENGTH |
Veri Tipi |
Herhangi bir veritipi ifadesinin uzunluğunu geri döndürür. |
Aşağıdaki örnek UserId�si 10 olan kullanıcı ismini almak için kullanılmıştır. Geçiş Parametresi
SELECT USER_NAME(10)
Information Schema Views
Veritabanına yerleştirilmiş bütün veri nesnelerinin metadatalarını içerir. Information_schema öneki ile tanımlanır.
Information Schema View |
Tanım |
Information_schema.tables |
Veritabanındaki tabloların listesi |
Information_schema.columns |
Veritabanında tanımlanmış sütunlar üzerindeki bilgiler |
Information_schema.tables_ privileges |
Veritabanındaki tablolar için güvenlik bilgileri |
Aşağıdaki örnek; veritabanındaki tabloların bir listesini almak için kullanılmıştır. Geçiş Parametresi
SELECT * FROM information_schema.tables