當前位置:首頁 » 操作系統 » 資料庫完整性保護

資料庫完整性保護

發布時間: 2023-05-17 09:02:08

資料庫中,如何保證數據完整性

數據完整性一般包括域完整性、實體完整性、參照完整性三部分。
域完整性就是欄位的取值范圍是合法的,在指定的取值范圍內,用check來定義;
實體完整性就是每個關系表都要有主鍵,且不能是空的,不能有重復記錄;
參照完整性就是指外鍵要和另外一個表對應的主鍵值相同,且兩者必須同時在各自的表中出現;
我只能說這么多了,具體的話看書本的例子,有實例能使你更加明白,在這里說再多也沒用,呵呵!

⑵ 資料庫中,如何保證數據完整性

保證數據的完整性:
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. 使用查找

控制數據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數據的一致性。某些公共數據特別適合查找:國家代碼、狀態代碼等

⑶ 資料庫的完整性包含哪些完整性約束

數據完整性約束指的是為了防止不符合規范的數據進入資料庫,在用戶對數據進行插入、修改、刪除等操作時,DBMS自動按照一定的約束條件對數據進行監測,使不符合規范的數據不能進入資料庫,以確保資料庫中存儲的數據正確、有效、相容。

資料庫的完整性約束包含以下類型:

1)與表有關的約束:是表中念或銷定義的一種約束。可在仔游列定義時定義該約束,此時稱為列約束,也可以在表定義時定義約束,此時稱為表約束。

2)域(Domain)約束:在域定義中被定義的一種約束,它與在特定域中定義的任何列都有關系。

3)斷言(Assertion):在斷言定義時定義的一種約束,它可以與一個或多個表進行關聯。

(3)資料庫完整性保護擴展閱讀:

數據的完整性

分為以下四類:

1)實體完整性:規定表的每一行在表中是惟一的實體。

2)域完整性:是指表中的列必須滿足某種特定的團棚數據類型約束,其中約束又包括取值范圍、精度等規定。

3)參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無意義的數據在資料庫中擴散。

4)用戶定義的完整性:不同的關系資料庫系統根據其應用環境的不同,往往還需要一些特殊的約束條件。用戶定義的完整性即是針對某個特定關系資料庫的約束條件,它反映某一具體應用必須滿足的語義要求。

⑷ 簡述資料庫的安全性和完整性有什麼區別

資料庫的完整性的全名,關系資料庫的參照完整性(ReferentialIntegrity),一般是用在表基春示多個表之間關系時用的,而且經常使用。

資料庫的安歷鋒胡全性是指保護資料庫以防止不合法的使用所造成的數據泄露、更改或破壞。

數據的完整性和安全性是資料庫保護的兩個不同方面。安全性是防止用戶非法使用資料庫。完肢攔整性則是防止合法用戶使用資料庫時向資料庫中加入不合語義的數據。

數據的安全性是指資料庫是否容易攻破。

數據的完整性是指兩個表之間的完整連接。

⑸ 實體完整性和域完整性分別是對資料庫哪方面進行保護

資料庫的完整性包括三種:實體完整性、參照完整性、用戶自定義完整性,其中你說的域完整性屬於第三種。
實體完整性是指每張表都應該有主碼,主碼中的數據要求非空並且唯一,主碼用於保證表中的數據可以被唯一的標識,例如人員表中的身份證號碼可以作為主碼,能夠唯一標識一個人;
參照完整性是指相互存在內在關聯的表之間的關系,通過外碼實現,外碼中數據的取值,要麼取對應主碼中出現的值,要麼取空值,例如圖書借閱情況表中的圖書編號和讀者編號需要作為外碼分別參照圖書表的主碼(書號)以及讀者表的主碼(讀者號),借閱情況表中的書號必須取圖書表中存在的書號,表示借閱的圖書是存在的,借閱情況表中的讀者號也必須取讀者表中存在的讀者號,表示該讀者是實際存在的;
用戶自定義完整性包含多種,如范圍檢查(即域完整性)、預設值、唯一、非空等,其中域完整性是指表中某個欄位的取值范圍所需滿足的條件,例如性別只能取「男」或「女」之一。

⑹ 什麼是資料庫完整性,關系資料庫中完整性控制有幾個方面,分別通過什麼機制保證

