zoukankan      html  css  js  c++  java
  • 数据库表动态列设计

    需求:

    能够根据数据库在界面动态显示表单,包括表单类型、名称等,并且必须提供 添加新表单,修改表单等功能。

     

     

    为了满足客户不断的需求变化,有时候需要为某商品增加、修改、删除、属性,这样的话以往的数据库表就很难实现,

    因为表的字段是定死了 如果你需要增加一个属性的时候 ,就必须修改表,听说这是不允许的~~。

     

    所以我们要设计一个灵活的数据库 下面以电脑设备为例:

    pc 现有属性 name cpu ram disk 现在我们要为pc添加一个 mainboard 属性。

     

    既然必须提供增加表单,那么我们创建表的时候就不能以cpu ram disk 为PC表的列名, 能够修改的话只能是值

    所以应该建立以个属性表 来保存这些值

     

     create table y_property(
     proid varchar2(16) primary key,
     proname varchar2(64),--属性名称
     htmltype varchar2(64),--界面类型
     isneed  number --是否必填 
     )

     

    proid proname htmltype isneed 
    p001 型号 text 0
    p002 cpu text 0
    p003 ram select 0
    p004 disk select 0

     

     

     

    然后要建立以个表来保存这些电脑属性的值

     

     create table y_provalues(
     proid varchar2(32)  , --属性id
     entity varchar2(32) , --实例id
     provalue varchar2(1024) ,--属性值
     constraints pro_fk_proid foreign key (proid) references  y_property(proid),
     constraints provalues_pk primary key (proid,entity) 
     )

     

    proid entity provalue
    p001 e001 联想扬天V45
    p002 e001 AMD5200
    p003 e001 金士顿
    p004 e001 wd500g
    p001 e002 HP450
    p002 e002 INTEL458
    p003 e002 黑金刚
    p004 e002 wd320g

     

    其实也可以这样理解: 

    y_property 这个表就是一个类

     

    y_provalues 这个表就是 y_property 这个类的实例。entity属性就是实例编号,就是一个实际存在的产品编号。

     

    另外我们还可以在这个基础上面拓展其他的表使其功能更为丰富,

    如 电脑档次表、cpu表(这样的话我们就可以y_provalues中的provalue  与其他表关联,在界面就可以提供下拉列表显示,选择)

     

     这样下来的话就能对电脑商品添加属性了。

    转自:http://yelifei94.iteye.com/blog/1041423

    我个人感觉实现动态列还有如下几个方案供参考

    可以考虑在创建表时,多创建几个预留字段

    该DB表,增加列sql = "alter tableName add columnName type(length)";

    参考:http://blog.csdn.net/casper_liu/article/details/1734989

    http://club.sm160.com/showtopic-847246.aspx

     
  • 相关阅读:
    专题1
    HDU-6968(DP,和DP)
    ios环境下H5 input 选择图片在函数回调中失效的问题
    vue自定义组件的坑:数组绑定与引号的使用
    关于布局的胡言乱语
    flex布局小结
    微信小程序中overflow:scroll失效的问题
    微信小程序图片的比例问题
    vue用多了反而疏忽了选择器的使用
    在vue项目中做一个类ctrl+f的搜索功能
  • 原文地址:https://www.cnblogs.com/Jeely/p/12366020.html
Copyright © 2011-2022 走看看