`
kiol
  • 浏览: 43398 次
  • 来自: ...
社区版块
存档分类
最新评论

探讨企业级应用中,如何允许用户增加自定义字段

阅读更多
我所说的用户增加自定义字段,是指最终用户可以通过配置等手段,可以在界面上增加各种类型的想要的字段,这个字段可以用来存储和查询。

例如:有一个客户信息表,原来只有名称和地址,客户想自己添加,生日,分类,地区等字段。
添加完的字段要达到:
1)能保存
2)能查询
3)能用来排序
4)能用来分组统计

我所见到的做法,一般都是通过表里预留字段来做得,例如cust01,cust02等,各种类型都预留一些,一种是直接增加了另一张表,比如xxxx_ext表,里面有大量的cust01,cust02等。

这样作的缺点是,
1)数量是固定的,一旦某个类型的字段,我要添加一大堆,就可能碰到限制了。
2)可读性很差,看数据库的时候,会看到一堆不知道是什么东西的数据,还要找对应关系。不知道能不能把这些字段和字段表述做成视图呢?
3)扩展表的方法会多做一次join,影响效率。

我考虑是不是还有其他的方法。
1)是否可以使用XML。所有自定义的数据都写到XML里面,然后利用数据库提供的XML功能。我不了解数据库提供的XML功能,请有经验的朋友解答一下。
2)和上面类似,使用一个text字段。不过内容可以用其他的格式,比如yaml或者json。比上面的优点是占用空间小了。然后写个函数,专门从里面根据字段名取数据,然后基于这个函数作查询,排序,分组。
3)能不能用动态的DDL,或者自动生成rails的migration,然后停机升级。

不知道大家都是怎么作的?有没有更好的方案?

强调一下,我说的情况是,你把程序开发完了,交给客户,需要给客户提供一个可以自定义字段的功能,然用户增加一些他想要的字段,这个过程中开发人员不再参与.

大家说自己的方案的时候,最好能够简单描述一下优缺点.
分享到:
评论
49 楼 cloudeye 2009-12-02  
理论上,采用META表可以解决自定义字段的问题。(META表是多加了一层抽象:管理元数据的元数据)
但这将带来很多的编码量。(因为要自己写META表访问的DB接口,某种意义上,你在写一个数据库软件)性能也要打个问号。

而在程序上实行DDL查询实在是一个不好的办法--维护数据库将是噩梦。

考虑具体情况,如果自定义字段只是特例不是普遍的数据存储要求,有时候采用预留字段的方式是最快最好的办法。
48 楼 dazuiba 2009-12-01  
一个破问题讨论到现在。

最懒的方式是去redmine看看人家咋着做的。 直接拷贝到你项目里面就行了。

人家已经抽出了个customable之类的东西, 简简单单Include一下就O了
47 楼 archangel 2009-11-30  
但是对于不同类型不同表的方案我有点不理解,这样做这样也许存储效率是提高了,但是统计怎么做?还有这样会给开发带来的额外劳动应该也不少吧。
46 楼 archangel 2009-11-30  
动态字段这样的需求在软件项目基本不应该存在,如果真的出现了,那么预期提前做这样的设计,还不如改程序来的直观,所以也会有人说是不能答应的需求之一。

但是对于软件产品,这样的需求很常见也很有用,因为你永远不知道下一个客户需要的字段是什么样的。
45 楼 ferly_j 2009-02-01  
请问写在xml里的,如果要更新岂不是要重启服务器?
这个热加载问题怎么解决?
44 楼 vtrtbb 2009-01-20  
这种问题很常见,尤其是做OA或者ERP系统时候。
其实你组织好数据字典就行了,把所有的描述都放到你定义好的表里,然后自己开发底层程序对这些表进行操作,最好再开发一个客户端的小工具来维护这些表就可以了。

我曾经开发过一个系统,只要你在excel表里配置好数据后,然后通过自己编写的工具导入到服务器数据库中,系统基本就可以跑了,类似于一个开发体系,开发一个系统的时候,只要用这个平台基本的东西都可以搭建起来,而且用户也可以自定义表单。。
比如说:有个学籍表,今天客户突然想加个“本人成分”的选项,他自己就可以完全完成,不需要像以往那样,由程序员来数据库里家字段,修改po之类的东西,修改页面。。。。
43 楼 sacred02 2009-01-20  
赞同caicai_45的思路,使用行转列再加个视图,应该能比较好的解决这个问题。
42 楼 csc365kl 2009-01-19  
业务逻辑的复杂的产品最好不要太追求可配 而是 可维护 可重构 提供服务的接口定义是最重要的 一定要定义好 如果你是想做一个 配置下今天可以变成美食网 明天改下配置又能变成体育网的 可配应用 你就用纵表吧
41 楼 caicai_45 2009-01-13  
嘿嘿,我09年年初的时候,可能也要做一个类似的项目,大概的需求和LZ的是一致的。

数据库的设计思路是这样的,行列转置。

每个实体的属性的存储,是放到一行记录中的,类似这样Product表设计
ProductID  Name  ProductType
1          MP3   消费数码

行列转置,采用类似key-value的方式来做
Product表,就一个ProductID 字段,然后有一个 ProductField表,
ProductFieldID FieldName  FieldType
1              Name       string
2              ProductType string

然后有一个关系表 Product_Field
ProductID  ProductFieldID value
1          1              MP3
1          2              消费数码

这样如果Product增加一个属性的时候,在ProductField中新增一条记录即可。
同时在对应关系中增加 一条 对应关系的记录。

这样既能满足基本的查询,扩展性也是一个提高。但是只能做到查询和显示,如果涉及到业务逻辑要根据这些字段来决定走向,基本不可能。


40 楼 wuxiaoq 2009-01-13  
Jackphone 写道
微软的Access都用过吧,想想它是怎么实现的。

这就像做一个DB Client,不过这种需求倒是让我觉得很奇怪,客户是想自己开发吗?


客户是想省银子。。。
39 楼 木哥哥 2009-01-13  
xiaoyu的:多类型表多值

form_rr的:多值多类型

这2个人说的都很好啊

原来你们2个说的是一样的....刚才误解了......

xiaoyu的是全都是固定表;

form-rr的是有一个固定(模板)表+一个不固定表;

数据结构都是以key-value来表示。

38 楼 Jackphone 2009-01-07  
微软的Access都用过吧,想想它是怎么实现的。

这就像做一个DB Client,不过这种需求倒是让我觉得很奇怪,客户是想自己开发吗?
37 楼 qamer 2009-01-07  
新建一张表,每条记录对应一个自定义字段,一张关系表记录字段的内容
36 楼 pekkle 2009-01-04  
java 有什么key-value好的模型吗?
xiaoyu说的key-value不太明白
35 楼 shuai45 2009-01-04  
个人感觉一下:
实现来说不是问题,应该很容易。写xml也好,存数据库也好 都没问题。但效率和性能是考虑最主要的问题。
1如果写成xml文件。应该说写入非常便捷。但要满足查询,搜索或者其它 在实现起来效率不稳定,而且也难于维护。如果用户的数量多,相对的xml文件也应该不少。频繁的对硬盘操作不是件好事。
2写到数据库。写到数据库问题也不大,而且写到数据库后对于查询 修改 删除也非常方便。但面临的问题是性能和效率。用户反复的连接数据库,对数据库进行操作,而这些功能其实可有可无的东西,所以如果为满足这样的需求而单独建表,还要去维护有些得不长失。
3写到内存。通过第三方的存储空间来时间也是个办法。写到内存中通过K和V来定位。但如果数据量大的话性能和效率也一样。

     所以个人认为 写到数据库中应该可以。前提是 数据库必须经过优化 最好写存储过程 而且处理的时候减少不必要的数据连接 给予适当的连接释放。
      
34 楼 sofar1218 2009-01-02  
不停机? 这个怕是过分了
33 楼 laochake 2008-12-31  
自定义表,国内估计有不少人在搞
把开发人员都解放了,只要实施人员就可以了
想法是很不错,但就是折腾人,成功几率很低
32 楼 Scriptlet 2008-12-31  
2楼是正解。cms系统就是用来存储用户定义的数据,所以很有参考性
31 楼 feilng 2008-12-30  
用户从来不关心字段,都是技术导向的沟通导致的
30 楼 feilng 2008-12-30  
真正的企业级用户不需要自己增加自定义字段

相关推荐

    Excel自定义字段分步导入SQLServer2000 PB9源码

    标题中的“Excel自定义字段分步导入SQLServer2000 PB9源码”涉及到的知识点是使用PowerBuilder 9(PB9)开发的一个应用程序,该应用能够将用户自定义的Excel字段数据逐步导入到SQL Server 2000数据库中。在数据处理...

    sharepoint 2010 扩展webpart自定义属性边栏字段

    下面,我们将详细探讨如何在SharePoint 2010中扩展Web Part自定义属性,以实现边栏字段的定制。 1. **理解Web Part属性** - Web Part属性是定义Web Part行为的关键元素,它们可以是任何类型的数据,如字符串、布尔...

    arcgisserver中gridview隐藏字段

    5. **权限控制**:在大型企业级应用中,隐藏字段可能与用户角色和权限有关。可以通过身份验证和授权机制,限制不同用户群体看到不同的字段。 6. **更新和保存**:隐藏字段可能会影响到数据的编辑和保存。在编辑模式...

    自定义菜单表

    自定义菜单表是数据库设计中的一个重要概念,尤其在企业级应用和网站开发中,它扮演着用户界面个性化和用户体验优化的角色。自定义菜单表通常用于存储用户或角色所能访问的菜单项及其排列顺序,以此来构建个性化的...

    企业级IOS应用开发实战

    《企业级iOS应用开发实战》一书主要涵盖了iOS应用程序开发中的关键技术和实践,特别是针对企业级应用的构建。从给出的文件名列表来看,我们分别有第2章至第11章的部分内容,但缺少第1章和第12章的信息。尽管如此,...

    jsf的框架在企业级的应用

    **JSF(JavaServer Faces)框架在企业级应用中的详解** JSF,全称为JavaServer Faces,是Java EE平台上的一个MVC(Model-View-Controller)框架,用于构建用户界面,尤其适用于企业级Web应用程序的开发。它提供了一...

    SQL自定义函数的应用

    本文将深入探讨SQL自定义函数的应用,特别是基于北大青鸟赠送光盘中的示例,详细解析其功能和实现机制。 ### SQL自定义函数概述 SQL自定义函数是数据库系统中的一项高级功能,允许用户根据自己的需求编写和定义...

    自定义水晶报表设计器

    在IT行业中,报表设计是数据分析和业务展示的重要环节,尤其在企业级应用中,自定义水晶报表设计器成为了不可或缺的工具。本主题将深入探讨如何在C#环境下利用水晶报表(Crystal Reports)创建自定义报表,并结合...

    第二课:MongoDB企业级应用操作1

    在本课“第二课:MongoDB企业级应用操作1”中,我们将探讨两个关键的聚合操作:pipeline 聚合和 mapReduce 聚合,这些都是在处理大数据和进行复杂分析时的重要工具。 首先,我们来看**pipeline 聚合**。MongoDB 的...

    moss 自定义内容类型

    在Microsoft Office SharePoint Server (MOSS) 中,自定义内容类型是一种强大的功能,它允许用户根据自己的业务需求创建和管理特定类型的列表项或文档库条目。这个功能极大地扩展了SharePoint的基础功能,使得用户...

    在powerbuilder中自定义报表,自由查询。

    在PowerBuilder中自定义报表和实现自由查询是开发企业级应用程序时常见的需求。PowerBuilder是一款强大的第四代编程语言(4GL),尤其适用于构建数据库应用程序。它内置的数据窗口(DataWindow)对象是创建报表和...

    关于表单自定义的方案设想

    在企业级应用中,表单自定义是一个重要的需求,尤其在工作流管理、信息收集和在线报名等场景。本文将探讨两种可能的表单自定义方案,以及相关的数据库表设计。 **方案一** 该方案首先设定表单模板定义,包括表单...

    pb-自定义报表

    PB(PowerBuilder)是一款强大的企业级应用程序开发工具,尤其在数据窗口(DataWindow)和报表设计方面具有显著优势。在PB环境中,自定义报表通常涉及到复杂的数据查询、布局设计以及用户交互,对于开发者来说确实是...

    PB控件:用方向键在数据窗口中移动焦点。用回车键增加明细、保存数据

    标题中的“PB控件”指的是PowerBuilder控件,这是一款由Sybase公司开发的用于构建企业级应用程序的可视化编程工具。在PowerBuilder中,数据窗口(DataWindow)是一种强大的组件,用于显示、编辑和管理数据库中的数据...

    solr企业级全文检索

    本篇文章将深入探讨Solr的核心特性和在企业级应用中的实践。 1. **核心概念** - **索引**:Solr通过建立倒排索引来实现快速搜索,索引由文档ID、词项及其在文档中的位置组成。 - **集合(Collections)**:Solr...

    计算机应用 (知识点)3_值字段设置.docx

    值字段设置是创建数据透视表时一个至关重要的功能,它允许用户自定义数据的计算方式和显示形式。默认情况下,当添加字段到数据透视表的“值”区域时,Excel会根据字段的数据类型自动选择合适的汇总方式,例如数字...

    pb自定义报表设计

    PB(PowerBuilder)是一款强大的开发工具,主要用于构建企业级的应用程序,尤其在数据窗口和报表设计方面具有显著优势。在本话题中,我们将深入探讨如何利用PB进行自定义报表设计,以及与之相关的知识点。 首先,...

    Asp.net 实现高级查询组件(开源插件)

    这个开源插件设计的初衷就是为了解决这一问题,它允许用户根据自己的需求自由组合查询条件,涵盖多种查询类型,如为空(null)查询、区间范围查询等,同时还支持自定义模板字段设置。下面我们将详细探讨这个高级查询...

    Sharepoint2013列表视图和字段权限扩展插件.zip_RNM_sharepoint_sharepoint2013

    在SharePoint 2013环境中,列表视图和字段权限管理是企业级协作平台中的重要组成部分。这个压缩包文件提供了对SharePoint列表视图和字段权限的扩展功能,通过一系列JavaScript库和WSP解决方案来增强原生系统的能力。...

Global site tag (gtag.js) - Google Analytics