關系的完整性約束通常包括域完整性,實體完整性、參照完整性和用戶定義完整性。
1、域完整性是保證資料庫欄位取值的合理性,是最簡單、最基本的約束。在當今的關系DBMS中,一般都有域完整性約束檢查功能。
2、實體完整性,作用是指在傳輸、存儲信息或數據的過程中,確保信息或數據不被未授權的篡改或在篡改後能夠被迅速發現。按實體完整性規則要求,主屬性不得取空值,如主關鍵字是多個屬性的組合,則所有主屬性均不得取空值。
3、參照完整性,作用是定義建立關系之間聯系的主關鍵字與外部關鍵字引用的約束條件。關系資料庫中通常都包含多個存在相互聯系的關系,關系與關系之間的聯系是通過公共屬性來實現的。根據實體完整性要求,主關鍵字不得取空值。
4、用戶定義完整性作用是根據應用環境的要求和實際的需要,對某一具體應用所涉及的數據提出約束性條件。這一約束機制一般不應由應用程序提供,而應有由關系模型提供定義並檢驗,用戶定義完整性主要包括欄位有效性約束和記錄有效性。

⑺ 怎麼樣保證資料庫遷移的完整性

資料庫的安全性、完整性、並發控制和恢復

from: http://bbs.chinaunix.net/viewthread.php?tid=188100

為了保證資料庫數據的安全可靠性和正確有效,DBMS必須提供統一的數據保護功能。數據保護也為數據控制,主要包括資料庫的安全性、完整性、並發控制和恢復。

1. 資料庫的存取控制
ORACLE保護信息的方法採用任意存取控制來控制全部用戶對命名對象的存取。用戶對對象的存取受特權控制。一種特權是存取一命名對象的許可,為一種規定格式。
ORACLE使用多種不同的機制管理資料庫安全性,其中有兩種機制:模式和用戶。模式為模式對象的集合,模式對象如表、視圖、過程和包等。第一資料庫有一組模式。
每一ORACLE資料庫有一組合法的用戶,可存取一資料庫,可運行一資料庫應用和使用該用戶各連接到定義該用戶的資料庫。當建立一資料庫用戶時,對該用戶建立一個相應的模式,模式名與用戶名相同。一旦用戶連接一資料庫,該用戶就可存取相應模式中的全部對象,一個用戶僅與同名的模式相聯系,所以用戶和模式是類似的。

用戶的存取權利受用戶安全域的設置所控制,在建立一個資料庫的新用戶或更改一已有用戶時,安全管理員對用戶安全域有下列決策:
l 是由資料庫系統還是由操作系統維護用戶授權信息。
l 設置用戶的預設表空間和臨時表空間。
l 列出用戶可存的表空間和在表空間中可使用空間份額。
l 設置用戶資源限制的環境文件,該限制規定了用戶可用的系統資源的總量。
l 規定用戶具有的特權和角色,可存取相應的對象。

每一個用戶有一個安全域,它是一組特性,可決定下列內容:
l 用戶可用的特權和角色;
l 用戶可用的表空間的份額;
l 用戶的系統資源限制。

1) 用戶鑒別:
為了防止非授權的資料庫用戶的使用,ORACLE提供二種確認方法
操作系統確認和相應的ORACLE資料庫確認。
如果操作系統允許,ORACLE可使用操作系統所維護的信息來鑒定用戶。由操作系統鑒定用戶的優點是:
l 用戶可更方便地連接到ORACLE,不需要指定用戶名和口令。
l 對用戶授權的控制集中在操作系統,ORACLE不需要存儲和管理用戶口令。然而用戶名在資料庫中仍然要維護。
l 在資料庫中的用戶名項和操作系統審計跟蹤相對應。

ORACLE資料庫方式的用戶確認:ORACLE利用存儲在資料庫中的信息可鑒定試圖接到資料庫的一用戶,這種鑒別方法僅當操作系統不能用於資料庫用戶鑒別時才使用。當用戶使用一ORACLE資料庫時執行用戶鑒別。每個用戶在建立時有一個口令,用戶口令在建立對資料庫連接時使用,以防止對資料庫非授權的使用。用戶的口令以密碼的格式存儲在資料庫數據字典中,用戶可隨時修改其口令。

