2009-08-26 20 views
0

Ich muss verschiedene Informationen über einige Filme, Bücher, Spiele und vielleicht andere Medien speichern. Beginnend vom Verlag zur Disc-Zählung in der DVD-Box. Zuerst habe ich über das abstrakte Item Modell mit Kindern Buch, Film, Spiel nachgedacht. Aber es ist alles hart codiert und nicht sehr skalierbar, denke ich. Was wäre, wenn ich einen neuen Artikeltyp hinzufügen müsste?Django Modell Design Fragen

Dann habe ich über virtuelle Felder hier gelesen Django - designing models with virtual fields? , die meine Aufmerksamkeit bekommen. Aber sieht DB schwer und nicht sehr suchbar aus, irre ich mich?

Was sind die besten Techniken für solche Fälle?

Antwort

1

Ich denke, Sie wollen eine konkrete Item Oberklasse (da es wahrscheinlich gemeinsame Felder, dh Titel, Copyright_Datum, Herausgeber, etc) und Unterklassen für jeden Subtyp (und weitere Unter-Unterklassen, wenn Sie möchten, z. B. von Toy zu ActionFigure mit dem Feld number_of_joints) unter Verwendung von multi-table inheritance.

Wenn Sie nur das Item-Modell abfragen, ist dies schnell, da Djangos ORM nicht mit den anderen Tabellen verbunden ist (und Item-Objekte zurückgibt, die dann durch Verweis auf item_klassname in ihren "nativen" Typ konvertiert werden können) . Ebenso können Sie jede der Unterklasse-Modelle individuell mit einiger Effizienz abfragen.

Auffindbarkeit In Bezug auf, wenn Sie eine Indexer Effizienz verwenden spielt keine Rolle, zu viel, da die Indizierung selten geschieht.