日期:2014-05-17  浏览次数:20494 次

一个字段多个值的数据库设计问题
现在有字段A。取值是单个的,比如取值是3
有一个字段,取值是多个的。比如字段B,取值可能是1、2、3、4
现在要查出所有含有字段A的值的记录。比如:

记录1:3、5、7(符合)
记录2:6、8、9(不符合)

请问如何设计数据库比较合理?充分考虑到性能优化。

------解决方案--------------------
可以啊,或者用逗号隔开也行。
------解决方案--------------------
如果值域不超过64,那么可直接使用 set 类型
如果不想用 set 类型,值域也肯能远超过 64
那么可以用 varchar 或 text 类型
数据由以逗号分隔的串组成,比如 2,4,6,3
mysql 提供了 find_in_set 函数,用来完成查找工作
------解决方案--------------------
like 和 find_in_set 还有 in
都是在求“是否在其中”,性能肯定不会高到哪里去
把数据打包在一起,本身就是以时间换空间的做法

要想达到高速的目的,当然就不能打包在一起,而是独立存放并加上索引,当然还要加上宿主的id
这就是所谓的以空间换时间