SQL SERVER (Veritabanı Tasarımı)

Son güncelleme: 01.11.2010 22:53
  • İlişkisel veritabanı sistemi, veri bütünlüğünün sağlanması, bilgi tekrarının önlenmesi, verilerin doğru ve etkin biçimde kullanımını sağlar. Veritabanı tasarımı için kullanılabilecek evrensel geçerliliği olan metotlar yoktur. Ancak bilgi, yetenek ve tecrübe ışığında iyi bir vertabanı tasarımı yapılabilir. İlişkisel veritabanını çok iyi bilmek gerekir. Veritabanı normalizasyon kurallarını bilmekte fayda vardır. Bu kurallar, tasarım aşamasında yol göstermek yerine hangi şartlara uygun tasarım yapılması gerektiğini anlatır.

    Bazen, bu kurallardan vazgeçmek durumunda kalınsa da veritabanında saklanacak verilerin hacmi arttıkça bu kuralların sağlanmasında fayda vardır.

    1. Nesnelerin Tanımlanması:


    Bir veritabanı projesinde öncelikle nesneler tanımlanmalı. Nesne, çeşitli özellikleri bulunan bir varlıktır. Örneğin; Öğrenci Bilgi Sistemi projesinde öğrenciler, dersler, eğitmenler birer nesnedir.

    2. Tanımlanan Her Nesne İçin Bir Tablo:

    Tablo oluşturma, kağıt üstünde sembolik olarak gösterilebilir veya doğrudan MS SQL Server, Oracle, ... gibi kullanılmakta olunan Veritabanı Yönetim Sisteminde de oluşturalabilir. Her bir nesne için oluşturulacak tablo içereceği veriyi en iyi anlatan bir isimle ve tekil isimle oluşturulmalı. Bu daha anlaşılır bir tasarım ve kodlama aşamasında kolaylık sağlayacaktır. Ama proje tamamlanıncaya kadar bu tablolar üstünde muhtemel değişiklikler olacaktır.

    3. Her Tablo İçin Bir Anahtar Alan:

    Bir veritabanında en çok erişilen nesne genellikle tablolardır. Veritabanındaki herhangi bir veriye erişmeden önce tabloya erişilir. Hangi tabloları oluşturacağına karar verildikten sonra tabloda yer alacak her bir kaydı bir diğerinden ayırabilecek bir sütuna ihtiyaç duyarız. Örneğin bir öğrenci bilgisine erişilmek istendiğinde, bu öğrencinin hangi öğrenci olacağını çok iyi anlatılabilmeli. Öyle ki başka hiçbir öğrenci ile karışmamalı. Bunun için, bir alanı birincil anahtar alan olarak belirlenmelidir.

    Anahtar alan seçelirken, doğal alanlar seçilmesinde fayda vardır. Örneğin öğrenciler ile iligili bir tablo yaparken öğrenci numarası anahtar alan olabilir. Çünkü aynı okulda, aynı numaradan bir öğrencinin daha bulunması söz konusu değildir.

    4. Diğer Alanların Eklenmesi:

    Tablo adı ve anahtar alanı belirlenen nesnenin atmanız hangi özelliklerinin tabloda yer alması gerektiği konusunda karar verdikten sonra her bir özelliği için bir alan (sütun) eklenir.

    En başa birincil anahtar olarak belirlenen alanı eklemek bir kural olmasa da tablonun kolay anlaşılması ve göze hoş görünmesi bakımından tercih edilebilir.

    Genellikle, yapay birincil anahtar alanlar tablo adı ile başlar. Örneğin öğrenci bilgileri tablosu (OGRENCI) tablosu için OGRENCI_NO gibi.

    5. Tekrarlanan Nesne Özellikleri İçin Ek Tablolar:

    Veri tekrarı varsa tasarımda hata var demektir. Mevcut tablonun en az bir tabloya daha ayrılması gerekiyor demektir.

    Malesef, her projeye uyacak evrensel bir veritabanı tasarım tekniği yoktur. Dolayısıyla her şey belli bazı kurallar etrafında ne kadar detaylı düşünülebilirse o kadar çok başarım sağlanabilir. Her tasarım bir önceki tasarımdan daha da iyi olacaktır. Çünkü bilgi birikimi, yetenek ve tecrübe biraz daha artmıştır.

    Örneğin, dersler nesnesi için tanımlanan tabloda zorunlu, seçmeli gibi ders tipleri olsun. Bir ders için birden fazla ders tipi tanımlayabilme:

    Bu sorunu çözmek için ilk akla gelen şey, ders için, zorunlu, seçmeli diye iki alan daha eklemek. Ama her ders ya seçmelidir veya sorunludur. İki alanadan biri hep boş kalacaktır. Diğer yandan, yeni bir ders tipi tanımlamak gerektiğinde bu bilgi nereye yazılacak? Aynı alana mı? Ya da her tip için yeni bir alan mı açılmalı? Bunlar, veritabanı tasarımının doğasına terstir.

    Veri tekrarı ve veri bütünlüğünün bozulmaması için doğru çözüm ders tipleri için yeni bir tablo oluşturup ders tipi bilgilerini burada tutmaktır.

    6. Anahtar Alana Bağlı Olmayan Alanların Belirlenmesi:

    İlişkisel veritabanında, tablodan herhangi bir tek kayda erişmek için mutlaka bir farklı özellik sağlanmalıdır ve bu özellik de anahtar alan tarafından sağlanır. Ancak bazen, anahtar alan ile aynı satırda yer aldığı halde, anahtar alan ile birebir ilişkisi olmayan bir alan yer alabilir. Bu türden alanları elimine edip ayrı tablolara ayırmak gerekir.

    7. Tablolar Arasındaki İlişki:

    Tablolar arasındaki ilişki, her biri bir nesnenin özelliklerini içeren tablolar göz önüne alınarak çıkarılıabilir. Örneğin öğrenci, dersler, harç ve staj tabloları arasındaki ilişki aşağıdaki gibi çıkarılabilir:

    OGRENCI.OGRENCI_NO (1)---(N) DERSLER.OGRENCI_NO
    OGRENCI.OGRENCI_NO (1)---(N) HARC.OGRENCI_NO
    OGRENCI.OGRENCI_NO (1)---(N) STAJ.OGRENCI_NO

    İki tablo arasında ilişkiyi sağlayan alanların aynı adda olması zorunluluk değildir. Teorik olarak tabloları istediğiniz herhangi iki alanları üstünden birleştirebilir. Ancak, DERSLER tablosundaki DERS_KODU ile OGRENCI tablosundaki OGRENCI_NO alanını birleştirildiğinde hiçbir işe yaramayacak anlamsız bir ilişki olacaktır.

    Bu ilişkileri analiz ederken, her bir alanın hangi tablo için birincil anahtar alan, hangi tablo için yabancı anahtar olduğunu belirlemek, daha sonra fiziksel olarak veritabanını tasarlarken işi kolaylaştıracaktır. Hatta bu bilgiler bir şema üstünde de gösterilebilir. İşte bir çok veritabanı yönetim sistemi tarafından sağlanan örnek bir şema:

    noimage

    Makale içinde kısmen örnek verilen projenin SQL Server 2000 üstünde görünen diyagramından bir kesit
