關係型資料庫的約束型別

2021-10-24 14:42:24 字數 1327 閱讀 2307

參考文件

我們不應該只把資料庫系統看作是儲存資料的黑盒子,而要將其看成驗證和防止資料腐化的工具

如果業務規則要求該屬性應該始終存在,那麼要毫不猶豫地將其設定為 not null。

適合設定為 not null 的字段有 id、name、addeddate、isactive、state、categoryid(如果所有項都應該有乙個類別)、itemcount、price 以及許多其他字段。通常,這些屬性在業務邏輯中扮演重要角色。

但是要注意,不要對可以為空的屬性使用 not null 約束。

根據業務規則,一些屬性(或屬性的組合)應該是惟一的,比如 id、pinnumber、bookid 和 authorid、orderno 等。應該通過新增惟一約束來保證這些屬性的惟一。

注意:也可以使用唯一索引來實現同樣的效果,但是新增約束是更好的方法。因為當新增惟一約束時,會自動建立非惟一索引。因此,如果出於某種原因,你必須臨時禁用/啟用約束,將會非常容易。在使用唯一索引的情況下,你必須刪除/重新建立索引,從效能和時間方面來說,這是乙個昂貴的操作。

not null 和唯一約束一起構成主鍵。

當我們想到主鍵時,會很快想到 id 或 objectid 之類的列。但是主鍵也可以是復合的,比如 bookid 和 authorid。這裡有個難題是,是使用單獨的 id 列作為主鍵,還是將兩者的組合作為主鍵?

通常,使用單獨的 id 列是一種更好的方法,因為它可以使連線更加清晰,還能方便地將另一列新增到惟一組合中。但是,即使有了乙個單獨的主鍵(id),我們還是要為 bookid 和 authorid 列新增唯一約束。

外來鍵與主鍵一起確保表之間的資料一致性。

使用外來鍵約束時要注意區分 on delete 和 on update 規則,根據資料庫的不同,兩者均有 noaction、restrict、setnull、setdefault 和 cascade 選項。在大多數情況下,restrict 與 noaction 是相同的,但是對於某些資料庫,它們有細微的區別。

check 約束允許我們定義資料的有效值/範圍。適合 check 約束的屬性有百分比(0 到 100 之間)、狀態(0、1、2)、**、金額、總數(大於或等於 0)、pinnumber(固定長度)等。

預設約束允許我們向現有表中新增新的 not null 列,並使 「舊」 api 與新結構相容,直到所有各方都完成公升級(儘管在完全公升級後,預設約束應該刪除)。

索引是良好資料庫設計的重要組成部分,但它們幾乎不能保護我們的資料(惟一索引除外)。

需要注意的一點是:一些 rdbms 系統(例如 oracle)會在建立外來鍵時自動建立索引,而無需我們操心。其他資料庫(例如 ms sql server)不會這樣做,我們必須自己新增索引。

關係型資料庫 非關係型資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...

關係型資料庫 非關係型資料庫

2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...

關係型資料庫與非關係型資料庫

關係型資料庫與非關係型資料庫的區別 非關係型資料庫的優勢 1.效能 nosql是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過sql層的解析,所以效能非常高。2.可擴充套件性 同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴充套件。關係型資料庫的優勢 1.複雜查詢 可...