約束、索引、三範式

1.約束的定義:

  約束(constraint):在建表時,爲某些列添加一些特定的規則,這些規則稱爲約束。約束是在表上強制執行的數據校驗規則保證數據庫的數據知足某種用戶的要求。添加約束以後,再往表中(插入、更新)數據時,若是數據不知足約束,則該條語句不能執行。數據庫

2.約束的分類:

2.1 非空約束 not null

非空約束確保字段值不容許爲空
非空約束只能在字段級定義數據庫設計

-- not null 非空約束
--添加了 not null的列的值不能爲null,但能夠是空格
create table test01( 
empno number(4) ,
ename varchar2(10) not null
)

2.2 惟一約束 unique

惟一性約束條件確保所在的字段或者字段組合不出現重複值
惟一性約束條件的字段容許出現空值性能

--unique 惟一鍵約束
--添加了unique 約束的列的值是惟一的,不能出現重複的值,但能夠有多個null值
create table test02 (
empno number(4) unique,
 ename varchar2(10)
 );
--非空且惟一
--容許同時添加not null和unique表示不能重複而且不能爲null
create table test03 (
empno number(4) not null unique,e
name varchar2(10) );

2.3 自定義檢查約束 check

check約束用於對一個屬性的值加以限制。
在check中定義檢查的條件表達式,在對數據進行插入或修改須要符合設置的條件。spa

--check 自定義檢查約束
--在插入或修改數據時,值要符合check中定義的條件
create table test04(
empno number(4),
ename varchar2(10),
age number(3) check(age>0 and age<200),
gender varchar2(3) check(gender='' or gender='')
)

2.4 主鍵約束 primary key

主鍵約束是數據庫中最重要的一種約束。在關係中,主鍵值不可爲空,也不容許出現重複,即關係要知足實體完整性規則。
– 主鍵從功能上看至關於非空且惟一
– 一個表中叧容許一個主鍵
– 主鍵是表中可以惟一肯定一個行數據的字段
– 主鍵字段能夠是單字段戒者是多字段的組合(聯合主鍵)
– Oracle爲主鍵建立對應的惟一性索引設計

--主鍵約束從形式可當作類非空且惟一
create table test05(
empno number(4) primary key,
ename varchar2(10)
)
--聯合主鍵
--一張表只有一個主鍵,但能夠選擇多個列,做爲聯合主鍵
create table test06(
empno number(4),
ename varchar2(10),
constraint pk_no_name primary key(empno,ename)
--在列中添加約束能夠不給約束命名,沒有命名系統會自動命名
--在表中添加約束就須要手動命名
)

2.5 外鍵約束 foreign key


外鍵是表中的一個列,它的值依賴於另外一張表的主鍵或者惟一鍵被依賴的表稱爲主表,code

存在外鍵的表稱爲從表外鍵的值必須是主表(指定的)主鍵或者惟一鍵中列出blog

注:
對於主表的刪除和修改主鍵值的操做,會對依賴關係產生影響,以刪除爲例:當要刪除主表的某個主鍵值(依賴的,那麼對依賴的影
響可採起下列3種作法:
1. RESTRICT方式(默認,沒法刪除):只有當從表中沒有一個外鍵值與要刪除的主表中主鍵值相對應時,纔可執行刪除操做。
2. CASCADE方式(聯級刪除):將從表中全部外鍵值與主表中要刪除的主鍵值相對應的記錄一塊兒刪除
3. SET NULL方式(設置爲空):將從表中全部與主表中被刪除的主鍵值相對應的外鍵值設爲空值索引

添加外鍵約束語法:
外鍵列 REFERENCES 表名(主鍵列)
[ON DELETE [CASCADE|SET NULL]] 如省略on短語,默認按第一種處理方式。table

--主表
create table t_dept(
deptno number(2) primary key,
dname varchar2(12)
)

--從表
create table t_emp(
empno number(4),
ename varchar2(10),
--添加外鍵,指定主鍵刪除處理方式
deptno number(2) references t_dept(deptno) on delete set null
) 

3.添加和修改約束

可增長或刪除約束,但不能直接修改
語法:
增長
alter table 表名 add constraint 約束名 unique(列名)
刪除
alter table 表名 drop constraint 約束名 [cascade] (加了cascade就爲聯級刪除)class


4.索引

4.1 概念:

索引是爲了加快對數據的搜索速度而設立的。相似於一本書的目錄,數據庫對錶數據進行查詢時能夠經過索引快速定位到數據。索引是非顯示的,在建立以後不會再用到,但查詢數據時索引會自動起做用。

4.2 索引建立的兩種狀況:

1. 自動: 當在表上定義一個PRIMARY KEY 或者UNIQUE 約束條件時,Oracle數據庫自動建立一個對應的惟一索引。
2. 手動: 手動在某個或多個列上建立索引以加速查詢
語法:CREATE INDEX index 索引名 ON 表名 (列1[,列2]...);
在多個列上建立索引時,須要對多個列同時進行查詢,索引纔會起做用

4.3 使用索引需注意:

1. 索引提升檢索操做的性能,但下降數據插入、修改和刪除的性能。在執行這些操做時,DBMS(數據庫管理系統)必須動態地更新索引。
2.索引數據可能須要佔用大量空間
3.常常出現重複的數據不適合使用索引
4.在多個列上建立索引時,須要對多個列同時進行查詢,索引纔會起做用

4.4 刪除索引:

語法: drop index 索引名

5. 數據庫設計三範式:

數據庫的設計主要包含了設計表結構和表之間的聯繫,在設計的過程當中,應該遵照三範式:第一範式:數據庫表中的每個列都必須是不可分割的基礎數據項。例如:「地址」應該拆分紅省份、城市、詳細地址等多個部分進行存儲第二範式:確保表中每列都與主鍵相關第三範式:一個數據庫表中不能包含已在其它表中已包含的非主關鍵字信息。

相關文章
相關標籤/搜索