多维数据库

你是不是也曾遇到这样的问题???
客户要求允许表结构动态增加,预留冗余字段的方法虽然处理方便,可并不算是一种科学

的或者说面向对象的好方法。那么是不是可以参考ORACLE内部字典设计的方法(如

DBA_,ALL_,USER_),因此拟建两张表:属性表attribute和属性值表attributevalue,用于

为1-table1 2-table2,3-table3添加属性并存储属性值 。

SQL> desc attribute;
Name         Type         Nullable Default Comments                        
------------ ------------ -------- ------- --------------------------------
TABLETYPE    NUMBER(2)                     所属表(1-table1 2-table2,3-table3)
FIELD_SEQ    NUMBER(38)                    字段编号                        
FIELD_NAME   VARCHAR2(60)                  字段名称                        
FIELD_TYPE   VARCHAR2(60)                  字段类型                        
FIELD_LENGTH NUMBER       Y                字段长度                        
STS          NUMBER       Y                状态(1-可用,0-不可用)         

SQL> desc attributevalue;
Name         Type         Nullable Default Comments                        
------------ ------------ -------- ------- --------------------------------
FILEID       NUMBER(38)                    所属主表行号               
TABLETYPE    NUMBER(2)                     所属表(1-table1 2-table2,3-table3)
FILEID_SEQ   NUMBER(38)                    属性编号                        
FILEID_VALUE VARCHAR2(60)                  属性值                           
FILEID_TYPE  VARCHAR2(60)                  数据类型               

应用程序是B/S模式的,那么如何使得用户在浏览器页面模式下对表结构进行初始化模式的

修改,在attribute表中对table1 增加字段设置。那么由此带来的查询和报表显示等问题

该如何处理和解决呢?
目标:将table1(table2或table3)和attributevalue无逢关联,可以按记录查询table1(table2或table3)的所有属性
(包括attribute中用户新增的属性列)。
可考虑的方案:
1。创建视图,table1 和attribute,attributevalue进行关联,产生的是一个一对多的关系,增加的属性列及其值按行存储,数据冗余。且没有实现表行和列的逆转,未形成table1一对一的关系。   

2。创建存储过程,利用表的复杂UNION实现,产生动态SQL DML(SELECT等),供JAVA程序调用。但UNION性能较差,复杂存储如何实现?

3。经查资料,ORACLE提供新的集合类型,如嵌套表和可变数组,应该是很好的解决办法。不知道8.17支持否?另外,哪位高手用过
   请指点,不知道这种嵌套表和可变数组类型其它操作是否可行。另外用户定义的CONSTRUCTOR是否可以呢?期待回复!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值