关系数据库如何完美的实现多值字段
在设计数据库中经常遇到需要多值字段的场合,就拿用户资料里的“兴趣爱好”为例说明吧
也许有的人只有一项兴趣爱好,也许有的人会有100项兴趣爱好,但是你要精确的检索它
尝试一:搞几个“兴趣爱好1”“兴趣爱好2”“兴趣爱好3”字段在用户资料表里面,多出来的就让它空着。实际上有些通讯录软件正是这样做的
困难:预留的字段毕竟还是有上限的,况且在绝大部分人只有1项的情况下,浪费了数据库
尝试二:另外建一个表Relation([intUserID],[intFavourateID]),从这里面查Where intUserID=***。实际上大部分新闻系统的无限级分类就是这样实现的
困难:要是多值字段有好几个,数据库的结构会被弄得一塌糊涂,乱七八糟
尝试三:仅一个字段,数据类似“1,5,7,3,92”这样
困难:这个几乎是最完美的方案,但是检索起来将会十分困难,比如你要检索有“3”的,如果检索“3”,就会把“93”“123”都检索进去了,如果检索“,3”“3,”“,3,”就会没检索到仅仅有“3”的条目。但是如果都改成“,1,5,7,3,92”和“,3,”,因为绝大部分人只有1项,所以也会浪费很多数据库资源
请问有没有人给出终极完美解决方案呢?