2016-03-29 15 views
0

Birçok kez biz ben gibi aynı veritabanındaki diğer sorunları çözebilir bu bir kategori tasarımınınKategori ağacı DB tasarımı ne kadar verimli?

car(id, tag, year, make_category_id, model_category_id) 
    category (id, name, description, parent_category_id) //this works like a tree 

ile bu çözmeye çalışıyorum

car(id, tag, year, make_id, model_id) 
    make(id, name) 
    model(id, name, make_id) 

bu senaryoyu bulundu normalleştirmek zaman:

Bu nedenle, tüm kategorileri aynı tabloya yerleştirmek bana bir ağaçta süresiz olarak kategori oluşturma esnekliği verir, ancak sorum s: Bu yaklaşım ne kadar etkili? Teşekkür

Category Table

Bu Erişim dbm için değil ama formlara Combo kutuları doldurmak erişimde SQL hızlı testini çalıştırın. içinde

SELECT c.name AS Category, category.name AS Subcategory, category.id 
    FROM category AS c INNER JOIN category ON c.id=category.parentcategory 
    WHERE c.[name]='Vehicle';//CB populated with subcategories from Vehicle parent category 

ve açılan kutu modeli: Birlikte yapmak açılan kutu doldurulan araç için bir formda

SELECT c.name AS Category, category.name AS Subcategory, category.id 
    FROM category AS c INNER JOIN category ON c.id=category.parentcategory 
    WHERE c.[name]='Email';//CB populated with subcategories from Email parent category 

: E-posta yoluyla temas ben nüfuslu-posta türü açılan kutu için bir formda

Aynı araç formu ile dolduruldu:

SELECT c.name, c.id 
    FROM category AS c 
    WHERE (((c.parentcategory)=[Forms]![Car]![Combo38]));//CB populated with subcategories from Make selected parent category 
+0

Kişisel tasarımı özellikle verimli ve bazı veritabanlarında oldukça zor değildir:

iyi bir başlangıç ​​olarak, burada SimpleTalk sitesinde Phil Factor tarafından konuyla ilgili bir makale. Yalnızca ebeveyn yerine, kategorilerin tam yolunu ekleyin. Bu çok daha verimli. –

+1

@GordonLinoff: Deneyimlerim sırasında (bu model için gerekli olan) yinelemeli sorgular oldukça verimlidir - ya da en azından tüm kullanım durumlarım için yeterince verimli. Tam yolu depolamak, hiyerarşiyi _update_ yapmanız gerektiğinde, aslında ** çok ** verimsizdir. [Http://modern-sql.com/slides] [http://modern-sql.com/slides] destekleyici olan DBMS _not_ istisnasıdır, günümüzde kural değil –

+0

Modeli anlıyorum, ama sorunun ne olduğunu açıklamıyorum ...? –

cevap

0

“One True Lookup Table” adlı bir OTLT varyasyonu çarptı. İnternette, bunun neden bir Kötü Şey olabileceğini detaylı olarak tartışan birçok makale var. Google “Tek Doğru Arama Tablosu”, hatta sadece OTLT, bir çift okuyor ve bunun şu anda üzerinde çalıştığınız şey için uygun olup olmadığını kendiniz belirleyin. https://www.simple-talk.com/blogs/2008/05/29/when-the-fever-is-over-and-ones-work-is-done/

+0

Muhtemelen haklısınız, bu yüzden bunu yönetmek için yeterince verimli bir yol var. Veri türlerinin, hiyerarşinin veya nesnelerin yerine koymaya çalışmıyorum ve bunun benzersiz bir Fikir olduğunu düşünmüyorum, ancak kullanıcılar bazen uçmak istediği için bir kategori şemasına ihtiyacım var. Bu yüzden bende bu model var: insanların dinamik olarak yönetmek istedikleri ve sadece ids ve metinlerle farklı tablolar oluşturdukları birçok terim; Bunu kategoriler veya kavramlar olarak görmek kötüdür? Herhangi bir şekilde zor, teşekkürler. –

+0

Veri özniteliği kümesi başına bir özel sistem“tek beden herkese uyar” sistemi kısa vadeli bir sorundur, fakat (bildirimsel ilişkisel bütünlüğün yanı sıra) daha büyük bir sorun uzun vadede nasıl çalışır? Sayısız kümeden değerler eklendikçe (ve kaldırıldı/devre dışı bırakıldı) düzgün çalışmaya devam ediyor mu? Verilerin, kullanılması gerekecek şekilde kullanılması basit mi yoksa verimli mi, yoksa gerekli programlama, yeni gereksinimler ortaya çıktığında sistemi büyütmek veya değiştirmek için bir engel oluşturuyor mu? –

+0

Kod ve yapıların oluşturulması iyi ve güzel, ancak üç Ms: Yönetim, Bakım ve Değişiklik göz ardı etmeyin. –