4
回答
不确定字段,不确定用户的这种情形(如商城有ABCD商家,他们的后台除基础字段要求可随意自定义字段),应该如何设计数据库呢?
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

最终目的:多用户系统里每个用户都可以对模型按需设置自定义字段,且互不影响.
使用例子:某商城有商户ABCD,每个人的商店设置,产品发布等等都可以随意自定义字段,且有些字段需要检索查询.

比如:发布商品基本字段:名称,介绍.

A商户发布界面:名称,介绍,他自己添加的**123**字段.
B商户发布界面:名称,介绍,他自己添加的**456**字段.

再比如:商店配置基本字段:店铺名,域名.

A商户设置界面:店铺名,域名.他自己添加的**a**字段.
B商户设置界面:店铺名,域名.他自己添加的**b**字段.

我最初的思路:每个商户独立创建一个系列表,按照ID分为多表,这样互不干扰.
比如

shop_1_config(name,desc,1自己添加的字段).
shop_2_config(name,desc,2自己添加的字段)

缺点也显而易见,不方便维护,而且用户数量多的时候,表也是非常多,比如一个用户10张表,那1000个商户就是1W张表了...

这个问题的核心在于每个商户在同一个模型(如商品)下,随意自定义字段,且这些字段必须可与普通数据库字段一样可检索可快速查询,还要各自互不影响,字段数量不限.

讲的比较啰嗦,请大神讲解一下,谢谢

举报
amhoho
发帖于2年前 4回/308阅
共有4个答案 最后回答: 2年前

引用来自“web4j”的评论

把横向变纵向处理。

比如商品属性自由添加的,那就属性对应商品。

属性标题|属性值|对应商品id

detail_name | detail_value | goods_id


产品:AA 商品id:101

产品属性

生产日期:2016

产地: 广州

.... 纵向添加


那么你考虑过这个detail_value该用什么类型,text?那岂不是浪费,也许很多都是smallint或者int这样的 而部分又是date的 这个方法应该是最常用的 但按需求 已被排除了
--- 共有 3 条评论 ---
蓝水晶飞机回复 @amhoho : 你举个例子说明下,维护哪里会困难呢? 这个思想我也是从Activiti开源框架里面学习到的。 2年前 回复
amhoho回复 @web4j : 也想过 但这样做的话 维护会很困难的 2年前 回复
蓝水晶飞机这个可以这样子:detail_name|detail_value|value_type|str_value|int_value|double_value|date_value|boolean_value,具体数据类型由第三个字段决定,后面的列按数据类型分配任意一个 2年前 回复

把横向变纵向处理。

比如商品属性自由添加的,那就属性对应商品。

属性标题|属性值|对应商品id

detail_name | detail_value | goods_id


产品:AA 商品id:101

产品属性

生产日期:2016

产地: 广州

.... 纵向添加


--- 共有 1 条评论 ---
放开我小姨是这个思路 搞张自定义的商品属性表 2年前 回复

1、用户根据模型,选择需要模型中的若干字段进行保存,作为一个方案;

2、多个用户,在同一个模型下,可以有自己的方案,并且互相不影响。

3、用户在页面点击操作时(应该是已确定模型的),根据用户id和模型id,获取方案,然后执行并解析(其实就是sql的组装,获取结果集),并返回结果到前台。

4、前台根据配置字段和结果集,进行渲染。

--- 共有 1 条评论 ---
iyo想静静数据库表: 1--模型表,2--字段表,3--方案字段关联表,4--方案表,5--方案字段关联表。 模型和方案的关系,就是Java里面类和对象的关系。 一个模型下可以有多个方案;一个类可以new多个对象。 2年前 回复
顶部