首页 新闻 会员 周边 捐助

数据库设计,如何实现属性的可配置?

1
悬赏园豆:200 [已关闭问题] 关闭于 2017-08-29 10:24

比如有个Book表,有id, name, isbn等列表示基本信息,但是不同的商家对Book表有不同的其他需求,有的还需要A属性,有的则还需要B属性,或者说某一天随着需求变化,我们要扩展Book的信息,但又不希望以加列的方式更改Book表,应如何设计呢? 

SuperMan丿坤的主页 SuperMan丿坤 | 初学一级 | 园豆:12
提问于:2017-08-02 17:52
< >
分享
所有回答(14)
0

设置不同的角色呀

耳朵嫁给了真正的谎 | 园豆:195 (初学一级) | 2017-08-02 18:00

还可以在加个视图

0

最简单的办法,创建一个BookField表,里面3个字段:BookId、FieldName、FieldValue,做个映射关系就好了

复杂的话再去扩展,包括设置字段类型、默认值什么的

balahoho | 园豆:2050 (老鸟四级) | 2017-08-02 18:05
0

就算2l那样的.不加列当然就加行.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-08-02 18:15

能具体点吗,最好有个图说明一下

支持(0) 反对(0) SuperMan丿坤 | 园豆:12 (初学一级) | 2017-08-02 18:36
0

对于关系型数据库来说,要实现你说的问题,用2楼 balahoho 的方案是可以的,

三个表:

bookBase(bid, bname, 等常用的基础信息),

bookExtendField(bid,fid,fieldname-扩展字段名,fieldtype-扩展字段类型,等扩展字段的信息),

bookExtendValue(bid,fid,fvalue,等扩展字段值的信息)

 

其实对于关系型数据库来说,对字段变化本来就不是特别的友好,

要么就是设计的时候严格按照三范式设计,这样可以比较方便的通过给表加字段的方式扩展,但是你要求的是不通过给表加字段的方式

要么就是前面说的这种,用专门的表存储字段信息,这么做在查询的时候就要先查询有那些字段,再根据这些字段取值,这样会使查询变的麻烦,

 

所以如果你的字段变化预期会很大,可以考虑使用非关系型数据库,比如mongo,字段扩展直接加就行,

但是需要注意的是,mongo对多表关联查询的支持不是很好,

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-08-02 19:52
0

通用属性系统万能查询方法 前几天园里的一篇博客,图文都有。

爱编程的大叔 | 园豆:30844 (高人七级) | 2017-08-02 21:58
0

专门弄一列里面存json类型或者xml类型的值就好了,现在最新版本的各种关系型数据库里面都有对json的原生支持了

帝之晓 | 园豆:98 (初学一级) | 2017-08-02 22:48
0

其实如果想把业务系统产品化就需要对业务高度抽象化 你不应该去适应个别业务 应该让业务适应你 
或者你就不要做业务系统 做业务框架引擎 所有的表单和数据库都动态生成 然后进行2次开发 类似于freemarker

转自:http://www.iteye.com/problems/59252

金琥 | 园豆:2605 (老鸟四级) | 2017-08-03 09:37

读取表格的内容:DataTable Dt
创建一个视图
DataView dv = Dt.DefaultView;
利用视图中的属性显示客户需要的数据
链接:http://www.360doc.com/content/11/1201/21/4509122_169008079.shtml

支持(0) 反对(0) 金琥 | 园豆:2605 (老鸟四级) | 2017-08-03 10:43
0

给表设置角色,添加视图

长跑 | 园豆:11 (初学一级) | 2017-08-03 09:42
0

可以添加一个字段配置表,做好表和字段直接的关联映射。

或者可以不按表字段存储,所有属性以json存储。

Mr___SUN | 园豆:232 (菜鸟二级) | 2017-08-03 10:29
0

我是这样想的,那些基本字段,肯定是要有的。某些客户的变态字段可以在建一个一对一关联表。每家用户都有一个不同的子表,这样怎么样

 

或者尝试下nosql数据库

会长 | 园豆:12463 (专家六级) | 2017-08-03 11:53
0

以前看到过一个文章,说是可以预留字段,多增加几列,string1/string2/string3.......,加个二十列预备着。用的时候文档记录每列对应哪个角色或谁用。也是种方法,可以参考下

开山怪不怪 | 园豆:544 (小虾三级) | 2017-08-03 20:45
0

类似OA,基础表

客户A表,客户B表,客户C表.

forhells | 园豆:724 (小虾三级) | 2017-08-05 23:15
0

Book 表-t_book (id,name ,商家_id,isbn)

BookProps表 t_book_props (id , book_id , name ,value)  这张表 作用其实和Map 类似,name 为键 value 为值

具体逻辑: 一个商家在book 表中对应一条相应的 记录,在t_book_props 表中对应存放该商家的设置book的属性信息。要想获取到某个商家自定义设计的A,B。。等属性 .sql如下: select tp.* from t_book tb , t_book_props tp where tp.book_id  = tb.id and tb.商家_id = ?

空之极 | 园豆:325 (菜鸟二级) | 2017-08-07 21:56
0

一个表足矣,
Book: ID, Name,isbn等必要信息+  JsonDescription(其他额外信息,序列化对象) 

从头_再来 | 园豆:202 (菜鸟二级) | 2017-08-15 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册