需求是在web页面上做表格的编辑,可以添加删除一行,也可以在这个一行里在添加一个子行。然后添加完需要的表格后最后点击保存按钮。这种数据表该如何设计比较好呢,因为可能每行的表格样式都不一样。我之前是把这整个表格分成多个表格对象做关联,但是感觉这样不是和合理也比较麻烦,不知道这块是否有比较好的资料可以学习一下

解决方案 »

  1.   

    表A记录表格的行的信息,比如记录  行A  序号是1,属于表格tableA,有无子行,改行的父行的序号是多少
    表B记录序号为1的行A的样式信息
    这样是不是清晰点
      

  2.   

    这样的话一张报表就不是会产生很多表的记录了,有没有什么办法一个报表我就作为一条记录,能否让前端棉编辑完这个报表后,直接把他的页面格式作为json传给我我直接保存到一个字段里就行,展示的话也按前端传给我的格式返给它,这样会不会方便点,而且报表可能会有很多内容这样多的话字段长度会不会不够,我把报表发你看下
      

  3.   

    其实是可以把前端的html  保存到数据库的某个字段里面的这个方法也可以的。
      

  4.   

    其实是可以把前端的html  保存到数据库的某个字段里面的这个方法也可以的。
    这种方式字段长度设置多少合适呢
      

  5.   

    怎么设计取决于你要怎么用这张表。如果只是用作展示,直接把html代码存进数据库或者硬盘上都行。如果你要用这里面的数据做些其他事情,比如获取指标的权重来与其他数据表做关联,就只能用传统的表设计了。具体要根据你的实际业务去设计表。至于你说的样式问题,这是你100%不需要考虑的。至少不会把样式直接存在数据库里。
      

  6.   

    MVC考虑一下
      

  7.   

    如果是mysql 的数据库,可以用varchar来存储html脚本的
      

  8.   


    个人认为,如果是mysql ,且存储html内容,还是建议用:text  数据类型比较好.
      

  9.   


    个人认为,如果是mysql ,且存储html内容,还是建议用:text  数据类型比较好.
    这个看数据量大小了
      

  10.   


    个人认为,如果是mysql ,且存储html内容,还是建议用:text  数据类型比较好.
    这个看数据量大小了请问下如果我直接把页面报表的内容让前端转成一个json字符串我保存后,之后如果老板突然要求要有导出功能,我能把这个json数据转成excel导出吗?关键是excel表格的样式不固定 我后台好像没法判断,有些单元格是合并的有些不是
      

  11.   

    我如果把前端的报表用json字符串保存进数据库,之后如果老板突然要求要做导入导出的话,是不是不好整。主要是excel格式可能不好判断,前端设置的可能有合并单元格之类的,不像一行一条数据那样
      

  12.   

    相当不好整。前端花1分钟调整下样式,你可能要花1个小时去调整解析页面的方法。
    如果有除了展示以外的功能,建议你只管好好设计表,把必要的数据传出去。至于怎么展示,交给前端处理。那这种相对复杂的报表对应数据表该怎么设计呢,我之前是比如一个合并的单元格后面有多行子行,我是把合并的单元格做一个表对象,然后后面的子行去关联它,但是感觉这样不合理,而且表可能会有很多张
    拿1、2、4列举个例子吧
    只要传出这样的数据就够了
    with tab1 as (
    select 'kaohe' col1, 1 ord, 'a-----' detail, 1 detail_type from dual union all
    select 'kaohe' col1, 2 ord, 'a-----', 1 from dual union all
    select 'kaohe' col1, 3 ord, 'a-----', 2 from dual union all
    select 'dingxingkaohe' col1, 4 ord, 'a-----', 2 from dual union all
    select 'dingxingkaohe' col1, 5 ord, 'a-----', 2 from dual 
    )
    select t1.col1,
           row_number() over(partition by t1.col1 order by ord) rn,
           count(1) over(partition by t1.col1 order by ord) cn,
           t1.detail,
           t1.detail_type
      from tab1 t1
     order by t1.ord
    ;
    前端通过rn==1来判断是否输出td,并且以cn为rowspan去合并单元格。第四列只有两种格式,普通的td与带有去边框、滚动条的textarea的td,具体是哪个通过detail_type判断。