时间:2011-01-06 19:09:58

标签: database relational-database

4 个答案:

答案 0 :(得分:2)

正常化绝对是最佳选择。数据库旨在以这种方式运行。是的,查询看起来可能很长,但并不是那么糟糕。它可能看起来像这样:

select * --or whatever fields you need
  from Customer
       left outer join City    on (Customers.CityID = City.CityID)
       left outer join State   on (City.StateID     = State.StateID)
       left outer join Country on (State.CountryID  = Country.CountryID)
 where CustomerID = 1234

答案 1 :(得分:0)

答案 2 :(得分:0)

答案 3 :(得分:0)

走标准化路线。连接表并不慢或复杂。每个表的PK都是一个带聚簇索引的整数。外键将具有索引。加入即将开始。

如果要在下拉列表中列出城市,则不需要重复项。您可以列出州内的所有城市。反规范化将使用“distinct”减慢查询速度,我保证你在去规范化路线上的速度会变慢。具有讽刺意味的?

但是有一个去标准化的情况。有数百万个地址。在您的应用程序中输入所有地址可能不太可行。因此,您将依赖于来自用户的自由文本输入。在这种情况下,您不关心确切的正确性或重复,您不得不接受由于无法通过详尽的数据进行验证而向您抛出的任何数据。而且你宁愿不打扰插入“查找”表,因为你不相信输入开始。

如果您需要超灵活性来处理不同的国家/地区,您可以选择重新草书模型。有些国家可能没有州,县等。它们都有自己的等级制度。