Veritabanımın üçüncü normal forma normalize edilip edilmediğini kontrol etmek için bir araç var mı?


20

Son zamanlarda normalleşmeyi öğrendim ve yeni bir şema uygularken bunun ne kadar önemli olduğunu anladım.

Veritabanımın 2NF veya 3NF uyumlu olup olmadığını nasıl kontrol edebilirim?

Manuel inceleme kesin bir seçenektir, ancak burada otomatik bir araç arıyorum.

Bir nokta ve tıklama aracı, bir tablo 3NF uyumlu hale getirmek için olası optimizasyonları vurgulamak daha bir şey arıyorum değilim. İyi örnek verilere ve / veya sütun adlarının semantik analizine dayanan istatistikleri kullanabileceğini tahmin ediyorum.


1
Umarım böyle bir araç yoktur. 2NF / 3NF'nin uygulanması gerekmez. Bir şema / model tasarlamak genellikle xNF'yi pencereden dışarı çeken pratiklikleri ve performans hususlarını dikkate almak zorundadır
Philᵀᴹ

2
Normalizasyonun gerçekte kullanılmadığı anlamına mı geliyor? Başlangıç ​​noktası olarak kullanmayı planladım ve performansı düşürdüğünde normalleştirmeyi düşüneceğim.
ack__

3
Şema tasarımı bir bilimden çok bir sanattır. Elbette uyulması gereken temel kurallar vardır, ancak bunu bir kez yaptıktan sonra neyin işe yarayıp neyin yaramadığı hakkında iyi bir fikir edinmeye başlarsınız. Craftmanship.
datagod

Phil ile aynı fikirde değilim. Normalleştirme bazen gitmenin yoludur. Diğer zamanlarda yıldız şeması daha iyidir. Ne yaptığınıza bağlıdır. Otomasyona değmeden önce çok fazla masaya ihtiyacınız olacaktı.
Walter Mitty

Yanıtlar:


24

Normalizasyon kesinlikle gerçek dünyada kullanılır ... ve umarım 3NF'nin sadece üçüncüsüdür ... şimdi ne var, 8? Ancak 3NF kolay bir hedef olmalıdır.

Ancak ... böyle bir araç olamayacağını söylemek isterim.

Normalleştirme, teknik olarak, her tablonun bir özelliğidir. Belirli bir veritabanında, farklı tablolar farklı normalleştirme düzeylerine sahip olabilir.

Her tablo gerçekleri temsil eder ... bazen sizi o şeyle ilgili diğer gerçeklere yönlendiren yabancı anahtarlar da dahil olmak üzere belirli bir şey türünün (kişi, hesap, sipariş, gönderi, ürün, konum) gerçekleri temsil eder.

Normalizasyon, gerçeklerin tablolarda ne kadar doğru ve verimli bir şekilde temsil edildiği ve tablonun tasarımının belirsiz ve gereksiz veri modellerini önleme yeteneği ile ilgilidir.

Bu nedenle, otomatik araçların kapsamı dışında olan gerçek olguların anlaşılması gerekmektedir.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

Tüm öğretim elemanlarının tüm dersleri öğrettiği ve her öğrencinin, her öğretim elemanından her ders için birden fazla ders olmayan ancak herhangi bir kombinasyon alabildiği bir dünyada, bu tablonun gerçekten 3NF'de olduğu söylenebilir. Gerçek dünyada, bu tablo için 3NF iddiası yapmak saçmadır.

3NF'de olmadığını anlamak, temsil ettiği gerçeklerin doğasını anlamayı gerektirir. Gerçekliğimizde, bu tablo 3NF olmayacaktır çünkü (diğer nedenlerin yanı sıra) konu ve eğitmen, öğrenci ile hiçbir ilgisi olmayan şekillerde ilişkilendirilmiştir. Eğitmenlerin veri tabanımızın başka bir yerinde depolanan dersleri öğrettiği derslerimiz varsa, neden diğer tablodan öğrencinin derse kaydolduğunu gösteren yabancı bir anahtar yerine her iki değeri de kopyalayalım ki? Eğitmen değiştirilirse, birden fazla yerde birden fazla kaydı değiştirmemiz gerekir.

Bir veritabanı ne kadar normalleştirilmişse, gerçek dünyayla ve kendisiyle o kadar tutarlı olur ve veritabanının gerçeklerinin yanlışlıkla yanlış olması daha zordur. Veritabanı tasarımı bir sanattır, ama kesinlikle bir bilim dadır.

Yazdığı her şeyle göz göze gelmeme rağmen, Chris Date'in ilişkisel modelin altında yatan teori hakkında dayanılmaz ayrıntılara giren kitabını, Veritabanı Tasarımı ve İlişkisel Teori: Normal Formlar ve All That Jazz'ı öneriyorum .


2
Bu ayrıntılı cevap için teşekkürler. Ancak, örneğinizin ardından, örnek verileri analiz eden bir aracın "eğitmen" değerlerinin çok tekrarlandığını algılaması ve başka bir tabloda görünmesi mümkün olmalıdır, bu nedenle bunun yabancı anahtar veya başka bir değişiklik için aday olabileceğini düşündürmektedir. Bu tablo 3nf uyumlu yapar, ya da bir şey eksik mi?
ack__

2
Doğru, ama anahtar kelime hala "önermek" tir. Bir araç, görünür artıklık arayarak yapısal değişiklikler önerebilir, ancak yine de gerçek bir fazlalık ve tesadüfi bir korelasyon görünümünün böyle bir aracın ayırt edilmesi zor olacağını savunuyorum. Verilerin gerçek dünyadaki doğası hakkında bilgi sahibi olunması gerekmektedir.
Michael - sqlbot 23:12

