很常见的一个需求就是用户的地址啦、收货地址啦什么的,反正就是地址存储,不知道该怎么设计是好…… 初步的打算是分为:国家、省、市、县、乡、其他详细地址 第一种方案:
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、用户地址嘛,当然要和用户对象关联
求指点、求意见……
身份证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,如果能满足你的需求和未来的扩展就是可以的