各有利弊。
电脑配件太繁杂,如果每类一个表虽说检索方便些,但维护量太大。
而且不断有新品出现,给分类建表带来很多麻烦个人倾向于用一个表存储,只需有:分类、品名、型号、规格、单价等几个基本字段就可以了
规格中保存用逗号分开的该产品的技术指标即可
注意是“逗号”,因为需要用mysql的find_in_set函数进行检索
当然也可以用序列化数组保存技术指标,好处在于可连同指标名一同保存。灵活性更大些。不过检索时只能用like了,略微慢些
电脑配件太繁杂,如果每类一个表虽说检索方便些,但维护量太大。
而且不断有新品出现,给分类建表带来很多麻烦个人倾向于用一个表存储,只需有:分类、品名、型号、规格、单价等几个基本字段就可以了
规格中保存用逗号分开的该产品的技术指标即可
注意是“逗号”,因为需要用mysql的find_in_set函数进行检索
当然也可以用序列化数组保存技术指标,好处在于可连同指标名一同保存。灵活性更大些。不过检索时只能用like了,略微慢些
column1 | column2 | column3 | column4 | ......属性字典表
产品类别 | columnID | 对应column名称 查询的时候根据某个产品的类别ID查找属性字典表,取出产品属性表的每个column所对应的属性名称。
比如产品类别ID为1,属性字典表中相应的数据为:
1 | column1 | 长度
1 | column2 | 宽度则产品属性表ProdAttr中的column1和column2分别代表“长度”和“宽度”两个属性。
这样,就把所有的属性填充到一张表中,而不需要单独为每个类别建表。
Returns a value 如果字符串 str 在由 N 个子串组成的列表 strlist 中,返回一个 1 到 N 的值。一个字符串列表是由通过字符 “,” 分隔的多个子串组成。如果第一个参数是一个常数字符串,并且第二个参数是一个 SET 列类型,FIND_IN_SET() 函数将被优化为使用位运算!如果 str 在不 strlist 中或者如果 strlist 是一个空串,返回值为 0。如果任何一个参数为 NULL,返回值也是 NULL。如果第一个参数包含一个 “,”,这个函数将完全不能工作:
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2----------------顺便贴一下,呵.
ProdAttr设计成这样:
ProductID | AttrName | AttrValue
-----------------------------------
0001 | 长度 | 30
0001 | 宽度 | 60
....这样的好处是扩展性、直观性比第一种方法强,但数据冗余度太大,查询效率很低。
是的,当然需要你来指定。数据的含义是由排列的顺序来决定的如果是这样的话,当cpu改频率的说法的时候,就加多一个数据在后面,然后就不读第一个,而读最后一个?
不是。是修改对应位置的值所以我建议用数组保存数据,序列化后入库