Tamam, şey çift:
- php bu ile ilgisi var. normalleştirme model verileri ile ilgilidir
- normalleştirme disk alanı tasarrufu ile ilgili değildir. Bu da veri bütünlüğünü korumak için bir yol olan, kolayca bakımı olduğunu böylece verileri düzenleyerek ilgili.
- normalleştirme tipik olarak birkaç aşamada ya da 'normal biçimlerde' de tarif edilmektedir. Uygulamada, ilişkisel veritabanı tasarımı insanlar genellikle sezgisel çoğu zaman 'doğru olsun'. Ama normal formlar haberdar olmak için hala iyi olduğunu ve bunların özellikleri nelerdir. Orada bu konuda birçok belge internet (fe http://en.wikipedia.org/wiki/Database_normalization) üzerinde olduğunu ve kesinlikle bir araştırma kendi yapmalıyım, ama en önemli aşamaları şunlardır:
unormalized veriler: Bu aşamada, veri ('ilişkisel') gerçekten tablo değildir. Orada gerçekten ne anlama tabular bir sürü tartışma ve uzmanlar birbirleriyle katılmıyorum. ama çoğu insan çok değerli özellikler (bir satır için bir değer olarak listeleri içerebilir = sütun) vardır veri durumunda normalleşmemiş olduğunu kabul, ya da durumda aynı depolamak için (= birden fazla sütun veya sütun birden fazla grup gruplar var tekrarlıyor veri tipi)
Example of multi-valued column: person (first_name, last_name, phonenumbers)
Here, phonenumbers implies there could be more phonenumbers, stored in one column
Example of repeating group: person(first_name, last_name, child1_first_name, child1_birth_date, child2_first_name, child2_birth_date..., childN_first_name, childN_birth_date)
Here, the person table has a number of column pairs (child_first_name, child_birth_date) to store the person's children.
Fatura ve nakliye için adresleri verilerin benzer parçaları olabilir, ancak her ikisi de sadece bir düzenin farklı bir yönünü temsil eden bir düzen için kendi ayrı rolü vardır: düzeni (shipping_address, billing_address) gibi bir şey, bir yinelenen grup olmadığını unutmayın. child1 aracılığıyla child10 yapamam - (Eğer önceden rezerve gerektiğini kaç grup asla bilemezsiniz) çocukların belirli roller yok, ve çocukların listesi değişkendir
Her iki durumda da, sütunlar çok değerli ve yinelenen gruplara, temelde "iç içe geçmiş tablo" bir yapıya sahip - bir tablo içinde bir tablo. Veri bunların hiçbiri ortaya çıkarsa 1nf (birinci normal form) olduğu söyleniyor.
1NF yapısal characeristics hakkında: verilerin tablo biçimidir. Tüm subsequenct normal formlar fazlalığını ortadan kaldırarak ile yapmak zorundayız. Aynı bilgi, bağımsız bir şekilde, birden çok kez depolandığı zaman Fazlalık oluşur. Fazlalık kötü: Bazı gerçeği değiştirmek istiyorsanız, birden fazla yerde değiştirmek zorunda. Eğer şans onlardan biri unutursanız, tutarsız veri var - veri kendisini çelişiyor.
Her 6NF kadar 1nf kadar daha yüksek bir normal forma, tüm yol açan, fazlalık ortadan kaldırabilir süreçlerin bir yeri vardır. Ancak, normalde en veritabanları yeterince 3NF (ya da denilen boyce-Codd normal formda, BCNF bir lsight varyasyon) Siz 2NF ve 3NF çalışmalıyım normalize, ancak prensibi çok basittir: bir tablo varsa, yeterince normalleştirilmiş:
- Tablo 1NF olduğu
- tablo bir anahtar vardır (ki gerekli olan değerler sütun veya sütun birleşimi ve hangi benzersiz bir satır tanımlar -. yani anahtar sütunlardaki değerlerin bu kombinasyonuna sahip tek bir satır olabilir)
- anahtar olmayan sütunları arasında fonksiyonel bağımlılıkları vardır
- anahtar olmayan sütunlar, anahtarın bir parçası üzerine işlevsel olarak bağlı değildir (ancak tüm anahtar üzerine tamamen işlevsel olarak bağlıdır).
fonksiyonel bağımlılık, bir sütunun değeri başka bir sütundan elde edilebilir anlamına gelir. Basit bir örnek:
order_item (order_id, ITEM_NUMBER, customer_id, product_code, product_description, tutar)
Kullanıcının (ITEM_NUMBER order_id) varsayalım anahtarıdır. product_code ve ürün tanımı birbirine bağlı işlevsel bağımlıdır: (ürün tanımı product_code bir fonksiyonu olduğu gibi) belirli bir product_code için, her zaman aynı ürün açıklamasını bulabilirsiniz. Sorun şimdi: Bir particualr ürün kodu için bir ürün tanımı değişiklikleri varsayalım, o product_code bize tüm siparişleri değiştirmek zorunda. tek ve tutarsız bir veritabanı var unutma.
Bunu çözmek için yol tuşu olarak (product_code) sahip olan, (product_code, product_description) ile yeni bir ürün tablo oluşturmak için, ve sonra yerine sırayla tüm ürün alanları saklamak, yalnızca içinde çarpım tablosundan bir satır bir referans olarak saklamak order_item kayıtları (bu durumda, order_item sadece çarpım tablosunda bir satır yukarı bakmak yeterlidir, hangi product_code tutmak ve product_description bulmak gerekir)
U görebilirsiniz sizin kadar, bu çözüm ile aslında (ürün sipariş olur her order_item tüm bu ürün açıklamaları depolayarak tarafından değil) yerden tasarruf yapmak ve daha fazla tablo olsun (order_item gelen ürün kopmuş) Ama hatırlıyor musun çünkü Diskspace tasarruf değil: daha kolay verileri korumak için yapım, böylece fazlalık ortadan kaldırmak çünkü öyle. şimdi sadece açıklamasını değiştirmek için ürün tablodaki bir satır değiştirmek zorunda çünkü