2) 用戶的表空間設置和定額
關於表空間的使用有幾種設置選擇:
l 用戶的預設表空間;
l 用戶的臨時表空間;
l 資料庫表空間的空間使用定額。

3) 用戶資源限制和環境文件
用戶可用的各種系統資源總量的限制是用戶安全域的部分。利用顯式地設置資源限制;安全管理員可防止用戶無控制地消耗寶貴的系統資源。資源限制是由環境文件管理。一個環境文件是命名的一組賦給用戶的資源限制。另外ORACLE為安全管理員在資料庫級提供使能或使不能實施環境文件資源限制的選擇。
ORACLE可限制幾種類型的系統資源的使用,每種資源可在會話級、調用級或兩者上控制。在會話級:每一次用戶連接到一資料庫,建立一會話。每一個會話在執行SQL語句的計算機上耗費CPU時坦老間和內存量進行限制。對ORACLE的幾種資源限制可在會話級上設置。如果會話級資源限制被超過,當前語句被中止(回滾),並返回指明會話限制已達到的信息。此時,當前事務中所有之前執行的語句不受影響,此時僅可作COMMIT、ROLLBACK或刪除對資料庫的連接等操作,進行其它操作都將出錯。
在調用級:在SQL語句執行時,處理該語句有好幾步,為了防止過多地調用系統,ORACLE在調用級可設置幾種資源限制。如果調用級的資源限制被超過,語句處理被停止,該語句被回滾,並返回一錯誤。然而當前事務的已執行所用語句不受讓嘩升影響,用戶會話繼續連接。

二、 數據完整性

它是指數據的正確性和相容性。數據的完整性是為了防止資料庫存在不符合主義的數據,防止錯誤信息輸入和輸出,即數據要遵守由DBA或應用開發者所決定的一組預定義的規則。ORACLE應用於關系資料庫的表的數據完整性有蘆歲下列類型:
l 在插入或修改表的行時允許不允許包含有空值的列,稱為空與非空規則。
l 唯一列值規則,允許插入或修改的錶行在該列上的值唯一。
l 引用完整性規則,同關系模型定義
l 用戶對定義的規則,為復雜性完整性檢查。
ORACLE允許定義和實施上述每一種類型的數據完整性規則,這些規則可用完整性約束和資料庫觸發器定義。
完整性約束,是對表的列定義一規則的說明性方法。
資料庫觸發器,是使用非說明方法實施完整性規則,利用資料庫觸發器(存儲的資料庫過程)可定義和實施任何類型的完整性規則。

1. 完整性約束
ORACLE利用完整性約束機制防止無效的數據進入資料庫的基表,如果任何DML執行結果破壞完整性約束,該語句被回滾並返回一上個錯誤。ORACLE實現的完整性約束完全遵守ANSI
X3。135-1989和ISO9075-1989標准。
利用完整性約束實施數據完整性規則有下列優點:
l 定義或更改表時,不需要程序設計,便很容易地編寫程序並可消除程序性錯誤,其功能是由ORACLE控制。所以說明性完整性約束優於應用代碼和資料庫觸發器。
l 對表所定義的完整性約束是存儲在數據字典中,所以由任何應用進入的數據都必須遵守與表相關聯的完整性約束。
l 具有最大的開發能力。當由完整性約束所實施的事務規則改變時,管理員只需改變完整性約束的定義,所有應用自動地遵守所修改的約束。
l 由於完整性約束存儲在數據字典中,資料庫應用可利用這些信息,在SQL語句執行之前或由ORACLE檢查之前,就可立即反饋信息。
l 由於完整性約束說明的語義是清楚地定義,對於每一指定說明規則可實現性能優化。
l
由於完整性約束可臨時地使不能,以致在裝入大量數據時可避免約束檢索的開銷。當資料庫裝入完成時,完整性約束可容易地使其能,任何破壞完整性約束的任何新行在例外表中列出。
ORACLE的DBA和應用開始者對列的值輸入可使用的完整性約束有下列類型:
l NOT NULL約束:如果在表的一列的值不允許為空,則需在該列指定NOT NULL約束。
l
UNIQUE碼約束:在表指定的列或組列上不允許兩行是具有重復值時,則需要該列或組列上指定UNIQUE碼完整性約束。在UNIQUE碼約束定義中的列或組列稱為唯一碼。所有唯一完整性約束是用索引方法實施。
l PRIMARY KEY約束:在資料庫中每一個表可有一個PRIMARY KEY約束。包含在PRIMARY
KEY完整性約束的列或組列稱為主碼,每個表可有一個主碼。ORACLE使用索引實施PRIMARY KEY約束。
l FOREIGN
KEY約束(可稱引用約束):在關系資料庫中表可通過公共列相關聯,該規則控制必須維護的列之間的關系。包含在引用完整性約束定義的列或組列稱為外來碼。由外來碼所引用的表中的唯一碼或方碼,稱為引用碼。包含有外來碼的表稱為子表或從屬表。由子表的外來碼所引用的表稱為雙親表或引用表。如果對表的每一行,其外來碼的值必須與主碼中一值相匹配,則需指定引用完整性約束。
l
CHECK約束:表的每行對一指定的條件必須是TRUE或未知,則需在一列或列組上指定CHECK完整性約束。如果在發出一個DML語句時,CHECK約束的條件計算得FALSE時,該語句被回滾。

