你是不是也曾遇到这样的问题???
客户要求允许表结构动态增加,预留冗余字段的方法虽然处理方便,可并不算是一种科学
的或者说面向对象的好方法。那么是不是可以参考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是否可以呢?期待回复!
多维数据库
最新推荐文章于 2022-05-31 12:21:39 发布