【发布时间】:2012-01-25 01:44:46
【问题描述】:
我正在开发一个用户数据库,其中配置文件数据已从简单表更改为实体-属性-值表。
结构和以前一样:
userid (int)
address 1 (varchar)
city (varchar)
country (varchar)
现在是这样的:
userid (int)
key (varchar)
value (varchar)
例如
userid key value
150 city London
150 country UK
151 city New York
151 country USA
152 country Mexico
我需要获取不同的城市/国家对列表以及每个国家/地区所有用户的计数:
city country count
London UK 18
New York USA 25
不能保证每个用户都存在每个键值对,即可能存在城市、国家或两者,或两者都没有,以及任意数量的其他键值对。
这对旧结构很简单,但我什至想不出如何开始,希望能得到一些指点
【问题讨论】:
-
医生,医生,我用这把锤子打自己的时候很痛……那就别再用它打自己了。
-
相当。如果可以选择的话,我会保持原样...
-
是的,relational 数据库中的 EAV 通常是一个错误(我相信一些 NoSQL 选项是针对此的,效果很好)。除此之外,这并没有解决(也许不是那么明显)城市和国家之间不匹配的问题。或者你似乎没有一个好的和快速的方法来获得独特的
userIds(调用DISTINCT不是最好的选择)。
标签: sql entity-attribute-value