关于用户地址表的设计问题
发布于 12 年前 作者 dolphinboy 9970 次浏览 最后一次编辑是 8 年前

很常见的一个需求就是用户的地址啦、收货地址啦什么的,反正就是地址存储,不知道该怎么设计是好…… 初步的打算是分为:国家、省、市、县、乡、其他详细地址 第一种方案:

id       parentid       adrid       adrname
xxxx      81          440000    广东省
yyyy     440000       440300    深圳市
zzzz     440300       440304    福田区
xxxx     440304       4403xx    xx街,xx号(详细地址)
xxxx     440304       4403yy    yy街,yy号(详细地址)

这样的设计有一个问题就是,如果一个用户的地址是 广东省,深圳市,福田区,那么用户关联地址为zzzz,但是从福田区查询到广东省又要查询两次,加载一个用户地址就要查询三次,会不会浪费?

第二种方案是:

id       province      city         area     streeno
xxxx      广东省 
yyyy      广东省       深圳市      福田区
zzzz      广东省       深圳市      福田区    xx街,xx号(详细地址)

这种方案的问题是数据冗余比较大

需求有: 1、要能够很快的进行双向查询,例如得到广东省下面所有的市,然后也能很快的根据市的到省,甚至根据区来得到哪几个省有这个区 2、文档性数据库存储格式 3、尽可能支持国际化(貌似有点儿困难) 4、用户地址嘛,当然要和用户对象关联

求指点、求意见……

3 回复

身份证idc,利用idc表示有意义的id。 想必知道身份证吧,在网上查询自己的idc,一个编码就能查找到自己身份证所在地的详细信息。因此你可以设置省的显示方式为axxxx,省市的显示方式为axxxxbxxxx,省市区的显示方式为axxxxbxxxxcxxxx,加上其他的东西,组成一个idc,例如a0001b0023c1010some0001,你想获取他是哪个市的,截取市代码去省市区编码表查,你想知道这个市区是哪个省,截取省市代码去省市区编码查。要支持国际化也简单了,省市区编码表寸id,name,ename不就可以了?

id             adrid       adrname                        enname
xxxx      86440000    广东省
xxxx      86440300    深圳市
xxxx      86440304    福田区
xxxx      86440304000    xx街,xx号(详细地址)
xxxx      86440304001    yy街,yy号(详细地址)

前两位国家代码,第三四为省级代码,第五六位省代码,第七八位区域代码,最后三位为街道地址,怎样?

ok,如果能满足你的需求和未来的扩展就是可以的

回到顶部