#13.01.2007 16:47 0 0 0
  • tsk
#24.09.2007 23:40 0 0 0
  • sql programı nasıl kurulur nasıl kolayca ogrenebılırm bu konuda bıgısı olan arkadasım varsa bana yardımcı bılgıler maıl atarlarsa sevınırım sımdıden tsk ederım
#12.10.2007 21:09 0 0 0
  • sql programı neyini öğrenmek istiyorsan konu açarsın bilen arkadaşlar sana yardımcı olmaya çalışır ama bu şekilde olmaz

    Nasıl kolay öğrenebilirim kolay hiç birşey yoktur en kolay şey yemek yemektir çiğnemeyince gitmiyor sen çaba gösterirsen herşey kolaylaşır
#20.10.2007 16:24 0 0 0
  • Teşekkürler...!
#09.11.2007 21:27 0 0 0
  • teşekkürler güzel paylaşım
#13.12.2007 14:05 0 0 0
  • paylasım icin tesekkurler
#15.12.2007 13:37 0 0 0
  • teşekkürler
#26.12.2007 23:02 0 0 0
  • Payla$ım iÇin t$k...
#29.12.2007 12:35 0 0 0
  • selam arkadaşlar
#16.01.2008 19:31 0 0 0
  • ellerine saglık,paylaşım güzel olmuş....
#03.03.2008 10:15 0 0 0
  • tşkler
#13.03.2008 16:57 0 0 0
  • tşkler
    iyi paylasım
#13.03.2008 16:59 0 0 0
  • Paylaşımınız için çok teşekkürler
#29.03.2008 15:34 0 0 0
  • dostum emğin için tşkler.
#30.03.2008 19:30 0 0 0
  • saol
#16.04.2008 20:25 0 0 0
  • teşekkürler
#16.04.2008 20:41 0 0 0
  • tşk ler
#25.04.2008 18:42 0 0 0
  • Teşekkürler
#27.05.2008 13:29 0 0 0