3. 並發控制
資料庫是一個共享資源,可為多個應用程序所共享。這些程序可串列運行,但在許多情況下,由於應用程序涉及的數據量可能很大,常常會涉及輸入/輸出的交換。為了有效地利用資料庫資源,可能多個程序或一個程序的多個進程並行地運行,這就是資料庫的並行操作。在多用戶資料庫環境中,多個用戶程序可並行地存取資料庫,如果不對並發操作進行控制,會存取不正確的數據,或破壞資料庫數據的一致性。
例:在飛機票售票中,有兩個訂票員(T1,T2)對某航線(A)的機動性票作事務處理,操作過程如圖所示:
資料庫中的A111100
T1 READ A A:=A-1 WRITE A
T2 READ A A:=A-1 WRITE A
T1工作區中的A110000
T2工作區中的A 11000

首先T1讀A,接著T2也讀A。然後T1將其工作區中的A減1,T2也採取同樣動作,它們都得0值,最後分別將0值寫回資料庫。在這過程中沒有任何非法操作,但實際上多出一張機票。這種情況稱為資料庫的不一致性,這種不一致性是由於並行操作而產生的。所謂不一致,實際上是由於處理程序工作區中的數據與資料庫中的數據不一致所造成的。如果處理程序不對資料庫中的數據進行修改,則決不會造成任何不一致。另一方面,如果沒有並行操作發生,則這種臨時的不一致也不會造成什麼問題。數據不一致總是是由兩個因素造成:一是對數據的修改,二是並行操作的發生。因此為了保持資料庫的一致性,必須對並行操作進行控制。最常用的措施是對數據進行封鎖。

1) 資料庫不一致的類型
l 不一致性
在一事務期間,其它提交的或未提交事務的修改是顯然的,以致由查詢所返回的數據集不與任何點相一致。
l 不可重復讀
在一個事務范圍內,兩個相同查詢將返回不同數據,由於查詢注意到其它提交事務的修改而引起。
l 讀臟數據
如果事務T1將一值(A)修改,然後事務T2讀該值,在這之後T1由於某種原因撤銷對該值的修改,這樣造成T2讀取的值是臟的。
l 丟失更改
在一事務中一修改重寫另一事務的修改,如上述飛機票售票例子。
l 破壞性的DDL操作
在一用戶修改一表的數據時,另一用戶同時更改或刪除該表。

1) 封鎖
在多用戶資料庫中一般採用某些數據封鎖來解決並發操作中的數據一致性和完整性問題。封鎖是防止存取同一資源的用戶之間破壞性的干擾的機制,該干擾是指不正確地修改數據或不正確地更改數據結構。
在多用戶資料庫中使用兩種封鎖:排它(專用)封鎖和共享封鎖。排它封鎖禁止相關資源的共享,如果一事務以排它方式封鎖一資源,僅僅該事務可更改該資源,直至釋放排它封鎖。共享封鎖允許相關資源可以共享,幾個用戶可同時讀同一數據,幾個事務可在同一資源上獲取共享封鎖。共享封鎖比排它封鎖具有更高的數據並行性。
在多用戶系統中使用封鎖後會出現死鎖,引起一些事務不能繼續工作。當兩個或多個用戶彼此等待所封鎖數據時可發生死鎖。

