2010-10-26 133 views
13

我明白,在Django中,ORM不支持MySQL或PostgreSQL中的ENUM類型,因爲這最初是一個MySQL擴展,並且不能跨其他數據庫類型移植。因此,這兩個選項是對模型使用「選擇」參數,或使用外鍵引用。Django模型 - 選擇與外鍵?

這些方法的優缺點是什麼?

對於像性別,我想你會用「選擇」,例如:

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

然而,對於類似國家的名字,是什麼支持和反對使用一個單獨的表的原因,和外鍵到那張桌子?

state = models.ForeignKey(AustralianState) 

在什麼情況下你會使用其中一種?

乾杯, 維克多

回答

3

當潛在選擇的數量很大時,您還應該考慮外鍵。這是考慮將FK用於國家或州的原因之一。否則,你實際上是在源代碼中對許多數據進行硬編碼。

+0

這是出於性能的原因?嗯,對於很多州來說,我想FK查找表是要走的路嗎?然後你只需在Django裝置中列出狀態? – victorhooi 2010-10-26 06:28:47

+0

這不是性能方面的原因 - 用元組的性能可能會更好,除非你看到的選擇多於幾千個 - 它主要是維護問題。事實上,我相信Django在地區內有很多國家/州的字段。我想你可以創建一個你導入到其他文件的StateField。充分披露:我很確定我在我的應用程序的某些部分使用的國家/地區和州/地區實際上確實使用了選擇。但FK也是一個不錯的選擇。 – 2010-10-26 18:22:30

+0

我想補充一點,在這種情況下,使用國家和州縮寫作爲外鍵,而不是遞增整數,這使得更有意義。 – 2010-10-26 18:23:25

14

我會用選擇這裏選用不會隨時間而改變。如果他們願意,一個新模型的FK會更好。