答:
我是這樣作的,儘量使用約束
,如check,主鍵,外鍵,非空字段等來約束,這樣作效率最高,也最方便。其次是使用觸發器
,這種方法能夠保證,不管什麼業務系統訪問數據庫均可以保證數據的完整新和一致性。最後考慮的是自寫業務邏輯
,但這樣作麻煩,編程複雜,效率低下。html
數據庫完整性:
存儲在數據庫中的全部數據值均正確的狀態。若是數據庫中存儲有不正確的數據值,則該數據庫稱爲已喪失數據完整性
。數據庫
數據庫一致性(Database Consistency)
是指事務執行的結果必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。保證數據庫一致性是指當事務完成時,必須使全部數據都具備一致的狀態。在關係型數據庫中,全部的規則必須應用到事務的修改上,以便維護全部數據的完整性。編程
SQL CHECK 約束code
Check約束經過邏輯表達式來判斷數據的有效性
,用來限制輸入一列或多列的值的範圍。在列中更新數據時,所要輸入的內容必須知足Check約束的條件,不然將沒法正確輸入。htm
/*CHECK 約束規定 "Id_P" 列必須只包含大於 0 的整數*/ Id_P int NOT NULL CHECK (Id_P>0),
多個blog
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
新增事務
ADD CHECK (Id_P>0) ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
撤銷get
DROP CONSTRAINT chk_Person
Unique約束博客
惟一約束確保表中的一列數據沒有相同的值。與主鍵約束相似,惟一約束也強制惟一性
,但惟一約束用於非主鍵的一列或者多列的組合,且一個表能夠定義多個惟一約束。it
Id-P int NOT NULL UNIQUE
多個
City varchar(255),CONSTRAINT uc-PersonID UNIQUE (Id-P,LastName)
新增
ADD UNIQUE (Id-P)
多個
ADD CONSTRAINT uc-PersonID UNIQUE (Id-P,LastName)
撤銷
DROP CONSTRAINT uc-PersonID
Foreign Key約束
外鍵約束是用來增強兩個表(主表和從表)的一列或多列數據之間的鏈接的。建立外鍵約束的順序是先定義主表的主鍵,而後定義從表的外鍵。也就是說只有主表的主鍵才能被從表用來做爲外鍵使用(即,一個表中的 FOREIGN KEY 指向另外一個表中的 PRIMARY KEY)
,被約束的從表中的列能夠不是主鍵,主表限制了從表更新和插入的操做。
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
多個
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
新增
ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
撤銷
DROP CONSTRAINT fk_PerOrders
primary Key約束
在表中常有一列或多列的組合,其值能惟一標識表中的每一行。
這樣的一列或多列成爲表的主鍵(PrimaryKey)。一個表只能有一個主鍵
,並且主鍵約束中的列不能爲空值。只有主鍵列才能被做爲其餘表的外鍵所建立。
Id_P int NOT NULL PRIMARY KEY
多個
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
新增
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
刪除
DROP CONSTRAINT pk_PersonID
Default約束
若在表中定義了默認值約束,用戶在插入新的數據行時,若是該行沒有指定數據,那麼系統將默認值賦給該列,若是咱們不設置默認值,系統默認爲NULL
。
City varchar(255) DEFAULT 'Sandnes'
插入系統值
OrderDate date DEFAULT GETDATE()
新增
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'
刪除
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT