一个完整的地址应该是江西省(市)赣州市 兴国县 潋江镇,或是赣 赣州市 兴国县 潋江镇,这里四个关键的字符是江西(或赣)、赣州、兴国、潋江。如上所说,提供的地址可能只有其中的一部分,2或3个关键字,甚至只有1个关键字,那我们创建表时,就应围绕这四个关键的字符来创建。首先来分析省表,一个省名有1个或2个简称,第1个简称不能为空,如“赣”;省名至少有2个字,不能为空,如“江西”;省的级别如“省”、“市”“自治区”“特别行政区”;省的代码,如“36”。提供的省地址应至少有1个字或2个字,如“赣”或“江西”。创建省表的命令如下:
create table sheng( 
    shengid varchar(2) primary key,  // 省ID
    shortshengname1  varchar(2) not null, // 省简称1 
    shortshengname2  varchar(2),  // 省简称2
    shengname varchar(4) not null,  // 省名
    sheng code varchar(50) // 省的地址代码
);
相应地再创建城市表、县表。在创建这些表时,一个表不要包含其他表主建以外的列。除主键外,不同的表的列名,最好不要相同,以免混淆,造成使用困难。在搜索时,用地址的第1个字和sheng表的shortshengname1列对比,如符合,则该地址是这个省的;如不符合,则与sheng表的shortshengname2对比。如果1个字没有配对,则取地址的前2个字与sheng表的shengname列对比。如果用sheng表没有配对,则提供的地址没有省名。
再用城市表与地址的前2个字对比(因为城市名至少有2个字),不行的话,用地址的前3个字与城市表对比,因为城市名可能有3个字到5个字甚至多个字,取提供地址的字符数递增(以最长的城市名长度为限),与城市表对比;不行的话,表明地址没有提供城市名。
再用县表与地址对比,直到地址完全对比成功。按以上思路,大体可以创建一个地址的模糊查询程序来。不足之处,请大家批评。