这涉及到一个问题:How to store unlimited characters in Oracle 11g?字符溢出Oracle 11g中的多列?
如果最大我需要的是8000个字符,可我只加3个VARCHAR2列,这样我将有4列,其中每一字符2000获得8000个字符。所以当第一列填满时,数值会溢出到下一列等等。这个设计会有什么不好的副作用吗?请建议。
这涉及到一个问题:How to store unlimited characters in Oracle 11g?字符溢出Oracle 11g中的多列?
如果最大我需要的是8000个字符,可我只加3个VARCHAR2列,这样我将有4列,其中每一字符2000获得8000个字符。所以当第一列填满时,数值会溢出到下一列等等。这个设计会有什么不好的副作用吗?请建议。
为什么不直接使用CLOB
列呢?我读了你的其他链接,我不明白为什么你的DBA不喜欢这些类型的列。我的意思是,CLOB
是Oracle针对此确切目的的一个重要功能。在购买Oracle时,贵公司为此功能付出了高昂的代价,那么为什么不利用Oracle实现最充分的功能,而不是试图提出黑客来做一些数据库并非真正设计的功能?
也许您不用花时间尝试设计黑客来克服由DBA创建的限制,您应该花一些时间教育您的DBA了解为什么CLOB
是解决您的问题的正确功能。
当DB具有我需要做出好设计的功能时,我不会满意糟糕的设计。如果DBA是问题的话,那么他们需要改变他们的观点,或者我认为你应该去高层管理。
我同意dcp您应该使用CLOB。但是如果对你被迫只用VARCHAR2列,那么我会不会做“滚你自己的”无限的文字都感觉通过增加越来越多的VARCHAR2列的表是这样的:
create table mytable
(id integer primary key
, text varchar2(2000)
, more_text varchar2(2000)
, and_still_more_text varchar2(2000)
);
相反,我将文本移动到一个单独的子表是这样的:
create table mytable
(id integer primary key
);
create table mytable_text
(id references mytable(id)
, seqno integer
, text varchar2(2000)
, primary key (id, seqno)
);
然后你需要为每个MYTABLE行,在mytable_text使用多行,你可以插入尽可能多的文本。
对于不使用CLOB的规范化方法+1。 – DCookie 2010-06-08 16:30:59
要添加到DCP的和托尼的出色答案:
你问,如果你提出的办法会不会有什么不良的副作用。这里有几件事要考虑:
更糟 - 当搜索项跨越两列之间的边界时,搜索(点#1)将不起作用...点#3的+1) – 2010-06-09 01:50:42
这是一个很大的文字 - 什么是你的使用情况,需要这么多? – 2010-06-07 21:17:52