2010-09-02 94 views
0

大家好,我想知道的是,雖然我們創建任何表forigen關鍵,那麼爲什麼我們使用類似的限制..什麼是dbms中的約束?

CREATE TABLE Persons 
(
    PersonID int identity(1,1) NOT NULL, 
    FirstName nvarchar(20), 
    LastName nvarchar(20) NOT NULL, 
    CONSTRAINT PrimKeyPeople PRIMARY KEY(PersonID) 
); 

這裏所有的準備是PersonID是主鍵,那麼爲什麼它需要給另一名primkeypeople。 爲什麼我們在這裏使用約束名PrimKeyPeople在這裏什麼是PrimKeyPeople?

+0

[首先回答](http://resource.visual-paradigm.com/vpsuite2.3/constraint_name.html)。 – pascal 2010-09-02 11:40:49

回答

1

約束可以描述爲您必須遵循的規則。

在DBMS中已知的幾種約束是主鍵,外鍵和唯一。主鍵和唯一確保其中的所有值都是唯一的。因此,任何非唯一值將永遠不會被接受。

像外鍵一樣的其他約束可以確保它的值引用另一個表中的另一個值。因此,任何不涉及其他值的外鍵值將永遠不會被接受。

就你而言,PrimKeyPeople是表人員中的主鍵。這個主鍵(唯一約束)將斷言其中的每個值都是唯一的。命名約束是必須的(對於DBMS),但對用戶是可選的。這個'命名'是必需的,因爲有時我們需要禁用/啓用/刪除一些約束。爲了使用戶界面友好,某些DBMS爲每個約束提供默認名稱,以便用戶不必顯式聲明它。 Google爲「約束名」指定了「可靠修改或刪除約束條件」的

+0

很好的解釋... – 2010-09-02 12:25:06

2

在DBMS中定義的每個約束都有一個名稱。在您的示例中,PrimKeyPeople是將PersonID定義爲主鍵的約束的名稱。

約束名稱(連同表名,視圖名和數據庫中存在的其他實體的名稱)存儲在SQL/Schemata(或信息和定義模式)中。 SQL/Schemata使SQL數據庫和對象自我描述。例如,SQL/Schemata允許編寫刪除主鍵約束的SQL更新。你如何去除約束?通過引用它的名字,當然!

請注意,如果您沒有爲約束指定名稱,則DBMS將自動生成一個名稱。

+0

很好的解釋.. – 2010-09-02 12:25:31