2016-03-29 4 views
0

Viele Male, wenn wir normalisieren wir dieses SzenarioWie effizient ist das Kategoriebaum-DB-Design?

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

fanden diesen Ich versuche, mit einer Kategorie Design

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

mit dieser zu lösen ich wie anderen Problemen in der gleichen Datenbank lösen kann:

Also, alle Kategorien in der gleichen Tabelle zu setzen gibt mir die Flexibilität, Kategorien unbegrenzt in einem Baum zu erstellen, aber meine Frage ich s: Wie effizient ist dieser Ansatz? Dank

Category Table

Dies ist nicht für Access dbm aber ich laufe schnellen Test von SQL in Access Combo-Box auf Formulare auszufüllen.

in einem Formular zum E-Mail-Kontakt I bevölkerten E-Mail-Typ Combo-Box mit:

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 

für Auto in einem Formular I make Kombinationsfeld bevölkert mit:

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 

und Combo-Box-Modell in der Das gleiche Fahrzeug ist mit

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

Ihr Entwurf ist nicht besonders effizient und ziemlich schwierig, in einigen Datenbanken. Geben Sie anstelle des übergeordneten Elements den vollständigen Pfad für die Kategorien ein. Das ist viel effizienter. –

+1

@GordonLinoff: Nach meiner Erfahrung sind rekursive Abfragen (die für dieses Modell benötigt werden) ziemlich effizient - oder zumindest effizient genug für alle meine Anwendungsfälle. Das Speichern des vollständigen Pfads ist tatsächlich ** sehr ** ineffizient, wenn Sie die Hierarchie aktualisieren müssen. DBMS _not_ Unterstützung [moderne SQL] (http://modern-sql.com/slides) sind die Ausnahme, nicht die Regel heutzutage –

+0

Ich verstehe das Modell, aber ich bin nicht klar auf, welches Problem es löst ...? –

Antwort

0

bestückt Sie haben eine Variante von OTLT, der "One True Lookup Table", gefunden Es gibt viele, viele Artikel im Internet, die im Detail diskutieren, warum dies ein Bad Thing sein kann. Google "One True Lookup Table", oder auch nur OTLT, lesen ein paar und bestimmen selbst, ob dies für das, woran Sie gerade arbeiten, passend ist.

Als guter Anfang, hier ist ein Artikel zum Thema von Phil Factor auf der SimpleTalk Website: https://www.simple-talk.com/blogs/2008/05/29/when-the-fever-is-over-and-ones-work-is-done/

+0

Wahrscheinlich haben Sie Recht, also gibt es eine ausreichende effiziente Möglichkeit, dies zu verwalten. Ich weiß, dass ich nicht versuche, Datentypen, Hierarchie oder Objekte zu ersetzen, und ich denke nicht, dass dies eine einzigartige Idee ist, aber ich brauche ein Kategorieschema, weil die Benutzer manchmal Konzepte ändern oder hinzufügen wollen. Also habe ich dieses Muster: viele Begriffe, die die Leute dynamisch verwalten wollen und verschiedene Tabellen nur mit IDs und Texten; ist es schlimm, das als Kategorien oder Konzepte zu sehen? Jeder Weg ist schwierig, danke. –

+0

Ein dediziertes System pro Datenattributsatz vs.ein "one size fits all" -System ist das kurzfristige Problem, aber (neben der deklarativen relationalen Integrität) ist ein größeres Problem, wie funktioniert es auf lange Sicht? Funktioniert es weiterhin ordnungsgemäß, wenn Werte aus den unzähligen Sets hinzugefügt (und entfernt/deaktiviert) werden? Ist es einfach und effizient, die Daten so zu verwenden, wie sie benötigt werden, oder wird die notwendige Programmierung ein Hindernis für das Wachstum oder die Änderung des Systems, wenn neue Anforderungen eintreffen? –

+0

Erstellen von Code und Strukturen ist alles gut und gut, aber übersehen Sie nicht die drei Ms: Management, Wartung und Modifikation. –

Verwandte Themen