有很多字段数量不一的表怎么处理

2015-04-26 22:01:59 +08:00
 refresh
一个产品有很多型号,但不同产品型号是不一样的,但希望型号可查可分组。目前的想法是为每个产品都建一个表,新增加一个产品就建一个表。

现在问题:

1. 这样一个产品一个表好吗,有没有其它好办法
2. 与产品表等其它表同在一个库好还是分库好,分库感觉不好查询,比如说要连接查询不太好;如果在同一个库,这个库的表会非常多。


求建议,太高大上的解决方案就不要了,小项目。
2693 次点击
所在节点    问与答
16 条回复
hinate
2015-04-26 22:09:38 +08:00
我认为可以一个表 类似 省市县 这样的
refresh
2015-04-26 22:12:02 +08:00
@hinate 和省市县有什么关系?
refresh
2015-04-26 22:13:15 +08:00
没说清楚,每个产品的字段数量是不一样的
zado
2015-04-26 22:22:05 +08:00
做一个表就可以了,把所有可能用到的字段都加上去.然后再增加一个字段,用于标记这个产品的可用字段.
maikcn
2015-04-26 22:29:41 +08:00
pgsql,型号之间通用的就用字段区分出来,特有的属性保存成json格式
refresh
2015-04-26 22:56:50 +08:00
@zado 如何查询分组,你的意思是做一个最大字段的表么,这种方式考虑过,但觉得好像不太好,字段类型不一样,有些需要建索引有些不需要。


@maikcn 现在只考虑mysql,pgsql这样可查询么
Comdex
2015-04-26 22:59:14 +08:00
mongodb?
zado
2015-04-26 23:18:02 +08:00
可以再添加一个字段记录分组信息.

我的意思是做一个很多字段的表,字段类型不一样当然就要分开建字段了,每个产品都选择性的填写自己需要的字段,不需要的就留空.

产品数量有多少啊?不多就不用建索引,就算必须建索引,一个表也是可以建立多个索引的啊.
refresh
2015-04-26 23:39:46 +08:00
@zado 你这个也是一种解决方案,但我觉得业务逻辑将会非常复杂,索引也不好建。比如说总共有5种数据类型,然后每种类型建20个字段,再用一个表标记,万一哪天某个产品属性突然多了,就麻烦了。

数量量比较大,估计有上百万条记录
yangqi
2015-04-27 00:15:38 +08:00
参考wordpress的方法,id-属性-值,表里只要这三个字段,这样每个商品可以有任意无限个属性

这种方法比较灵活,但是牺牲一点性能,可以在别的地方优化
maikcn
2015-04-27 00:33:32 +08:00
@refresh pgsql 的 json 格式内的内容是支持直接查询的,不过不考虑换数据库的话 mysql 要到 5.7 的版本才原生支持 json,或者 #10 楼的也是一个办法
FrankFang128
2015-04-27 00:41:42 +08:00
类型不同的数据怎么能在一个表里
zado
2015-04-27 08:29:18 +08:00
@refresh 没有想到产品信息表会有这么大,这样设计是效率很低的.
wy315700
2015-04-27 08:34:48 +08:00
mongodb
hdshen
2015-04-27 12:43:07 +08:00
如果只用mysql 可以把每个产品 必有的 通用的字段 设计成一个表

表里 额外计算添加一个分组或者 对应的详细 分表

详细分表可以创建多个 按照类型算吧 id 属性 值

缺点是对属性的查询性能可能不够理想


其实mongodb是最好的解决方案
refresh
2015-04-27 18:47:07 +08:00
@yangqi 小量数据的话,wordpress的方式没有问题,但如果上百万的数据,wp的方式不行

@maikcn 现在转数据库不可能了

@hdshen mongodb在这方面是适合,但业务系统估计比较麻烦,坑也比较多。一个表业务处理会比较复杂,多个表的话,会有很多表,想想一个库里有1000+的表好蛋疼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/186522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX