Aracılığıyla paylaş


Normalleştirme

Mantıksal veritabanı tabloları ve bunların arasındaki ilişkileri de dahil olmak üzere, en iyi duruma getirilmiş bir ilişkisel veritabanı çekirdek tasarımıdır.En iyi veritabanı ve uygulama performans temeli iyi mantıksal veritabanı tasarım düzenleyebilirsiniz.Kötü bir mantıksal veritabanı tasarımı, tüm sistem performansını düşürür.

Tabloları ilgili biçimsel yöntemler kullanarak verileri birden fazla, ayrı bir mantıksal veritabanı tasarım normalleştirme kapsar.Birçok dar daha az sütun tablo ise normalleştirilmiş bir veritabanı özelliğidir.Daha fazla sütun içeren geniş birkaç tablo normalleştirilmiş veritabanının özellik olur.

Makul normalleştirme sık performansını artırır.Kullanışlı dizinler kullanılabilir olduğunda SQL Server sorgu iyileştiricisi tablolar arasında hızlı ve verimli birleşimleri seçerek en verimli olur.

Normalleştirme avantajlarından bazıları şunlardır:

  • Daha hızlı sıralama ve dizin oluşturma.

  • Çok sayıda kümelenmiş dizinler.Daha fazla bilgi için bkz: Kümelenmiş dizin tasarım yönergeleri.

  • Dizinler daha dar ve daha kompakt.

  • Tablo başına daha az sayıda dizinler.Bu, INSERT, update, performansını artırır ve delete deyimlerini.

  • Null değerler daha az ve daha az fırsat için tutarsızlık.Bu veritabanı compactness artırır.

Normalleştirme da artar, numarası ve veri almak için gerekli birleşimler karmaşıklığını artırır.Çok fazla tablolar arasındaki ilişkisel çok fazla karmaşık birleşimlerde performansı düşürür.Makul normalleştirme sık dörtten fazla tabloları içeren birleştirmeler kullanan birkaç düzenli olarak yürütülen sorguları içerir.

Bazı durumlarda, mantıksal veritabanı tasarım zaten sabit ve toplam tasarlanması gerçekçi değildir.Ancak, bu durumda bile büyük bir tablodaki seçerek daha küçük birkaç tablo normalize etmek mümkün olabilir.Veritabanına, saklı yordamlar erişilir, bu şema değişikliği uygulamaları etkilemeden oluşabilir.Değilse, şema değişikliği uygulamalardan gizleyen bir görünüm oluşturmak mümkün olabilir.

İyi tasarlanmış bir veritabanı sağlandığı

İlişkisel veritabanı tasarımını teorik olarak, normalleştirme kurallarını belirli tanımlayan, olması gereken öznitelikleri göstermek veya iyi tasarlanmış bir veritabanı yok.Normalleştirme kurallarını tam bir tartışma, bu konunun kapsam aşıyor.Ancak, ses veritabanı tasarımının elde etmek yardımcı olacak birkaç kural vardır:

  • Bir tablo, bir tanımlayıcı olmalıdır.

    Veritabanı tasarım teorisi, temel kuralı olan her tablo benzersiz satır tanımlayıcısı, bir sütun veya herhangi bir kayıt diğer her kaydı ayırmak için kullanılan sütunları küme olması gerektiğini tablo.Her tablo bir Kimliğe sahip olması sütun, ve iki kaydın aynı kimlik değeri paylaşabilirsiniz.Sütun veya sütunları bir tablo için benzersiz satır tanımlayıcısı olarak hizmet veren tablonun birincil anahtar olan.De AdventureWorks2008R2 veritabanı, her tablo içeren bir kimlik sütunu olarak birincil anahtar sütunu.Örneğin, VendorID için bir birincil anahtar Purchasing.Vendor tablo.

  • A tablo yalnızca tek bir varlık türü için veri depolamanız gerekir.

    İçinde çok fazla bilgi depolamak çalışıyor bir tablo verimli ve güvenilir veri yönetimini düşürür tablo.De AdventureWorks2008R2 örnek veritabanı, müşteri bilgilerini ve satış siparişi depolanır ayrı tablolar.Bu tasarım, satış siparişi hem de müşterinin tek bir tablo için bilgi içeren sütunlar olabilir, ancak bazı sorunlar için yol gösterir.Müşteri bilgileri, adı ve adresi, eklenen ve gerekir gereğinden her satış siparişi için saklanır.Bu veritabanındaki ek depolama alanı kullanır.Müşteri adres değişiklikleri, her satış siparişi için değişiklik yapılması gerekir.İçin son satış siparişi, ayrıca, bir müşteri kaldırılır Sales.SalesOrderHeader tablo, o müşteriye ait bilgiler kaybolur.

  • Null olabilecek sütunları bir tablo kaçınmalısınız.

    Tablolar için null değerlere izin vermek üzere tanımlanmış sütunlar olabilir.null değer, değer olduğunu gösterir.Yalıtılmış durumda null değerler için izin vermek kullanışlı olabilir, ancak dikkatli kullanmalıdır.Bu çünkü bunlar veri işlemlerini karmaşıklığını artırır özel işlem gerektirir.Null olabilecek birden fazla sütun içeren bir tablo ve birkaç satır sütun null değerlere sahip, bağlantılı başka bir tabloda bu sütunları yüklemeyi düşünmelisiniz birincil tablo.Birincil tablo verileri iki ayrı tablolarda depolayarak, tasarım basit ve hala bu bilgileri saklamak için zaman zaman gerek işlemek.

  • Bir tablo, yinelenen değerler veya sütun olmamalıdır.

    Tablo veritabanında bir öğe için bir bilgi belirli bir parçası için değerler listesi içermesi gerekir.Örneğin, bir ürün AdventureWorks2008R2 veritabanı satın alınan birden fazla satıcı.Yoksa bir sütun , Production.Product Tablo satıcının adı için bu sorunu. oluştururTek çözüm ise, tüm satıcılar için adını depolamak için sütun.Ancak, bu tek tek satıcılara listesini göstermek zorlaştırır.Yapısını değiştirmek için başka bir çözüm olan tablo ikinci satıcının adı için başka bir sütun eklemek.Ancak, bu yalnızca iki satıcılar için sağlar.Ayrıca, üç satıcıları bir kitap varsa, başka bir sütun eklemeniz gerekir.

    Tek bir sütunda değerler listesini saklamak zorunda olduğunu fark ederseniz veya gibi tek bir veri parçası için birden çok sütun varsa, TelephoneNumber1, ve TelephoneNumber2göz önüne alın koymak çoğaltılmış verileri başka bir tablodaki bir bağlantı ile geri birincil tablo.The AdventureWorks2008R2 database has a Production.Product table for product information, a Purchasing.Vendor table for vendor information, and a third table, Purchasing.ProductVendor.Bu üçüncü bir tablo yalnızca kimlik değerlerini ürünler ve ürünlerin satıcıların kimliklerini depolar.Bu tasarım bir ürünün satıcılara herhangi bir sayıda tablo tanımını değiştirme ve ürünler için tek bir tedarikçi ile birlikte kullanılmayan depolama alanı ayırma olmadan sağlar.