1樓:匿名使用者
主鍵:關聯式資料庫依賴於主鍵---它是資料庫物理模式的基石。主鍵在物理層面上只有兩個用途:
1. 惟一地標識一行。
2. 作為乙個可以被外來鍵有效引用的物件。
基於以上這兩個用途,下面給出了我在設計物理層面的主鍵時所遵循的一些原則:
1. 主鍵應當是對使用者沒有意義的。如果使用者看到了乙個表示多對多關係的連線表中的資料,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。
2. 主鍵應該是單列的,以便提高連線和篩選操作的效率。
注:使用復合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應當具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞資料庫提供了方便。
其二是利用這種方法可以在描述多對多關係的連線表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復合主鍵常常導致不良的外來鍵,即當連線表成為另乙個從表的主表,而依據上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表主鍵的一部分,如此傳遞下去,越靠後的從表,其主鍵將會包含越多的列了。
3. 永遠也不要更新主鍵。實際上,因為主鍵除了惟一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對使用者無意義的原則被違反了。
注:這項原則對於那些經常需要在資料轉換或多資料庫合併時進行資料整理的資料並不適用。
4. 主鍵不應包含動態變化的資料,如時間戳、建立時間列、修改時間列等。
5. 主鍵應當有計算機自動生成。如果由人來對主鍵的建立進行干預,就會使它帶有除了惟一標識一行以外的意義。
一旦越過這個界限,就可能產生認為修改主鍵的動機,這樣,這種系統用來鏈結記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
外來鍵是資料庫一級的乙個完整性約束,就是資料庫基礎理論書中所說的「參照完整性」的資料庫實現方式。
外來鍵屬性當然是可以去掉的,如果你不想再用這種約束,對程式設計當然不會有什麼影響,但相應的錄入資料的時候就不對錄入的資料進行「參照完整性」檢查了。
例如有兩個表
a(a,b) :a為主鍵,b為外來鍵(來自於b.b)
b(b,c,d) :b為主鍵
如果我把字段b的外來鍵屬性去掉,對程式設計沒什麼影響。
如上面,a中的b要麼為空,要麼是在b的b中存在的值,有外來鍵的時候,資料庫會自動幫你檢查a的b是否在b的b中存在。
2樓:匿名使用者
就是能夠唯一標識該列的那一條實體。如:在乙個班級裡,假如有兩個同名字的學生,這就不能用名字做為主鍵;在乙個班級裡也不能用性別做為主鍵,因為也有雷同。
但可以用學號做為主鍵,因為在乙個學校裡,該學生的學號是唯一的。主鍵主要起標識作用。乙個實體跟另乙個實體關聯,主要也通過主鍵關聯。
資料庫主鍵具體指哪項,有什麼作用?
3樓:東郭芙單胭
主鍵:關聯式資料庫依賴於主鍵---它是資料庫物理模式的基石。主鍵在物理層面上只有兩個用途:
1.惟一地標識一行。
2.作為乙個可以被外來鍵有效引用的物件。
基於以上這兩個用途,下面給出了我在設計物理層面的主鍵時所遵循的一些原則:
1.主鍵應當是對使用者沒有意義的。如果使用者看到了乙個表示多對多關係的連線表中的資料,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。
2.主鍵應該是單列的,以便提高連線和篩選操作的效率。
注:使用復合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應當具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞資料庫提供了方便。
其二是利用這種方法可以在描述多對多關係的連線表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復合主鍵常常導致不良的外來鍵,即當連線表成為另乙個從表的主表,而依據上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表主鍵的一部分,如此傳遞下去,越靠後的從表,其主鍵將會包含越多的列了。
3.永遠也不要更新主鍵。實際上,因為主鍵除了惟一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對使用者無意義的原則被違反了。
注:這項原則對於那些經常需要在資料轉換或多資料庫合併時進行資料整理的資料並不適用。
4.主鍵不應包含動態變化的資料,如時間戳、建立時間列、修改時間列等。
5.主鍵應當有計算機自動生成。如果由人來對主鍵的建立進行干預,就會使它帶有除了惟一標識一行以外的意義。
一旦越過這個界限,就可能產生認為修改主鍵的動機,這樣,這種系統用來鏈結記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
外來鍵是資料庫一級的乙個完整性約束,就是資料庫基礎理論書中所說的「參照完整性」的資料庫實現方式。
外來鍵屬性當然是可以去掉的,如果你不想再用這種約束,對程式設計當然不會有什麼影響,但相應的錄入資料的時候就不對錄入的資料進行「參照完整性」檢查了。
例如有兩個表
a(a,b)
:a為主鍵,b為外來鍵(來自於b.b)
b(b,c,d)
:b為主鍵
如果我把字段b的外來鍵屬性去掉,對程式設計沒什麼影響。
如上面,a中的b要麼為空,要麼是在b的b中存在的值,有外來鍵的時候,資料庫會自動幫你檢查a的b是否在b的b中存在。
4樓:紹曼華實媼
就是能夠唯一標識該列的那一條實體。
如:在乙個班級裡,假如有兩個同名字的學生,這就不能用名字做為主鍵;在乙個班級裡也不能用性別做為主鍵,因為也有雷同。
但可以用學號做為主鍵,因為在乙個學校裡,該學生的學號是唯一的。
主鍵主要起標識作用。
乙個實體跟另乙個實體關聯,主要也通過主鍵關聯。
5樓:封半年
主鍵沒有具體的那一項或字段 主鍵:表中經常有乙個列或列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。
當建立或更改表時可通過定義 primary key 約束來建立主鍵。乙個表只能有乙個 primary key 約束,而且 primary key 約束中的列不能接受空值。由於 primary key 約束確保唯一資料,所以經常用來定義標識列。
作用 :1)保證實體的完整性; 2)加快資料庫的操作速度 3) 在表中新增新記錄時,access會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重複。 4) access自動按主鍵值的順序顯示表中的記錄。
如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
資料庫表中的主鍵有什麼作用?
6樓:情場小男人
資料庫主鍵
主鍵:表中經常有乙個列或多列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。
當建立或更改表時可通過定義 primary key 約束來建立主鍵。乙個表只能有乙個 primary key 約束,而且 primary key 約束中的列不能接受空值。由於 primary key 約束確保唯一資料,所以經常用來定義標識列。
作用:1)保證實體的完整性;
2)加快資料庫的操作速度
3) 在表中新增新記錄時,access會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重複。
4) access自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
在有些資料庫中,雖然主鍵不是必需的,但最好為每個表都設定乙個主鍵,不管是單主鍵還是復合主鍵。它存在代表著表結構的完整性,表的記錄必須得有唯一區分的字段,主鍵主要是用於其他表的外來鍵關聯,以及本記錄的修改與刪除。
主鍵的無意義性
在開發過程中,讀者可能會看到將一些表使用有意義的字段表示主鍵,例如「使用者登入資訊表」將「登入名」(英文名)作為主鍵,「訂單表」中將「訂單編號」作為主鍵,如此設計主鍵一般都是沒什麼問題,因為將這些主鍵基本不具有「意義更改」的可能性。但是,也有一些例外的情況,例如「訂單表」需要支援需求「訂單可以作廢,並重新生成訂單,而且訂單號要保持原訂單號一致」,那將「訂單編號」作為主鍵就滿足不了要求了。因此讀者在使用具有實際意義的字段作為主鍵時,需要考慮是否存在這種可能性。
主鍵的選擇
①編號作主鍵
此方法就是採用實際業務中的唯一欄位的「編號」作為主鍵設計,這在小型的專案中是推薦這樣做的,因為這可以使專案比較簡單化,但在使用中卻可能帶來一些麻煩,比如要進行「編號修改」時,可能要涉及到很多相關聯的其他表,就像黎叔說的「後果很嚴重」;還有就是上面提到的「業務要求允許編號重複時」,我們再那麼先知,都無法知道業務將會修改成什麼?
②自動編號主鍵
這種方法也是很多朋友在使用的,就是新建乙個id欄位,自動增長,非常方便也滿足主鍵的原則,優點是:資料庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對於檢索非常有利;數字型的,占用空間小,易排序,在程式中傳遞也方便;如果通過非系統增加記錄(比如手動錄入,或是用其他工具直接在表裡插入新記錄,或老系統資料匯入)時,非常方便,不用擔心主鍵重複問題。
缺點:其實缺點也就是來自其優點,就是因為自動增長,在手動要插入指定id的記錄時會顯得麻煩,尤其是當系統與其他系統整合時,需要資料匯入時,很難保證原系統的id不發生主鍵衝突(前提是老系統也是數字型的);如果其他系統主鍵不是數字型那就麻煩更大了,會導致修改主鍵資料型別了,這也會導致其他相關表的修改,後果同樣很嚴重;就算其他系統也是數字型的,在匯入時,為了區分新老資料,可能想在老資料主鍵前統一加乙個「o」(old)來表示這是老資料,那麼自動增長的數字型又面臨乙個挑戰。
7樓:在太乙洞講西班牙語的娥眉月
樓上的幾位都解釋了主鍵的作用,我主要說下設和不設有啥區別:
比如:張三的身份證號為123456
李四的身份證號為012345
設定身份證號為主鍵後,那麼資料庫就約束你身份證號不能重複,不能為空,那麼:
你向資料庫表插入王五的身份證號為123456,則提示你主鍵不能重複之類的錯誤;
也許你要問,那就是保證不重複嗎?主鍵可以保證不重複,並且不能為空,如果僅僅保證不重複的效果,可以只設定為索引就行了;
最後,主鍵可以是單字段主鍵,也可以2個或多個字段合併在一起形成聯合主鍵。
什麼是資料庫 它有什麼作用,什麼是資料庫?資料庫有什麼用?
他是記錄跟記載資料的軟體吧 資料庫指長期儲存在計算機的儲存裝置上,按照一定規則組織起來,可以被各種使用者或應用共享的資料集合。簡單的說就是存放大量資料的地方.例如你的通訊錄,它就需要存放大量的姓名和號碼,然後按照一定的規則存起來,以供使用 什麼是資料庫?資料庫有什麼用?什麼是資料 庫 金融資料分析與...
在ORACLE資料庫中,什麼是主鍵?什麼是外來鍵
主鍵就是自己設定的字段,該欄位不能為空,而且該字段的值必須唯一,外來鍵就是在主表中可以重複出現,但是它是另乙個表的主鍵,對過外來鍵使兩個表相關.主鍵 外來鍵的概念同資料庫原理 可以使用desc查詢表結構 定義和其他的資料庫是一樣的 要通過查詢oracle的資料字典才能知道。1 查主鍵名稱 selec...
什麼是資料庫,什麼是資料庫?資料庫有什麼用?
資料庫 database 是按照 資料結構來組織 儲存和管理資料的倉庫,它產生於距今六十多年前,隨著 資訊科技和市場的發展,特別是二十世紀九十年代以後,資料管理不再僅僅是儲存和管理資料,而轉變成使用者所需要的各種資料管理的方式。資料庫有很多種 型別,從最簡單的儲存有各種資料的 到能夠進行海量 資料儲...