pk+uk+fk+index
来源:互联网 发布:啄木鸟xp优化工具 编辑:程序博客网 时间:2024/05/16 19:30
1.pk
数据库表分为实体表和关系表。
实体表是用来描述在domain(领域模型)里确实存在的实体(人、财、物、时间、空间)及实体元素发生的活动(转移)。实体表的pk一般由系统自动生成(SYS_GUID()和sequence)。
关系表是用来描述两张实体表之间的多对多关系,关系表的pk一般是两张实体表pk的联合,此pk同时具有uk的功能,所以关系表不用再建uk。
--查询pk缺失的表
select table_name from user_tables t where not exists (select 1 from user_indexes i where i.table_name=t.table_name and uniqueness='UNIQUE' and index_name like '%PK%');
--创建pk
alter table yj_dcjxdy add constraint pk_yj_dcjxdy primary key (id);
2.uk
重复记录的发生:在数据库设计之初就考虑给每张表建UK,一般是不会出现重复记录的情况,重复记录的发生主要是因为uk缺失导致的。
uk在后期的调整大多是增加属性,此时不会出现重复记录的情况;当uk的调整是减少属性是,可能出现重复记录。
--查询uk缺失的表
select table_name from user_tables t where not exists (select 1 from user_indexes i where i.table_name=t.table_name and uniqueness='UNIQUE' and index_name like 'UK_%');
--删除重复记录
delete from yj_dcjxdy e where e.rowid > (select min(x.rowid) from yj_dcjxdy x where x.dcgid = e.dcgid);
--创建uk
create unique index UK_yj_dcjxdy on yj_dcjxdy (dcgid);
3.fk+index
fk是用来描述两张实体表之间的一对多关系(两张实体表之间一般不存在一对一的关系,如果有一对一的两张实体表,完全可以合并成一张实体表)。
fk与pk的区别在于,oracle自动给pk建索引,但默认不给fk建索引。
fk不建索引的后果是:在多表级联查询时,没有索引,将触发全表扫描,在数据量大的情况下,会慢的一塌糊涂。
--查询fk没有建index的情况
select table_name, constraint_name,
cname1 || nvl2(cname2,','||cname2,null) ||nvl2(cname3,','||cname3,null) || nvl2(cname4,','||cname4,null) ||nvl2(cname5,','||cname5,null) || nvl2(cname6,','||cname6,null) ||nvl2(cname7,','||cname7,null) || nvl2(cname8,','||cname8,null) columns
from (select b.table_name, b.constraint_name, max(decode( position, 1, column_name, null )) cname1, max(decode( position, 2, column_name, null )) cname2,
max(decode( position, 3, column_name, null )) cname3, max(decode( position, 4, column_name, null )) cname4, max(decode( position, 5, column_name, null )) cname5, max(decode( position, 6, column_name, null )) cname6,
max(decode( position, 7, column_name, null )) cname7, max(decode( position, 8, column_name, null )) cname8, count(*) col_cnt
from (select substr(table_name,1,30) table_name,substr(constraint_name,1,30) constraint_name,substr(column_name,1,30) column_name,position from user_cons_columns ) a,
user_constraints b
where a.constraint_name = b.constraint_name and b.constraint_type = 'R' group by b.table_name, b.constraint_name
) cons
where col_cnt > ALL
(select count(*)
from user_ind_columns i
where i.table_name = cons.table_name and i.column_name in (cname1, cname2, cname3, cname4, cname5, cname6, cname7, cname8 )
and i.column_position <= cons.col_cnt
group by i.index_name
) order by table_name;
--创建index
create index idx_xt_yh_szbm on xt_yh (szbm);
4.引用
select * from user_constraints 约束表
select * from user_cons_columns 约束引用列表 position 列在约束中的位置
select * from user_indexes order by uniqueness,index_name 索引表
select * from user_ind_columns 索引引用列表 column_position 列在索引中的位置
select * from user_tables order by table_name 物理表
select * from user_segments 物理表和索引表
segment是指可增长的对象,如:表、索引;
其余的像 procedure、package、package body、type、type body、function、trigger都是不可增加对象,
按行存贮在source$的source varchar2(4000)属性中(即每行不能超多4000字节);
其中trigger还有另外一个限制,trigger的名称存放在obj$.name中;
trigger的内容作为匿名块存放在trigger$.action#(long类型 32MB 32760B)中,
即trigger的长度不能超过32760B。
- pk+uk+fk+index
- day19 Oracle ------ DDL(CREATE ,ALTER, constraints, PK, FK,UK,NOT NULL,CHECK) rename , truncate
- PK FK 命令小记
- FK+INDEX+LOCK的关系实验
- oracle:PK,Fk,联合主键,NOTNULL 约束详解
- PowerDesigner 设置Table表的颜色(例如:PK(主键),FK(外键),字体大小等)
- 你需要明白的索引和约束的前缀(AK,PK,IX,CK,FK,DF,UQ)
- http://host.robots.ox.ac.uk/pascal/VOC/voc2007/index.html
- FK warcraft
- IK&FK
- FK、IK
- UK Visa
- 秤先暗毕鞘平乜共衙驹趾檬舶uk
- FK 和 IK
- what m fk
- IK 和 Fk
- 什么叫FK、IK
- FK外键约束
- 删除数据库冗余数据 代码直接可用
- fireworks网页图片导出优化
- apache mina 学习(八)-----Handler
- iOS open source code
- Java类的加载机制
- pk+uk+fk+index
- ejabberd、jabber、jabberd、xmpp辨析
- Xcode 4 常用快捷键(和 Xcode 3 有些不一样了)
- 超强的分页存储过程 可用来各种查询
- 中国人为何宁花4000元买手机,不花6元买游戏
- 动态改变起始页
- LINUX相关网站备忘
- wordpress安装教程
- clutter 自定义actor