完整性約束資料庫
1. 什麼是資料庫的完整性約束條件
資料庫完整性(Database
Integrity)是指資料庫中數據的正確性和相容性,其目的是防止垃圾數據的進出。資料庫完整性由各種各樣的完整性約束來保證,因此可以說資料庫完整性設計就是資料庫完整性約束的設計。加在資料庫之上的語義約束條件就是資料庫完整性約束條件。
完整性約束條件作用對象可以使關系、元組、列三種。
●列約束主要是列的數據類型、取值范圍、精度、排序等約束條件。
●元組的約束是元組中各個欄位間的聯系的約束。
●關系的約束是若干元組間、關系集合上以及關系之間的聯系的約束。
完整性約束條件涉及這三類對象,其狀態可以是靜態的,也可以是動態的。所謂靜態約束是指資料庫每一確定狀態時的數據對象所應滿足的約束條件。它是反映資料庫狀態合理性的約束,這是最重要的一類完整性約束。
動態約束是指資料庫從一種狀態轉變為另一種狀態時,新、舊值之間所應滿足的約束條件。
完整性約束條件可分為以下六類:
●靜態列級約束
●靜態元組約束
●靜態關系約束
●動態列級約束
●動態元組約束
●動態關系約束
1.
靜態列級約束是對一個列的取值域的說明,包括以下幾個方面:
(1)對數據類型的約束,包括數據的類型、長度、單位、精度等;
(2)對數據格式的約束。例如規定日期的格式為YYYY-MM-DD;
(3)對取值范圍或取值集合的約束。例如規定學生的成績取值范圍為0~100;
(4)對空值的約束,規定哪些列可以為空值,哪些列不能為空值;
2.
靜態元組約束就是規定元組的各個列之間的約束關系。例如,訂貨關系中包含發貨量、訂貨量等列,規定發貨量不得超過訂貨量。
3.
靜態關系約束是指在一個關系的各個元組之間或者若干關系之間存在的約束。常見的靜態約束有:
(1)實體完整性約束;
(2)引用完整性約束;
(3)函數依賴約束;大部分函數依賴約束都在關系模式中定義。
(4)統計約束;即欄位值與關系中多個元組的統計值之間的約束關系。例如,規定部門經理的工資不得高於本部門職工平均工資的5倍,不得低於本部門職工平均工資的2倍。
4.
動態列級約束是修改列定義或列值時應滿足的約束條件,包括下面兩方面:
(1)修改列定義時的約束。例如,將允許空值的列改為不允許空值時,如果該列目前已存在空值,則拒絕這種修改。
(2)修改列值時的約束。修改列值時有時需要參照其舊值,並且新舊值之間需要滿足某種約束條件。例如,職工調整後的工資不得低於其調整前的原來工資;職工婚姻狀態的變化只能是由未婚到已婚、已婚到離異、離異到再婚等幾種情況。
5.
動態元組約束是指修改元組的值時元組中各個欄位間需要滿足某種約束條件。例如,職工工資調整時新工資不得低於原工資+工齡*1.5等。
6.
動態關系約束是加在關系變化前後狀態上的限制條件。例如,在集成電路晶元設計資料庫中,一個設計中用到的所有單元的工藝必相同,因此,在更新某個設計單元時,設計單元的新老工藝必須保持一致。
2. 關系資料庫的三個完整性約束是什麼各是什麼含義
可分為三種類型:與表有關的約束、域(Domain)約束、斷言(Assertion)。
1、與表有關的約束:是表中定義的一種約束。可在列定義時定義該約束,此時稱為列約束,也可以在表定義時定義約束,此時稱為表約束。包括列約束(表約束+NOTNULL)和表約束(PRIMARYKEY、foreignkey、check、UNIQUE)。
2、域(Domain)約束:在域定義中被定義的一種約束,它與在特定域中定義的任何列都有關系。
3、斷言(Assertion):在斷言定義時定義的一種約束,它可以與一個或多個表進行關聯。不必與特定的列綁定,可以理解為能應用於多個表的check約束,因此必須在表定義之外獨立創建斷言。
(2)完整性約束資料庫擴展閱讀:
完整性約束中包含四個完整性,即域完整性,實體完整性、參照完整性和用戶定義完整性。
1、域完整性為保證資料庫欄位取值的合理性。屬性值應是域中的值,這是關系模式規定了的。除此之外,一個屬性能否為NULL,這是由語義決定的,也是域完整性約束的主要內容。
2、實體完整性,指關系的主關鍵字不能重復也不能取「空值"。一個關系對應現實世界中一個實體集。現實世界中的實體是可以相互區分、識別的,也即它們應具有某種惟一性標識。
3、參照完整性,定義建立關系之間聯系的主關鍵字與外部關鍵字引用的約束條件。關系資料庫中通常都包含多個存在相互聯系的關系,關系與關系之間的聯系是通過公共屬性來實現的。
4、用戶定義完整性,則是根據應用環境的要求和實際的需要,對某一具體應用所涉及的數據提出約束性條件。
3. SQL資料庫的完整性約束是用來干什麼的
保證數據的正確完整性,避免對資料庫的增刪改等操作帶來的錯誤。
舉個例子,一條數據表結構為
學號 姓名 。。。
其中學號為主鍵,但是你試圖添加一條資料庫記錄 : 張三 。。。
而學號為空 NULL 這樣則是添加不成功的,這就是完整性約束。
4. 資料庫完整性約束條件
你輸入的名字的長度必須是2到8之間,你輸入「2」,長度只有1,所以不符合約束條件
5. 如何來實現關系資料庫完整性約束
資料庫中的數據是從外界輸入的,而數據的輸入由於種種原因,會發生輸入無效或錯誤信息。保證輸入的數據符合規定,成為了資料庫系統,尤其是多用戶的關系資料庫系統首要關注的問題。數據完整性因此而提出。數據完整性是指數據的精確性和可靠性。它是應防止資料庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。數據完整性分為四類:實體完整性、域完整性、參照完整性、用戶定義的完整性。資料庫採用多種方法來保證數據完整性,包括外鍵、約束、規則和觸發器。系統很好地處理了這四者的關系,並針對不同的具體情況用不同的方法進行,相互交叉使用,相補缺點。
樓上說的主鍵外鍵只是一方面,還有約束、規則和觸發器,通過設置,由DBMS來自動完成。
6. 資料庫定義完整性約束!!!急!!!
1:在關系Student中插入學生年齡值應在15~35之間
ALTER TABLE Student
ADD CONSTRAINT chk_Student_age
CHECK ( Sage >= 15 AND Sage <= 35 );
2:在關系SC中插入元組時,其sno值和cno值必須分別在Student中和Course中出現
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Student
FOREIGN KEY (Sno) REFERENCES Student;
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Course
FOREIGN KEY (Cno) REFERENCES Course;
3:在關系SC中修改grade值時,必須仍在0~100之間
ALTER TABLE SC
ADD CONSTRAINT chk_SC_grade
CHECK ( grade >= 0 AND grade <= 100 );
4:在刪除關系Course中一個元組時,首先要把關系SC中具有同樣cno值的元組全部刪去
-- 這個是在 第 2 題的基礎上面, 增加一個 ON DELETE CASCADE
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Course
FOREIGN KEY (Cno) REFERENCES Course
ON DELETE CASCADE;
5:在關系Student中把某一個sno值修改為新值時,必須同時把關系SC中那些同樣的sno值也修改為新值
-- 這個是在 第 2 題的基礎上面, 增加一個 ON UPDATE CASCADE
ALTER TABLE SC
ADD CONSTRAINT FK_SC_Student
FOREIGN KEY (Sno) REFERENCES Student
ON UPDATE CASCADE;
7. SQL 建立資料庫 表(完整性約束)
資料庫可以在SQL2000/2005/2008企業管理器中直接建立;
建表
USEDB
GO
CREATETABLET1---建立T1表
(M_1INTPRIMARYKEYNOTNULL,
M_2CHAR(20),
M_3CHAR(20),
N_1INT
)
GO
CREATETABLET2---建立T2表
(N_1INTPRIMARYKEYNOTNULL,
N_2CHAR(20),
N_3CHAR(20)
)
GO
ALTERTABLET1
---為T1表建立外鍵(當有數據插入T1時,會檢查T1中的N_1在T2中是否存在)
ADDCONSTRAINTFK_T1_N_1FOREIGNKEY(N_1)REFERENCEST2(N_1)
GO
---------------
刪除table2中數據的時候table1中有N_1的信息也要刪除
建個觸發器
USEDB
GO
CREATETRIGGERinfor_delONT2FORDELETE
AS
BEGIN
DELETEFROMT1WHEREN_1IN(SELETEN_1FROMDELETED)
GO
--------------------------
SQL2008下已通過執行
8. 資料庫完整性約束
這個只能約束位數,不能約束輸入的日期是否合法,盡量做到程序中
9. 資料庫用SQL語言建表,什麼是完整性約束請問如何寫出各種完整性約束
一、數據的完整性
實體完整性
實體完整性簡單的說,就是將表中的每一行看作一個實體。實體完整性要求表的標示符列或主鍵的完整性。可以通過建立唯一索引、PRIMARY KEY約束、UNIQUE約束,以及列的IDENTITY屬性來實施實體完整性。
域完整性
域完整性是指給定列的輸入有效性。要求表中指定列的數據具有正確的數據類型、格式和有效的數據范圍。強制域有效性的方法有:限制類型(通過數據類型)、格式(通過 CHECK 約束和規則)或可能值的范圍。域完整性通過 FOREIGN KEY 約束、CHECK 約束、DEFAULT 定義、NOT NULL 定義和規則來實現。
引用完整性
引用完整性又稱參照完整性。引用完整性維持被參照表和參照表之間的數據一致性,他通過主鍵(PRIMARY KEY)約束和外鍵(FOREIGN KEY)約束來實現。
用戶定義完整性
二、約束操作
與表相關的約束
在SQL 2008中,常用有6種約束,分別是NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,DEFAULT和CHECK.
--添加主鍵約束(即primary key約束)
alter table goods add constraint pk_gid primary key(gid)
--1.刪除主鍵約束
alter table goods drop pk_gid
--添加唯一約束(即unique約束)
alter table goods add constraint uq_gname unique(gname)
--刪除唯一約束:仿1.
--添加預設約束(即default約束)
alter table goods add constraint def_gtel default 0000-00000000 for gtel
--刪除預設約束:仿1.
--添加檢查約束(即check約束)
alter table goods add constraint ck_gprice check(gprice>500)
--刪除check約束:仿1.
--創建表2
create table g_p
(
wno int identity(1,1) primary key,
gno int
)
--添加外鍵約束(即foreign key約束)
alter table g_p
add constraint fk_gno
foreign key(gno) references goods(gid)
--刪除外鍵約束:仿1.
--使用newid()
select newid()--生成全球唯一的ID號
create table customer
(
custID uniqueidentifier not null default newid(),
customer char(30) not null
)
insert customer values(newid(),\''\''accp\''\'')--向customer中插入信息
-----------------------------------慢慢研究----
10. 資料庫的完整性包含哪些完整性約束
數據完整性約束指的是為了防止不符合規范的數據進入資料庫,在用戶對數據進行插入、修改、刪除等操作時,DBMS自動按照一定的約束條件對數據進行監測,使不符合規范的數據不能進入資料庫,以確保資料庫中存儲的數據正確、有效、相容。
資料庫的完整性約束包含以下類型:
1) 與表有關的約束:是表中定義的一種約束。可在列定義時定義該約束,此時稱為列約束,也可以在表定義時定義約束,此時稱為表約束。
2) 域(Domain)約束:在域定義中被定義的一種約束,它與在特定域中定義的任何列都有關系。
3) 斷言(Assertion):在斷言定義時定義的一種約束,它可以與一個或多個表進行關聯。
(10)完整性約束資料庫擴展閱讀:
數據的完整性
分為以下四類:
1) 實體完整性:規定表的每一行在表中是惟一的實體。
2) 域完整性:是指表中的列必須滿足某種特定的數據類型約束,其中約束又包括取值范圍、精度等規定。
3) 參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無意義的數據在資料庫中擴散。
4) 用戶定義的完整性:不同的關系資料庫系統根據其應用環境的不同,往往還需要一些特殊的約束條件。用戶定義的完整性即是針對某個特定關系資料庫的約束條件,它反映某一具體應用必須滿足的語義要求。