2011-01-31 99 views
1

我試圖決定如何存儲一些地址信息。這就是我的想法(這是在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) 

我已經有了一個完整的市,省,國家,郵政編碼數據庫。大部分用戶只會輸入地址。

這樣,如果用戶輸入郵政編碼,我可以爲他自動填充城市,省份和國家/地區字段。但是如果我的數據過時或者不正確呢?然後,用戶只需用正確的信息更新這些字段,然後我就可以相應地更新我的數據庫。

但是,如果他輸入其他人的郵政編碼,然後更新城市到一些不正確的地方會發生什麼?他只是打破了別人的地址。

所以,也許我應該將城市領域轉移到地址類呢?但是,我不能再從郵政編碼中查找城市。

那麼,也許我應該只有兩個模型中的城市?但現在我有重複。這仍然是最好的選擇?

+1

當城市跨越州或者郵政編碼跨越城市或州(他們當然在美國)時,你會怎麼做? – HLGEM 2011-01-31 19:00:14

+0

@HLGEM:不知道他們這麼做......那可能是有問題的。你能舉個例子說明發生了什麼?這意味着我需要在地址中存儲城市和州。 – mpen 2011-02-01 02:43:08

回答

1

恕我直言,你可以保持設計。

如果你的城市不正確,你的用戶會更新它。如果您認爲用戶也可能錯了,只需等待X人使用第一位用戶提供的相同信息更新您的數據,然後相應地更新您的數據庫。

1

我正在保留設計,並在(郵政編碼,城市)和(城市,省)上設置唯一的約束。這樣,如果相同的條目泄漏到另一個區域,它可能會出現兩次。

3

不是。你正在混合兩個不同的功能方面。

  1. 標準化您的數據以避免重複。否則你的數據庫就會癱瘓。

    • 當然,你要允許跨州界的城市,具有兩個PST碼鎮等
  2. 安全。爲什麼你會允許任何人更新引用(組成地址的靜態數據表)?這應該保留給管理員用戶。並且需要定期更新您當地議會的參考表格或其他內容。

相關問題