我想知道我應該如何爲我的城鎮,縣,省設計數據庫。數據庫設計 - 單位或多元
我有2個想法應該如何工作。
思想1 - 簡單:
每個這些類型的應被存儲爲單獨的表。
class Town(models.Model):
name = models.CharField(max_length=128)
slug = models.SlugField()
voivodeship = models.ForeignKey("Voivodeship", null=True, blank=True)
county = models.ForeignKey("County", null=True, blank=True)
town_type = models.ForeignKey("TownType", null=True, blank=True)
population = models.PositiveIntegerField(null=True, blank=True)
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
class County(models.Model):
name = models.CharField(max_length=128)
voivodship = models.ForeignKey("Voivodeship", null=True, blank=True)
type = models.CharField(max_length=64)
class Voivodeship(models.Model):
name = models.CharField(max_length=128, blank=False, null=True)
slug = models.SlugField(editable=False)
date_updated = models.DateField(null=True, blank=False)
shortcut = models.CharField(max_length=16)
理念2 - 更加複雜:
的想法是創建所有的地方1個表,並創建它們之間的內在聯繫。
class Location(MPTTModel):
name = models.CharField(max_length=256, null=True, blank=False)
slug = models.SlugField(editable=False)
shortcut = models.CharField(max_length=16, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
source = models.PositiveIntegerField(choices=SOURCE_CHOICES)
# Geonames metadata
geoname_id = models.CharField(max_length=256, null=True, blank=False)
alternatenames = models.TextField()
feature_class = models.CharField(max_length=2, null=True, blank=True)
# Teryt metadata
# first_order_division = models.ForeignKey("self", null=True, blank=True, verbose_name="Województwo")
# second_order_division = models.ForeignKey("self", null=True, blank=True, verbose_name="Powiat")
# third_order_division = models.ForeignKey("self", null=True, blank=True, verbose_name="miasto")
# fourth_order_division = models.ForeignKey("self", null=True, blank=True)
type = models.PositiveIntegerField(choices=LOCATION_TYPE_CHOICES, null=True, blank=False)
subtype = models.ForeignKey("self")
# Location metadata
lng = models.FloatField(null=True, blank=True)
lat = models.FloatField(null=True, blank=True)
population = models.PositiveIntegerField(null=True, blank=True)
country_code = models.CharField(max_length=2, null=True, blank=True)
在可靠性,速度,添加和更新記錄方面,哪一個長期運行效果最好?
我應該注意什麼?
沒有關於你想要達到什麼的更多信息,我會選擇第二個選項。 – yuvi
你想要做什麼? 「內部關係」是什麼意思? –
@SamD內部關係 - 'subtype = models.ForeignKey(「self」)' – miki725