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

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

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

例如:有一个客户信息表,原来只有名称和地址,客户想自己添加,生日,分类,地区等字段。
添加完的字段要达到:
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,然后停机升级。

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

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

大家说自己的方案的时候,最好能够简单描述一下优缺点.
分享到:
评论
9 楼 dazuiba 2008-12-28  
我年初做过一个系统,当时用户提出的需求和楼主的类似。

首先力劝楼主不要想着将字段key value Join到另外一张Meta表,这样做很别扭,一点也不直观,很难实现你所提出的查询需求。

我是直接alter table,具体方案如下:

1 运行时直接alter table,然后使用Model.reset_column_information来更新active_record的schma信息。
2 使用一张表property_definitions 来记录所有用户自定义的字段:
   create_table "property_definitions" do |t|
        t.string "data_type",:null => false
		    t.string "name",:null => false#显示在界面上的名字
		    t.text "description"
		    t.string "column_name", :null => false
			  t.string "table_name", :null => false
    end


  这里有个细节,用户自定义的字段,有可能是一系列枚举值,也就是可提供一个列表工用户选择的那种,那么就需要一个enumeration_values

       create_table "enumeration_values" do |t|
      t.string "value",:null => false
      t.integer "property_definition_id"
      t.integer "position"
    end


以上是数据库相关的。

界面上总的可以分成两个部分,1是管理后台,2是使用界面
  关于自定义列的管理,值得一提的是数据列默认值的设定,以及删除数剧列的检查
  关于使用界面,我是分成几个partial来渲染的,分别是 text,text_area,select,date,通过查询property_definitions,我可以知道那个表的哪个列,应该用何种方式来显示。


最后,还有值得一提的一点是查询,客户要求实现基于自定义数剧列的全文检索以及数据库检索。对于前者,我是用ferret每日做重建索引(因为数据量不是很大,10分钟就可以完成),对于后者,则很简单。


希望能对你有所帮助。
8 楼 foxgst 2008-12-28  
要把变动的字段保存/查询/排序/统计,看来需要做Meta Programming。

如果简单点的话,可以做一个配置应用,专门给有修改字段权限的人用,负责更改数据库结构(Migration),更改模型文件(Modify extend model file),热部署(Kill and start App)等。
7 楼 kiol 2008-12-27  
对于动态DDL修改数据库结构的方式,好像会导致数据库不好升级吧?
不知道有没有人尝试过?
XML字段或者自定义数据格式Text字段,有人尝试过吗?
6 楼 kiol 2008-12-27  
seemoon 写道
1)能保存
2)能查询
3)能用来排序
4)能用来分组统计

你说的这些除了如何给表增加字段之外,其他都是数据接口的问题,activerecord的接口已经很开放和灵活,比如
:conditions=>["sql ..", param1, param2...]
你只要有个动态条件拼接算法或者util,就可以解决问题

呵呵,我想探讨的就是是否要给表增加字段?怎么增加?各有什么优缺点?
5 楼 kiol 2008-12-27  
下一站,火星 写道
新建一个表,存你所谓的字段名,如生日,分类,地区,然后把需要自定义字段的表和它多对多不就完了

可能是我没写清楚,我是希望设计一个功能就给客户了,然后再我不参与的情况下,客户可以自定义字段,并对这些字段执行一些操作.
4 楼 kiol 2008-12-27  
xiaoyu 写道
应该看一下CMS的做法, 例Megento。 都是用Key - value的方式, 不同类型的字段保存在不同的表中。 自己看吧。

能详细说一下吗?
不同类型的字段保存在不同的表里?是按照字段类型建很多表,然后怎么和主表关联呢?是每个主表拖一堆的各种字段的表呢?还是就按字段建几个表,然后用多对多的表维护关系呢?

这个好像跟我说的例子的方式,本质上差不多吧?优点是什么?
3 楼 seemoon 2008-12-27  
1)能保存
2)能查询
3)能用来排序
4)能用来分组统计

你说的这些除了如何给表增加字段之外,其他都是数据接口的问题,activerecord的接口已经很开放和灵活,比如
:conditions=>["sql ..", param1, param2...]
你只要有个动态条件拼接算法或者util,就可以解决问题
2 楼 下一站,火星 2008-12-27  
新建一个表,存你所谓的字段名,如生日,分类,地区,然后把需要自定义字段的表和它多对多不就完了
1 楼 xiaoyu 2008-12-27  
应该看一下CMS的做法, 例Megento。 都是用Key - value的方式, 不同类型的字段保存在不同的表中。 自己看吧。

相关推荐

    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)对象是创建报表和...

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

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

    C#功能非常强大的RDLC自定义报表/单据源码系统

    在C#项目中,报表(Report)和单据(Document)的自定义功能是常见且重要的需求,特别是在企业级应用中,用于数据分析、业务展示和信息交流。本文将深入探讨C#中RDLC(Reporting Services Report Definition ...

    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)查询、区间范围查询等,同时还支持自定义模板字段设置。下面我们将详细探讨这个高级查询...

Global site tag (gtag.js) - Google Analytics