对于大型应用,应“分门别类”。同一类商品具有相同的私有属性集。
但这样做的缺点是表量很大,并需要预先设定属性集。尤其是对新产品,分类和确定属性集都存在一定的难度对于商品种类不是很多的应用(数万种),可用一个字段(text)保存序列化后的私有属性数组
缺点是数据冗余较大。但扩展很灵活,不需要修改数据表结构。检索起来也很方便
比如
serialize(array('出版社' => '清华出版社', '作者' => '老外')) 得 a:2:{s:6:"出版社";s:10:"清华出版社";s:4:"作者";s:4:"老外";}
serialize(array('制造商' => '清华紫光', '容量' => '512M')) 得 a:2:{s:6:"制造商";s:8:"清华紫光";s:4:"容量";s:4:"512M";}你既可以用 select * ... where Attribute like '%清华%' 找出与“清华”相关的全部商品
也可以用 select * ... where Attribute like '%出版社%清华%' 找出“清华出版社”的全部图书
但这样做的缺点是表量很大,并需要预先设定属性集。尤其是对新产品,分类和确定属性集都存在一定的难度对于商品种类不是很多的应用(数万种),可用一个字段(text)保存序列化后的私有属性数组
缺点是数据冗余较大。但扩展很灵活,不需要修改数据表结构。检索起来也很方便
比如
serialize(array('出版社' => '清华出版社', '作者' => '老外')) 得 a:2:{s:6:"出版社";s:10:"清华出版社";s:4:"作者";s:4:"老外";}
serialize(array('制造商' => '清华紫光', '容量' => '512M')) 得 a:2:{s:6:"制造商";s:8:"清华紫光";s:4:"容量";s:4:"512M";}你既可以用 select * ... where Attribute like '%清华%' 找出与“清华”相关的全部商品
也可以用 select * ... where Attribute like '%出版社%清华%' 找出“清华出版社”的全部图书
适用于硬件条件好的大型网站,开发周期短,逻辑简单,健壮我还有个不成熟的想法相当于第三种和第四种的混合型可以解释为 (2+n)张表2:
产品分类表 category
cate_id cate_name attributes
1 book serialize(array('作者','出版社'))
2 dvd
3 digi serialize(array('型号','内存'))产品表 product
product_id product_name cate_id price postdate hitsn:
分类私有属性表
书籍 book
product_id 私有属性……DVD dvd 私有属性……数码 digi 私有属性……n的数量取决于category 里面的数据行数,字段数量取决category.attributes的数组长度