@ack__: 3. normal formda olmak ya da olmamak bir çiftin ya da bir ilişki kümesinin olmayan bir ilişkinin özelliğidir. Yabancı anahtar ilişkisi kurmanın 3. normal formla ilgisi olduğunu göremiyorum.
miracle173

Bence daha büyük sorun, çok sütunlu fonksiyonel bağımlılıkları belirlemenin sorunlu esp olmasıdır. değerler aynı olabilir ve yine de farklı varlıkları temsil ediyorsa (örneğin, bileşik anahtarların yer aldığı yerlerde). Bir tablo düşünün: (adres_metni, şehir, eyalet_profisi, posta_kodu, ülke). Şimdi bu normal değil. (şehir, eyalet_profisi) -> (ülke). Bu yüzden tamamen normalleştirmek için bunu en az üç tabloya ayırmalıyız, belki dört (posta_kodu işleme!) Ama bileşik anahtarlar bu sorunu anında algılamayı sorunlu hale getiriyor. Ayrıca comp. anahtarlar nf's fikri anahtar bu yüzden onları görmezden yok!
Chris Travers

Birisi neden "Bir öğrencinin sadece bir konuda ders alabileceği ve tüm eğitmenlerin tüm dersleri öğrettiği bir dünyada, bu tablonun gerçekten 3NF'de olduğu söylenebilir" diye açıklıyor. Öyleyse bu tablonun anahtarı 3NF'yi kırmaz mı (öğrenciler, eğitmen)? Her konuyu öğreten her öğretmen bize ne yardımcı olur?
Drew Verlee

5

İlişkisel teori geliştirmede biçimsel yöntemler kullanma noktasının bir kısmı, otomatikleştirilebilecek prosedürler geliştirmekti. Eminim CJ Tarih hemen çıkıyor ve Veritabanı Sistemlerine Giriş diyor .

1980'lerin sonunda veya 1990'ların başında piyasaya sürülen birkaç CASE aracı, ER diyagramlarını analiz ederek veya örnek verilerin istatistiksel analizini yaparak olası her 5NF şemasını türetebilir.

Visio Enterprise Architect (sanırım) bu çizgiler boyunca nispeten yeni bir araçtır.


Güzel. Gerçekten bir şemayı analiz etmek için her iki yolu da arıyordum (ER diyagramı ve örnek veri analizi). Visio dışında yeni bir yazılım biliyor musunuz? Benim için henüz bir lisansım yok.
ack__

1
Ancak ER diyagramlarınız aslında nesne modeli diyagramlardır. Bu, mevcut bir veritabanını alıp veritabanından normalleştirilip belirlenmediğini belirlemekle aynı şey değildir.
Chris Travers

2
Örnek veriler içeren tabloların analizi ve normalizasyon için öneriler Access'in bir özelliğiydi ve erken sürümlerde iyi hatırlıyorsam.
ypercubeᵀᴹ

@Chris: evet, sadece semantik analiz için ER diyagramlarından bahsediyordum.
ack__

@ ypercube: Bahşiş için teşekkürler, Access'e bir göz atacağım.
ack__


2

Bunu yapmak için bir araç yazabiliyorsanız, yine de iş yapmak için manuel inceleme yapılması gerektiğini düşünüyorum. normal formlar fonksiyonel bağımlılıklar temelinde tanımlanır ve bunlar sadece verilerin denetlenmesiyle belirlenemez. Başka bir deyişle, fonksiyonel bir bağımlılığın olup olmadığını belirlemek için tümdengelimsel bir mantık meselesidir.


Gerçekten yapmak için bazı manuel inceleme olacak, bir aracın tam otomatik olarak yapmasını beklemiyorum. Ama eminim ki işin çoğu DB'deki veriyi (en azından örneklerini) ve / veya alan adı / türünü analiz ederek otomatikleştirilebilir.
ack__

1
Nasıl? Normalleştirme birleşim bağımlılıkları ve fonksiyonel bağımlılıklar üzerinde tanımlanır. İşlevsel bir bağımlılık temel olarak kolayca tanımlanabilir: bir süperkinin olası her değeri için, işlevsel bağımlılıkta tam olarak bir değer vardır. Verilerin gözden geçirilmesini otomatikleştirerek oraya gidemezsiniz, çünkü mevcut kümeniz için işlevsel bir bağımlılık gibi görünen şey olması, yeni bir anahtarın uyumlu olacağı anlamına gelmez. Eski korelasyon ve nedensellik bölünmesine çok benzer. Şu anda veritabanında ne olduğunu gözlemleyerek işlevsel bir bağımlılık yaratamazsınız.
Chris Travers

2
en azından bir araç, bir ilişkinin var olduğunu önerebilir. veri örneğinin kalitesi ve boyutu yeterince büyükse, böyle bir tahminin doğruluğu pratik amaç için yeterince yüksek olacaktır.
miracle173

Olabilir. Ama oldukça cömert ilişkisel-tasarım bilge olan gerçek bir örnek alalım: adresler. Posta adresleri nasıl normalleştirilmelidir? Kaç tablo önerilmelidir? 3NF anlayışımla ülkeler, eyaletler / iller ve şehirler için tablolara ihtiyacınız var. Posta kodu / şehir arızaları mantıklı olup olmadığını bilmiyorum ama muhtemelen. Ancak mevcut verileri analiz edip (şehir, eyalet) -> ülkesini nasıl belirliyorsunuz? Posta kodlarının küresel olarak bu yapılarla ilgili olup olmadığını nasıl belirlersiniz?
Chris Travers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.