oracle10g系统管理之表管理

本文介绍了数据库表设计的基本原则,包括命名规范、数据类型选择、表类型及位置规划等内容,并提供了修改表结构的实用SQL命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">1.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">设计表</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">1)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">规划表、列、索引和簇时,这些对象应该使用有意义的名称。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">2)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">规划表明和列名时,要使用一致的缩写格式、单数或复数格式。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">3)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">为了给用户和其他人员提供有意义的帮助信息,应该使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">COMMENT</span></span><span style="">命令描述表、列的作用。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">4)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">设计表时,应该使用第一范式、第二范式、第三范式规范化每张数据库表。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">5)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">定义表列时,应该选择合适的数据类型和长度。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">6)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">定义表列时,为了节省存储空间,应该将</span><span lang="EN-US"><span style="font-family: Times New Roman;">NULL</span></span><span style="">列放到后面。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">7)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">在合适的情况下使用簇表以节省存储空间并提高</span><span lang="EN-US"><span style="font-family: Times New Roman;">SQL</span></span><span style="">语句的性能。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">2.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">规划表的类型</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">1)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">普通表:数据以无序方式存放在单独的表段中,该种表是最基础、最常用的数据库表类型。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">2)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">簇表:簇由共享相同数据块的一组表组成,在合适的情况下使用簇表可以节省存储空间并提高</span><span lang="EN-US"><span style="font-family: Times New Roman;">SQL</span></span><span style="">语句性能。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">3)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">索引表:数据以</span><span lang="EN-US"><span style="font-family: Times New Roman;">B-</span></span><span style="">树结构存放在主键约束所对应的索引段中。使用索引表时,索引叶块不仅包含了健列的数据,也包含了其他非健列的数据。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">4)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">分区表:数据被划分为更小的部分,并且存储到相应的分区段中,每个分区段可以独立管理和操作。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">3.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">规划表的位置</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span style="">如果建表时不指定</span><span lang="EN-US"><span style="font-family: Times New Roman;">TABLESPACE</span></span><span style="">选项,</span><span lang="EN-US"><span style="font-family: Times New Roman;">Oracle</span></span><span style="">会将表段建立在用户的默认表空间中,通过指定</span><span lang="EN-US"><span style="font-family: Times New Roman;">TABLESPACE</span></span><span style="">选项,可以将表段建立在其他表空间。需要注意,如果要在特定表空间上建表,用户必须具有相应表空间配额或具有</span><span lang="EN-US"><span style="font-family: Times New Roman;">UNLIMITED TABLESPACE</span></span><span style="">系统权限。当规划表的存放位置时,应该注意以下事项:</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">1)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">如果将用户对象放到</span><span lang="EN-US"><span style="font-family: Times New Roman;">SYSTEM</span></span><span style="">表空间中,将会影响数据库性能。因此</span><span lang="EN-US"><span style="font-family: Times New Roman;">Oracle</span></span><span style="">建议不要在</span><span lang="EN-US"><span style="font-family: Times New Roman;">SYSTEM</span></span><span style="">表空间上存放用户对象。为了避免将用户对象建立在</span><span lang="EN-US"><span style="font-family: Times New Roman;">SYSTEM</span></span><span style="">表空间上,建议数据库管理员必须指定每个用户的默认表空间。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">2)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">设计应用系统时,应该规划存放应用对象的表空间,不要将用户对象随意分布到各个表空间,以避免增加用户对象的管理时间。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">4.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style=""><span style="font-size: small;">使用并行方式建表</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span style="">使用子查询(</span><span lang="EN-US"><span style="font-family: Times New Roman;">AS SELECT</span></span><span style="">)建表时,在多</span><span lang="EN-US"><span style="font-family: Times New Roman;">cpu</span></span><span style="">环境下,应使用并行方式建表,以提高性能。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">5.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">NOLOGGING</span></span><span style="">选项建表</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span style="">使用子查询建表时,通过制定</span><span lang="EN-US"><span style="font-family: Times New Roman;">NOLOGGING</span></span><span style="">选项,可以最小化建表所生成的重做信息,从而提高建表性能。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">6.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">COMPRESS</span></span><span style="">选项建表</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt;"><span style="font-size: small;"><span style="">使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">Oracle</span></span><span style="">的表压缩特征时,</span><span lang="EN-US"><span style="font-family: Times New Roman;">Oracle</span></span><span style="">会将同一个数据块中行和列的重复数据放在数据块的头部,压缩了表数据,从而节省了表的存储空间。因为表压缩特征会降低磁盘和内存占用,所以可以有效的提高查询操作的性能。</span></span></p>
<p class="MsoNormal" style=""><span style="font-family: Times New Roman;"><span style="" lang="EN-US"><span style=""><span style="font-size: small;">7.</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span lang="EN-US"><span style="font-size: small;">ROWID </span></span></span><span style="font-size: small;"><span style="">表的伪列,它用于唯一标识表列。</span><span lang="EN-US"><span style="font-family: Times New Roman;">ROWID</span></span><span style="">间接给出了表列的物理位置,它是定位表列的最快方式。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">8.</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">常用修改表的</span><span lang="EN-US"><span style="font-family: Times New Roman;">SQL</span></span><span style="">命令</span><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">1)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">修改列定义</span><span lang="EN-US"><span style="font-family: Times New Roman;"><span style=""> </span>ALTER TABLE department MODIFY loc VARCHAR2</span></span><span style="">(</span><span lang="EN-US"><span style="font-family: Times New Roman;">15</span></span><span style="">)</span><span style="font-family: Times New Roman;"> <span lang="EN-US">DEFAULT </span></span><span style="">‘</span><span lang="EN-US"><span style="font-family: Times New Roman;">BeiJing</span></span><span style="">’;需要注意,如果要算段</span><span lang="EN-US"><span style="font-family: Times New Roman;">CHAR</span></span><span style="">类型列的长度,如果该表已经包含数据,就必须将初始化参数</span><span lang="EN-US"><span style="font-family: Times New Roman;">blank_trimming</span></span><span style="">设置为</span><span lang="EN-US"><span style="font-family: Times New Roman;">true</span></span><span style="">。</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">2)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">增加列</span><span lang="EN-US"><span style="font-family: Times New Roman;"><span style=""> </span>ALTER TABLE department ADD remark VARCHAR</span></span><span style="">(</span><span lang="EN-US"><span style="font-family: Times New Roman;">300</span></span><span style="">)</span><span style="font-family: Times New Roman;"> <span lang="EN-US">DEFAULT </span></span><span style="">‘</span><span lang="EN-US"><span style="font-family: Times New Roman;">GOOD</span></span><span style="">’</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">3)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">修改列名</span><span style="font-family: Times New Roman;"> <span lang="EN-US">ALTER TABLE department RENAME COLUMN loc to location</span></span><span style="">;</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">4)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">删除列</span><span lang="EN-US"><span style="font-family: Times New Roman;"><span style=""> </span>ALTER TABLE emp DROP COLUMN comm</span></span><span style="">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: 21pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Times New Roman;">ALTER TABLE emp DROP COLUMN (comm.</span></span><span style="">,</span><span lang="EN-US"><span style="font-family: Times New Roman;">phone)</span></span><span style="">;</span></span></p>
<p class="MsoNormal" style=""><span style="" lang="EN-US"><span style=""><span style="font-family: Times New Roman;"><span style="font-size: small;">5)</span><span style='font: 7pt "Times New Roman";'> </span></span></span></span><span style="font-size: small;"><span style="">使用</span><span lang="EN-US"><span style="font-family: Times New Roman;">UNUSED</span></span><span style="">选项删除列。如果该列已经包含大量数据,删除列的时间会很长。为了不影响性能,可以现将其标记为</span><span lang="EN-US"><span style="font-family: Times New Roman;">unused</span></span><span style="">,然后在数据库空闲阶段删除表列。</span></span></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值