问题是这样的:
我现在做的一个网站,需要有城市切换功能。
一个商户对应了一个城市列表。城市列表里有n个城市(n>0)
我想出的解决方案是,二进制映射的表示法:
比如:城市表里
        id     city
         1      北京
         2      上海
         4      南京
         8      深圳商户表的城市外键决定了:数量,和个体。
   比如:city_id=3;
     那么这个商户就有两个城市,分别是北京和上海。
      city_id=15;
         就是北京,上海,南京,深圳四个城市。但现在这样的方案出现的问题是:当城市数量快速增长的时候,数据库里的int 型已经不可能来表示他了。
      全国有3165个城市,2的3165次方,这个数字太恐怖了。
      当然我不会做这么多的城市。我预想的是支持1-200个城市。     我想找的答案是:如何改经此方案来支持200个以内城市或者更多。
                     或者其它比较轻量的解决方案。

解决方案 »

  1.   

    一般数据库的设计原则是城市表    id   city
         1    北京
         2    上海
         3    南京
         4    深圳
         5
         ..
         
    这样以序列号下去。不使用你那种二进制方式。然后再放一张商户城市关系表
    商户,城市
    1     1
    1     2
      

  2.   

    此外还有一种不太规范的设计,在一些特定的情况下也可以使用。城市表  id   city
       1  北京
       2  上海
       3  南京
       4  深圳
       5
       ..商户表
    ID,名称,。。,城市
    1     'AAA'                  '1,2'
    2     'BBB'                  '1,2,3,4'这种用分隔符把所有城市的ID合并存放在一个字段中。
    但这种方法不符合数据设计范式的要求。在某些特定情况下可用。
      

  3.   

    谢谢 ACMIN.
    看来还是得抽象出一层关系映射来。
    本来想直接把关系和实体聚合起来的,结果看来还得把关系和实体分离出来。