我试图决定如何存储一些地址信息。这就是我的想法(这是在Django模型的形式,但你应该能够阅读它)存储街道地址和邮政编码
class City(models.Model):
name = models.CharField(max_length=100)
province = models.ForeignKey(Province)
data_source = models.PositiveIntegerField(default=DataSources.USER)
latitude = models.DecimalField(max_digits=18, decimal_places=12, null=True, blank=True)
longitude = models.DecimalField(max_digits=18, decimal_places=12, null=True, blank=True)
feature_class = models.CharField(max_length=1, null=True, blank=True)
feature_code = models.CharField(max_length=10, null=True, blank=True)
population = models.BigIntegerField(null=True, blank=True)
elevation = models.PositiveIntegerField(null=True, blank=True)
time_zone = models.CharField(max_length=40, null=True, blank=True)
mod_date = models.DateTimeField(auto_now=True, auto_now_add=True)
class Province(models.Model):
code = models.CharField(max_length=2, primary_key=True)
name = models.CharField(max_length=100)
country = models.ForeignKey(Country)
class Country(models.Model):
code = models.CharField(max_length=2, primary_key=True)
name = models.CharField(max_length=100)
class Address(models.Model):
name = models.CharField(max_length=100)
street = models.CharField(max_length=200)
postal_code = models.ForeignKey(PostalCode)
class PostalCode(models.Model):
code = models.CharField(max_length=10)
city = models.ForeignKey(City)
data_source = models.PositiveIntegerField(default=DataSources.USER)
latitude = models.DecimalField(max_digits=18, decimal_places=12, null=True, blank=True)
longitude = models.DecimalField(max_digits=18, decimal_places=12, null=True, blank=True)
我已经有了一个完整的市,省,国家,邮政编码数据库。大部分用户只会输入地址。
这样,如果用户输入邮政编码,我可以为他自动填充城市,省份和国家/地区字段。但是如果我的数据过时或者不正确呢?然后,用户只需用正确的信息更新这些字段,然后我就可以相应地更新我的数据库。
但是,如果他输入其他人的邮政编码,然后更新城市到一些不正确的地方会发生什么?他只是打破了别人的地址。
所以,也许我应该将城市领域转移到地址类呢?但是,我不能再从邮政编码中查找城市。
那么,也许我应该只有两个模型中的城市?但现在我有重复。这仍然是最好的选择?
当城市跨越州或者邮政编码跨越城市或州(他们当然在美国)时,你会怎么做? – HLGEM 2011-01-31 19:00:14
@HLGEM:不知道他们这么做......那可能是有问题的。你能举个例子说明发生了什么?这意味着我需要在地址中存储城市和州。 – mpen 2011-02-01 02:43:08