2010-10-26 19 views
13

Ich verstehe, dass das ORM in Django den ENUM-Typ in MySQL oder PostgreSQL nicht unterstützt, da dies ursprünglich eine MySQL-Erweiterung war und nicht über andere DB-Typen übertragbar war. Die beiden Optionen bestehen also darin, ein "Auswahl" -Argument für Ihr Modell zu verwenden oder eine Fremdschlüsselreferenz zu verwenden.Django Model - Auswahl gegen Fremdschlüssel?

Was sind die Vor- und Nachteile dieser Ansätze?

Für so etwas wie Geschlecht, gehe ich davon aus würden Sie „Auswahl“ verwenden, zB:

GENDER_CHOICES = (
    ('M', 'Male'), 
    ('F', 'Female'), 
) 
... 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

aber für so etwas wie Staatsnamen, was der Grund für und gegen die Verwendung einer separaten Tabelle, und Fremdschlüssel zu diesem Tisch?

state = models.ForeignKey(AustralianState) 

Unter welchen Umständen würden Sie einen gegen den anderen verwenden?

Cheers, Victor

Antwort

3

Sie sollten auch Fremdschlüssel berücksichtigen, wenn die Anzahl der möglichen Auswahlmöglichkeiten groß ist. Das ist einer der Gründe, FK für Länder oder Staaten zu verwenden. Andernfalls codieren Sie effektiv viele Daten in Ihrem Quellcode.

+0

Ist dies aus Leistungsgründen? Hmm, also für eine große Anzahl von Staaten, nehme ich an, dass eine FK-Lookup-Tabelle der richtige Weg ist? Und dann würden Sie nur die Zustände in einem Django-Armaturen auflisten? – victorhooi

+0

Es sind nicht so sehr die Performance-Gründe - die Leistung ist wahrscheinlich besser mit Tupeln, es sei denn, Sie betrachten mehr als ein paar tausend Möglichkeiten - es ist meist ein Wartungsproblem. Tatsächlich hat Django eine Vielzahl von Länder-/Staatsfeldern, die in Lokalitäten eingebaut sind, glaube ich. Und ich nehme an, Sie könnten ein StateField erstellen, das Sie in andere Dateien importiert haben. Vollständige Offenlegung: Ich bin mir ziemlich sicher, dass die Länder- und Statusfelder, die ich in Teilen meiner Apps verwende, tatsächlich Auswahlmöglichkeiten verwenden. Aber FK wäre auch eine gute Wahl. –

+0

Ich würde hinzufügen, dass in diesem Fall die Verwendung der Länder- und Zustandsabkürzung als Fremdschlüssel eher als eine inkrementierende Ganzzahl viel sinnvoller ist. –

14

Ich würde Entscheidungen verwenden, in denen die Entscheidungen im Laufe der Zeit nicht ändern würden. Wenn das der Fall wäre, wäre ein FK mit einem neuen Modell besser.

Verwandte Themen