A. 數據完整性的措施有哪些
實體完整性將行定義為特定表的唯一實體。實體完整性強製表的標識符列或主鍵的完整性(通過余行索引、unique
約束、primary
key
約束或
identity
屬性)。域完整性
域完整性是指給定列的輸入有效性。強制域有效性的方法有:限制類型(通過數據類型)、格式(通過
check
約束和規則)或可能值的范圍(通過
foreign
key
約束、豎肢嘩check
約束、default
定義、not
null
定義和規則)。引用完整性
在輸入或飢穗刪除記錄時,引用完整性保持表之間已定義的關系。
B. 實現數據完整性有那些方法
數據的完整性靠添加約束實現。實現完整性約束的方法依類別不同而不同。完整性約束可以分為兩大類:靜態約束和動態約束。
1、靜態約束
靜態約束是對資料庫狀態的約束,有可分為固定約束、隱含約束和顯示約束。
2、固定約束
是數據模型固有的約束,如關系的屬性是原子的,即滿足INF的約束。固有約束在DBMS實現時已經考慮。
3、隱含約束
指隱含於數據模式中的約束,一般用數據定義語言(DDL)語句說明,並存於數據目錄中。例如,域完整性約束、實體完整性以及參照完整性約束,都由相應的DDL語句說明。
4、顯示約束
固有約束、隱含約束是最基本的約束,但概括不了所有的約束。數據完整性是多種多樣的,且依賴於數據的語義與應用,這些約束只有顯式地說明,故稱顯式約束。顯式約束的說明一般有三種方法:
①用過程說明約束。這種方法不約束的說明和檢驗交給應用程序,應用程序中可以插入一些過程,以檢驗資料庫更新是否違反給定的約束,如果違反約束,則回滾事務。檢驗約束的過程一般用通用高級程序語言編寫,可以表達各式各樣的約束。這是一種普遍方法。
②用語言說明約束。斷言指資料庫狀態必須滿足的邏輯條件。資料庫完整性約束可以看成一系列斷言的集合。為了表示約束,DBMS須提供斷言說明語言。
③用觸發子表示約束。觸發子是一個軟體機制,其功能相當於WHENEVERTHEN,即一旦給定條件成立,系統就引發相應的動作。利用觸發子可以表示約束,以違反約束作為條件,以違反約束的處理作為動作。
動作不限於回滾事務,也可以給用戶一個消息或過程。在系統中定義一批觸發之後,就會監督資料庫狀態,一旦出現違反約束的更新,就會引發相應的動作。
5、動態約束
動態約束不是對資料庫狀態的約束,而是資料庫從一個狀態變為另一個狀態時應遵守的約束,例如在更新職工表時,工資、工齡這些屬性值一般只會增加,不會減少。動態約束一般也是顯式說明的。
在上述約束中,固有約束必然實施,隱含約束在大部分現代DBMS中基本實施或部分實施,顯式和動態約束只在個別DBMS中實施。
(2)如何保證資料庫中的數據的完整性擴展閱讀
知識點①:對數據操作語句來說,數據存儲到資料庫中,如果我們不對其進行分析和處理的話那麼數據就是沒有價值的,這種用戶對數據中數據的操作大多數查詢和修改的,修改包括了增加新的數據刪除舊的數據以及更改已有的數據。
那麼SQL語言提供了功能強大的數據查詢以及修改功能,那麼他的查詢功能是html語言的核心功能,這是資料庫中使用得最多的操作,那麼查詢語句也是SQL語言中比較復雜的一個語句。
知識點②:其實查詢語句是資料庫操作中最基本和最重要的女婿之一,它的功能是從資料庫中檢索滿足條件的數據,查詢的數據源可以來自一張表也可以來自多張表甚至是仕途,那麼他的查詢功能是由領航。
或者多煮幾路組成的一個記錄集合,並允許選擇一個或多個欄位來作為,輸出欄位了,查詢語句的基本結構可以描述,在一些結構中,我們可以對指定的輸出欄位以及用於指定數據的來源,那麼他有什麼單表查詢呢,數據源只設計一張表查詢的話是為了幫助讀者更好地理解SQL語句中的執行情況,這里指大部分查詢語句均列出來返回了結果。
C. 什麼是數據一致性和完整性,如何保證
數據一致性通常指關聯數據之間的邏輯關系是否正確和完整.而數據存儲的一致性模型則可以認為是存儲系統和數據使用者之間的一種約定.如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果常用的一致性模型有:
a、嚴格一致性(linearizability, strict/atomic Consistency):讀出的數據始終為最近寫入的數據.這種一致性只有全局時鍾存在時才有可能,在分布式網路環境不可能實現.
b、順序一致性(sequential consistency):所有使用者以同樣的順序看到對同一數據的操作,但是該順序不一定是實時的.
c、因果一致性(causal consistency):只有存在因果關系的寫操作才要求所有使用者以相同的次序看到,對於無因果關系的寫入則並行進行,無次序保證.因果一致性可以看做對順序一致性性能的一種優化,但在實現時必須建立與維護因果依賴圖,是相當困難的.
d、管道一致性(PRAM/FIFO consistency):在因果一致性模型上的進一步弱化,要求由某一個使用者完成的寫操作可以被其他所有的使用者按照順序的感知到,而從不同使用者中來的寫操作則無需保證順序,就像一個一個的管道一樣. 相對來說比較容易實現.
e、弱一致性(weak consistency):只要求對共享數據結構的訪問保證順序一致性.對於同步變數的操作具有順序一致性,是全局可見的,且只有當沒有寫操作等待處理時才可進行,以保證對於臨界區域的訪問順序進行.在同步時點,所有使用者可以看到相同的數據.
f、 釋放一致性(release consistency):弱一致性無法區分使用者是要進入臨界區還是要出臨界區, 釋放一致性使用兩個不同的操作語句進行了區分.需要寫入時使用者acquire該對象,寫完後release,acquire-release之間形成了一個臨界區,提供 釋放一致性也就意味著當release操作發生後,所有使用者應該可以看到該操作.
g、最終一致性(eventual consistency):當沒有新更新的情況下,更新最終會通過網路傳播到所有副本點,所有副本點最終會一致,也就是說使用者在最終某個時間點前的中間過程中無法保證看到的是新寫入的數據.可以採用最終一致性模型有一個關鍵要求:讀出陳舊數據是可以接受的.
h、delta consistency:系統會在delta時間內達到一致.這段時間內會存在一個不一致的窗口,該窗口可能是因為log shipping的過程導致.這是書上的原話.我也搞不很清楚.資料庫完整性(Database Integrity)是指資料庫中數據的正確性和相容性.資料庫完整性由各種各樣的完整性約束來保證,因此可以說資料庫完整性設計就是資料庫完整性約束的設計.包括實體完整性.域完整性.參照完整性.用戶定義完整性.可以主鍵.check約束.外鍵來一一實現.這個使用較多.
D. 在軟體項目建設中,如何保證資料庫完整性
1 伺服器端利用SQL Server 7.0資料庫實現數據的完整性
在用INSERT、DELETE、UPDATE語句修改資料庫內容時,數據的完整性可能遭到破壞,為了保證存放數據的正確性和一致性,SQL Server對數據施加了一個或多個數據完整性約束。這些約束限制了對資料庫的數據值,或者限制了資料庫修改所產生的數據值,或限制了對資料庫中某些值的修改。
在SQL Server關系資料庫中,主要有以下3類數據完整性:實體完整性(保證表中所有行唯一);參照完整性(主健和外健關系維護,它涉及兩個或兩個以上的表的數據的一致性維護);域完整性(某列有效性的集合,是對業務管理或是對資料庫數據的限制)。在報務器端有兩種方法實現數據完整性:定義reat Table 完整性約束及定義規則、預設、索引和觸發器。
1.1 定義 reatetable 完整性約束
此方法是在創建資料庫表的命令語句中,加入表級約束或列級來實現數據完整性。如在建表語句中加入非空(nt null)約束、預設(default)約束、唯一碼(unique)約束、主鍵碼(priary key)約束、外鍵碼(frEign key)約束、校驗(hek)約束等。它的主要特點是:定義簡單、安全可靠、維護方便。
1.1.1 非空約束、預設約束和校驗約束
非空約束限定了列值不能為空值;預設約束指定當向資料庫插入數據時,若用戶沒有明確給出某列的值時,SQL Server 自動輸入預定值;校驗約束則用來限定列的值域范圍。
例如,在創建圖書登記表中,限定登記日期、圖書類別編碼、登記號、中文名等列值不允許為空值;頁數的預設值為1;單價的預設值為0;圖書狀態只能為:「在館」、「借出」、「丟失」之一。
1.1.2 主鍵約束和唯一約束
主鍵約束和唯一約束,均為指定的列建立唯一性索引,即不允許唯一索引的列上有相同的值。主鍵約束更嚴格,不但不允許有重復值,而且也不允許有空值。
例如,在科室編碼表,對列ksb創建主鍵約束,對ks創建唯一約束。
1.1.3 外鍵約束
外鍵約束又稱參照完整性約束,用來限定本表外鍵碼列值與相關表主鍵碼欄位列值的匹配,即保證相關數據的一致性。
例如,在創建醫師編碼表中,醫生所屬科室 ssks 為外鍵碼,限定它與科室編碼表中的科室編碼 ksb 列值一致。
1.2 定義規則、預設、索引和觸發器
在資料庫表的創建命令語句中定義約束的方法,雖然具有簡單、方便、安全等特點,但它只對特定的表有效,不能應用到其他表,並且只能使用 alter table 命令修改或刪除約束,缺乏一定的靈活性。與此相反,在資料庫中創建與表相對獨立的規則、索引和觸發器對象,也能實現數據完整性,而且能實施更復雜、更完善的數據完整性約束。它的主要特點是功能強、效率高、維護方便。
1.2.1 定義規則
規則類似於表定義中的校驗約束,用來限定列的值域范圍。但它不限定於特定表,可以綁定到其他表的列或用戶自定義的數據類型中使用。
例如,在定義葯品的編碼規則Rul-ypb,可綁定到其他表中。
E. 如何實現資料庫完整性
資料庫中的數據是從外界輸入的,而數據的輸入由於種種原因,會發生輸入無效或錯誤信息。保證輸入的數據符合規定,成為了資料庫系統,尤其是多用戶的關系資料庫系統首要關注的問題。數據完整性因此而提出。數據完整性是指數據的精確性和可靠性態御。它是應防止資料庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。數據完整性分為四類:實體完整性、域完整性、參照完整性、用戶定義的完整性。資料庫採用多種方法來保證數據完整性,包括外鍵、約束、規則和觸發器。系統很好地處理了這四者的關系,並針對不同的具體情況用不同的方悶差法進行,相互交叉使用,相補缺點。
樓上說的主鍵外鍵只是一方面,還有約束、規則和帆罩岩觸發器,通過設置,由DBMS來自動完成。
F. 從哪些方面保證資料庫完整性
1、最重要,備份,定時備份以及增量備份;
2、定時檢查備份的殲橡有效性
3、做資料庫高可用集群,保證資料庫容災;
4、磁碟做raid
5、系統做HA
6、規范資料庫操作,以及業務返李的合理使用氏世旁資料庫;
G. 資料庫中,如何保證數據完整性
數據完整性一般包括域完整性、實體完整性、參照完整性三部分。
域完整性就是欄位的取值納悉范態宏圍是合法的,在指定的取值范圍內,用check來定義;
實體完整性就是每個關系表都要有主鍵,且不能是空的,不能有重復記錄;
參照完整性就是指外鍵要和另外一個表對應的主鍵值相同,且兩者必須同時在各自的表中出現;
我只能說這么多了,洞閉乎具體的話看書本的例子,有實例能使你更加明白,在這里說再多也沒用,呵呵!
H. 資料庫中,如何保證數據完整性
保證數據的完整性:
1. 用約束而非商務規則強制數據完整性
如果你按照商務規則來處理需求,那麼你應當檢查商務層次/用戶界面:如果商務規則以後發生變化,那麼只需要進行更新即可。
假如需求源於維護數據完整性的需要,那麼在資料庫層面上需要施加限制條件。
如果你在數據層確實採用了約束,你要保證有辦法把更新不能通過約束檢查的原因採用用戶理解的語言通知用戶界面。除非你的欄位命名很冗長,否則欄位名本身還不夠。 — Lamont Adams
只要有可能,請採用資料庫系統實現數據的完整性。這不但包括通過標准化實現的完整性而且還包括數據的功能性。在寫數據的時候還可以增加觸發器來保證數據的正確性。不要依賴於商務層保證數據完整性;它不能保證表之間(外鍵)的完整性所以不能強加於其他完整性規則之上。
— Peter Ritchie
2. 分布式數據系統
對分布式系統而言,在你決定是否在各個站點復制所有數據還是把數據保存在一個地方之前應該估計一下未來5 年或者10 年的數據量。當你把數據傳送到其他站點的時候,最好在資料庫欄位中設置一些標記。在目的站點收到你的數據之後更新你的標記。為了進行這種數據傳輸,請寫下你自己的批處理或者調度程序以特定時間間隔運行而不要讓用戶在每天的工作後傳輸數據。本地拷貝你的維護數據,比如計算常數和利息率等,設置版本號保證數據在每個站點都完全一致。
— Suhair TechRepublic
3. 強制指示完整性
沒有好辦法能在有害數據進入資料庫之後消除它,所以你應該在它進入資料庫之前將其剔除。激活資料庫系統的指示完整性特性。這樣可以保持數據的清潔而能迫使開發人員投入更多的時間處理錯誤條件。
— kol
4. 關系
如果兩個實體之間存在多對一關系,而且還有可能轉化為多對多關系,那麼你最好一開始就設置成多對多關系。從現有的多對一關系轉變為多對多關系比一開始就是多對多關系要難得多。
— CS Data Architect
5. 採用視圖
為了在你的資料庫和你的應用程序代碼之間提供另一層抽象,你可以為你的應用程序建立專門的視圖而不必非要應用程序直接訪問數據表。這樣做還等於在處理資料庫變更時給你提供了更多的自由。
— Gay Howe
6. 給數據保有和恢復制定計劃
考慮數據保有策略並包含在設計過程中,預先設計你的數據恢復過程。採用可以發布給用戶/開發人員的數據字典實現方便的數據識別同時保證對數據源文檔化。編寫在線更新來「更新查詢」供以後萬一數據丟失可以重新處理更新。
— kol
7. 用存儲過程讓系統做重活
解決了許多麻煩來產生一個具有高度完整性的資料庫解決方案之後,我所在的團隊決定封裝一些關聯表的功能組,提供一整套常規的存儲過程來訪問各組以便加快速度和簡化客戶程序代碼的開發。在此期間,我們發現3GL 編碼器設置了所有可能的錯誤條件,比如以下所示:
SELECT Cnt = COUNT (*)
FROM [<Table>]
WHERE [<primary key column>] = <new value>
IF Cnt = 0
BEGIN
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES ( <New value> )
END
ELSE
BEGIN
<indicate plication error>
END
而一個非3GL 編碼器是這樣做的:
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES
( <New value> )
IF @@ERROR = 2627 -- Literal error code for Primary Key Constraint
BEGIN
<indicate plication error>
END
第2 個程序簡單多了,而且事實上,利用了我們給資料庫的功能。雖然我個人不喜歡使用嵌入文字(2627)。但是那樣可以很方便地用一點預先處理來代替。資料庫不只是一個存放數據的地方,它也是簡化編碼之地。
— a-smith
8. 使用查找
控制數據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數據的一致性。某些公共數據特別適合查找:國家代碼、狀態代碼等
I. 什麼是資料庫完整性,關系資料庫中完整性控制有幾個方面,分別通過什麼機制保證
關系的完整性約束通常包括域完整性,實體完整性、參照完整性和用戶定義完整性。
1、域完整性是保證資料庫欄位取值的合理性,是最簡單、最基本的約束。在當今的關系DBMS中,一般都有域完整性約束檢查功能。
2、實體完整性,作用是指在傳輸、存儲信息或數據的過程中,確保信息或數據不被未授權的篡改或在篡改後能夠被迅速發現。按實體完整性規則要求,主屬性不得取空值,如主關鍵字是多個屬性的組合,則所有主屬性均不得取空值。
3、參照完整性,作用是定義建立關系之間聯系的主關鍵字與外部關鍵字引用的約束條件。關系資料庫中通常都包含多個存在相互聯系的關系,關系與關系之間的聯系是通過公共屬性來實現的。根據實體完整性要求,主關鍵字不得取空值。
4、用戶定義完整性作用是根據應用環境的要求和實際的需要,對某一具體應用所涉及的數據提出約束性條件。這一約束機制一般不應由應用程序提供,而應有由關系模型提供定義並檢驗,用戶定義完整性主要包括欄位有效性約束和記錄有效性。
J. 保證數據完整性有哪些技術
保證數據完整性有的技術、實體完整性將行定義為特辯和蘆定表的唯一實體。實體完整性強製表的標識符列或主鍵的完整性(通過索引、UNIQUE 約束、PRIMARY KEY 約束或 IDENTITY 屬性)。域完整性
域完整性是指給定列的輸入有效性。強制攜帶域有效性的方法有:限制類型(通過數據類型)、格式(通過 CHECK 約束和規則)或可能值的范圍(通過 FOREIGN KEY 約束、CHECK 約束、DEFAULT 定義、NOT NULL 定義和規則)。引用完整性
在輸入或刪除記錄時,引用完整性保持表之間已定義的關系。棚頃