2) ORACLE多種一致性模型。
ORACLE利用事務和封鎖機制提供數據並發存取和數據完整性。在一事務內由語句獲取的全部封鎖在事務期間被保持,防止其它並行事務的破壞性干擾。一個事務的SQL語句所作的修改在它提交之後所啟動的事務中才是可見的。在一事務中由語句所獲取的全部封鎖在該事務提交或回滾時被釋放。
ORACLE在兩個不同級上提供讀一致性:語句級讀一致性和事務級一致性。ORCLE總是實施語句級讀一致性,保證單個查詢所返回的數據與該查詢開始時刻相一致。所以一個查詢從不會看到在查詢執行過程中提交的其它事務所作的任何修改。為了實現語句級讀一致性,在查詢進入執行階段時,在注視SCN的時候為止所提交的數據是有效的,而在語句執行開始之後其它事務提交的任何修改,查詢將是看不到的。
ORACLE允許選擇實施事務級讀一致性,它保證在同一事務內所有查詢的數據

4) 封鎖機制
ORACLE自動地使用不同封鎖類型來控制數據的並行存取,防止用戶之間的破壞性干擾。ORACLE為一事務自動地封鎖一資源以防止其它事務對同一資源的排它封鎖。在某種事件出現或事務不再需要該資源時自動地釋放。
ORACLE將封鎖分為下列類:
l
數據封鎖:數據封鎖保護表數據,在多個用戶並行存取數據時保證數據的完整性。數據封鎖防止相沖突的DML和DDL操作的破壞性干擾。DML操作可在兩個級獲取數據封鎖:指定行封鎖和整個表封鎖,在防止沖突的DDL操作時也需表封鎖。當行要被修改時,事務在該行獲取排它數據封鎖。表封鎖可以有下列方式:行共享、行排它、共享封鎖、共享行排它和排它封鎖。
l DDL封鎖(字典封鎖)
DDL封鎖保護模式對象(如表)的定義,DDL操作將影響對象,一個DDL語句隱式地提交一個事務。當任何DDL事務需要時由ORACLE自動獲取字典封鎖,用戶不能顯式地請求DDL封鎖。在DDL操作期間,被修改或引用的模式對象被封鎖。
l 內部封鎖:保護內部資料庫和內存結構,這些結構對用戶是不可見的。

⑻ 保證數據完整性有哪些技術

保證數據完整性有的技術、實體完整性將行定義為特辯和蘆定表的唯一實體。實體完整性強製表的標識符列或主鍵的完整性(通過索引、UNIQUE 約束、PRIMARY KEY 約束或 IDENTITY 屬性)。域完整性
域完整性是指給定列的輸入有效性。強制攜帶域有效性的方法有:限制類型(通過數據類型)、格式(通過 CHECK 約束和規則)或可能值的范圍(通過 FOREIGN KEY 約束、CHECK 約束、DEFAULT 定義、NOT NULL 定義和規則)。引用完整性
在輸入或刪除記錄時,引用完整性保持表之間已定義的關系。棚頃

⑼ 從哪些方面保證資料庫完整性

1、最重要,備份,定時備份以及增量備份;
2、定時檢查備份的殲橡有效性
3、做資料庫高可用集群,保證資料庫容災;
4、磁碟做raid
5、系統做HA
6、規范資料庫操作,以及業務返李的合理使用氏世旁資料庫;

熱點內容
wemall微商城源碼 發布:2025-05-14 22:15:20 瀏覽:804
隆地優選交易密碼是什麼 發布:2025-05-14 21:53:23 瀏覽:96
強酸強鹼存儲櫃 發布:2025-05-14 21:45:16 瀏覽:565
車輛參數配置包括什麼 發布:2025-05-14 21:31:03 瀏覽:164
怎麼引入安卓項目 發布:2025-05-14 21:26:39 瀏覽:825
游戲輔編程 發布:2025-05-14 21:18:49 瀏覽:688
三菱plc一段二段密碼什麼意思 發布:2025-05-14 21:17:16 瀏覽:529
電腦開機密碼忘記了怎麼破解 發布:2025-05-14 21:09:40 瀏覽:57
pythondict格式 發布:2025-05-14 21:09:38 瀏覽:887
落葉片拍攝腳本 發布:2025-05-14 20:40:49 瀏覽:800