关系数据库中要记录国家、省份、城市、县区 四种信息,他们之间有对应关系。请问应该设计成四个表的形式还是像一般的多级目录的形式存放在一个表中?他们之间有什么优缺点,或者有没有更好的数据库表结构设计?
我是新手,见笑了。希望各位大侠能解答。。谢谢!

解决方案 »

  1.   

    本帖最后由 yueliangdao0608 于 2009-09-07 03:08:51 编辑
      

  2.   

    location_id location_name
    001       江苏
    001001    南京
    001001001 白下区location_id char(15) 3个字符一分. 检索也方便查询完整路径的时候 采用缓存,将地区表缓存入文件.
      

  3.   

    一个表两个字段:citys(code[int],name[nvarchar])
    code分为4部分如:7bit8bit+8bit+8bit,应该根据实际情况划分.
    这样即有利于索引,树状层次也清晰,我认为这种结构综合效率是最高的.
      

  4.   

    看看这篇文章:http://www.mscto.com/database/2009010134465.html
      

  5.   

    id,
    parent_id,
    region_grade, --省市区县属于哪一级
    region_name, --中文名称
    district_code, --邮编
    area_code, --区号
    status --是否有效
      

  6.   

    ecshop里面不就有一个吗,这样挺好的。mysql> desc ecs_region;
    +-------------+----------------------+------+-----+---------+----------------+
    | Field       | Type                 | Null | Key | Default | Extra          |
    +-------------+----------------------+------+-----+---------+----------------+
    | region_id   | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | parent_id   | smallint(5) unsigned | NO   | MUL | 0       |                |
    | region_name | varchar(120)         | NO   |     |         |                |
    | region_type | tinyint(1)           | NO   | MUL | 2       |                |
    | agency_id   | smallint(5) unsigned | NO   | MUL | 0       |                |
    +-------------+----------------------+------+-----+---------+----------------+
    5 rows in set (0.05 sec)
    mysql> select * from ecs_region limit 0 ,30;
    +-----------+-----------+-------------+-------------+-----------+
    | region_id | parent_id | region_name | region_type | agency_id |
    +-----------+-----------+-------------+-------------+-----------+
    |         1 |         0 | 中国           |           0 |         0 |
    |         2 |         1 | 北京            |           1 |         0 |
    |         3 |         1 | 安徽            |           1 |         0 |
    |         4 |         1 | 福建            |           1 |         0 |
    |         5 |         1 | 甘肃            |           1 |         0 |
    |         6 |         1 | 广东          |           1 |         0 |
    |         7 |         1 | 广西            |           1 |         0 |
    |         8 |         1 | 贵州            |           1 |         0 |
    |         9 |         1 | 海南            |           1 |         0 |
    |        10 |         1 | 河北           |           1 |         0 |
    |        11 |         1 | 河南            |           1 |         0 |
    |        12 |         1 | 黑龙江            |           1 |         0 |
    |        13 |         1 | 湖北            |           1 |         0 |
    |        14 |         1 | 湖南            |           1 |         0 |
    |        15 |         1 | 吉林            |           1 |         0 |
    |        16 |         1 | 江苏            |           1 |         0 |
    |        17 |         1 | 江西            |           1 |         0 |
    |        18 |         1 | 辽宁            |           1 |         0 |
    |        19 |         1 | 内蒙古           |           1 |         0 |
    |        20 |         1 | 宁夏            |           1 |         0 |
    |        21 |         1 | 青海           |           1 |         0 |
    |        22 |         1 | 山东           |           1 |         0 |
    |        23 |         1 | 山西           |           1 |         0 |
    |        24 |         1 | 陕西            |           1 |         0 |
    |        25 |         1 | 上海           |           1 |         0 |
    |        26 |         1 | 四川           |           1 |         0 |
    |        27 |         1 | 天津            |           1 |         0 |
    |        28 |         1 | 西藏            |           1 |         0 |
    |        29 |         1 | 新疆           |           1 |         0 |
    |        30 |         1 | 云南            |           1 |         0 |
    +-----------+-----------+-------------+-------------+-----------+
    30 rows in set (0.00 sec)
    我觉得这个挺好的。
      

  7.   

    我建议就以国标的行政区划代码(就是身份证前6位)保存省市县信息,区划代码可以用树形分类表或xml保存
    我原来做过一个查身份证归属地的,用的就是xml
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <jnkcAddrCode date="2006-5-27">
    <p id="110000" t="北京市">
    <c id="110100" t="市辖区">
    <d id="110101" t="东城区" />
    <d id="110102" t="西城区" />
    <d id="110103" t="崇文区" />
    <d id="110104" t="宣武区" />
    <d id="110105" t="朝阳区" />
    <d id="110106" t="丰台区" />
    <d id="110107" t="石景山区" />
    <d id="110108" t="海淀区" />
    <d id="110109" t="门头沟区" />
    <d id="110111" t="房山区" />
    <d id="110112" t="通州区" />
    <d id="110113" t="顺义区" />
    <d id="110114" t="昌平区" />
    <d id="110115" t="大兴区" />
    <d id="110116" t="怀柔区" />
    <d id="110117" t="平谷区" />
    </c>
    <c id="110200" t="县">
    <d id="110221" t="昌平县" ni="110114" nt="昌平区" y="1999" />
    <d id="110224" t="大兴县" ni="110115" nt="大兴区" y="2001" />
    <d id="110226" t="平谷县" ni="110117" nt="平谷区" y="2001" />
    <d id="110227" t="怀柔县" ni="110116" nt="怀柔区" y="2001" />
    <d id="110228" t="密云县" />
    <d id="110229" t="延庆县" />
    </c>
    </p>
    ...
    ... <p id="710000" t="台湾省" />
    <p id="810000" t="香港特别行政区" />
    <p id="820000" t="澳门特别行政区" />
    </jnkcAddrCode>
      

  8.   


    这个问题都不能算是问题,可以不放在web目录下,也可以加一句php防止直接访问。