新聞中心
數(shù)據(jù)庫表主鍵,是數(shù)據(jù)庫中非常重要的一個(gè)概念。它可以用來唯一標(biāo)識(shí)表中的某一行數(shù)據(jù),比如我們常用的一些列或者ID等等。在實(shí)際應(yīng)用中,使用主鍵既可以保證了數(shù)據(jù)的準(zhǔn)確性,又能提高查詢的效率。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、亞東網(wǎng)站維護(hù)、網(wǎng)站推廣。
本文將會(huì)從以下三個(gè)方面對(duì)數(shù)據(jù)庫表主鍵進(jìn)行深入解析,分別是:主鍵的概述及其作用、設(shè)置主鍵的注意事項(xiàng)和主鍵約束的實(shí)現(xiàn)方法。
一、主鍵的概述及其作用
主鍵是一種數(shù)據(jù)庫設(shè)計(jì)概念,用于唯一標(biāo)識(shí)表的一行數(shù)據(jù)。每一行數(shù)據(jù)都必須通過一個(gè)唯一的主鍵來進(jìn)行區(qū)分。主鍵可以是任何一列或一組列,但必須滿足以下幾個(gè)要求:
1.主鍵必須是唯一的。
2.主鍵不能為空值,即不能有NULL值。
3.主鍵的值必須穩(wěn)定,不可更改。
主鍵的作用是什么呢?實(shí)現(xiàn)數(shù)據(jù)的準(zhǔn)確性是主鍵的基本作用之一。當(dāng)數(shù)據(jù)表中的數(shù)據(jù)存在重復(fù)的現(xiàn)象時(shí),常常會(huì)引起響應(yīng)的數(shù)據(jù)查詢結(jié)果錯(cuò)誤。如果使用主鍵來為每一行數(shù)據(jù)進(jìn)行唯一標(biāo)識(shí),則可以避免數(shù)據(jù)沖突的情況。主鍵還可以提高數(shù)據(jù)庫的效率。當(dāng)使用唯一主鍵來檢索數(shù)據(jù)時(shí),系統(tǒng)只需在主鍵索引上進(jìn)行搜索,而不用掃描整個(gè)數(shù)據(jù)表,可以大幅度提高查詢效率。
二、設(shè)置主鍵的注意事項(xiàng)
在設(shè)置主鍵時(shí),需要注意以下幾點(diǎn):
1.主鍵不應(yīng)該包含敏感信息。
2.主鍵應(yīng)該盡量短,因?yàn)橹麈I將被用于創(chuàng)建索引,過長的主鍵將導(dǎo)致索引占用過多的硬盤空間,導(dǎo)致數(shù)據(jù)查詢效率降低。
3.主鍵的值應(yīng)該固定,不能修改,這意味著主鍵的類型不能是經(jīng)常更改的變量類型。
4.主鍵應(yīng)是一個(gè)整數(shù)類型的數(shù)據(jù),這樣能更好的保持?jǐn)?shù)據(jù)表的一致性。
5.盡量不要使用復(fù)合主鍵,因?yàn)閺?fù)合主鍵可能會(huì)導(dǎo)致性能問題。如果必須使用復(fù)合主鍵,則應(yīng)盡量把復(fù)合主鍵限制在兩到三個(gè)列之間。
三、主鍵約束的實(shí)現(xiàn)方法
在SQL語言中,可以為數(shù)據(jù)庫表中的任何一個(gè)列或一組列定義主鍵約束,下面以MySQL為例子來介紹主鍵約束的實(shí)現(xiàn)方法。
1. 在創(chuàng)建表時(shí)為主鍵約束設(shè)置名稱:
CREATE TABLE users (
user_id int(11) NOT NULL AUTO_INCREMENT,
eml varchar(255) NOT NULL,
password varchar(255) NOT NULL,
PRIMARY KEY (user_id)
);
在創(chuàng)建users表時(shí),主鍵約束被命名為“user_id”,這意味著它是唯一的。
2. 為主鍵約束設(shè)置多個(gè)列:
CREATE TABLE users (
user_id int(11) NOT NULL,
country_code char(3),
eml varchar(255) NOT NULL,
password varchar(255) NOT NULL,
PRIMARY KEY (user_id,country_code)
);
在創(chuàng)建users表時(shí),使用多列作為主鍵,這里是user_id和country_code。這個(gè)約束可以唯一確定一行數(shù)據(jù)。
3. 添加主鍵約束到已有表中:
ALTER TABLE users
ADD PRIMARY KEY (user_id);
在創(chuàng)建好的users表中,可以使用Alter語句來添加主鍵約束。
4. 讓自增列成為主鍵:
CREATE TABLE users (
user_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
eml varchar(255) NOT NULL,
password varchar(255) NOT NULL
);
這里的“user_id”是一個(gè)自增列,它被設(shè)置為主鍵。
:
主鍵是數(shù)據(jù)庫表設(shè)計(jì)中的一個(gè)重要概念,它可以用來唯一標(biāo)識(shí)表中的某一行數(shù)據(jù),從而保證了數(shù)據(jù)的準(zhǔn)確性,并提高了查詢效率。在設(shè)置主鍵時(shí),需要注意主鍵不應(yīng)該包含敏感信息,應(yīng)該盡量短并且穩(wěn)定,盡量不要使用復(fù)合主鍵。在實(shí)際應(yīng)用中,在MySQL中可以使用CREATE TABLE、ALTER TABLE和其他一些命令為表中的列或者一組列添加或移除主鍵約束。
相關(guān)問題拓展閱讀:
- 數(shù)據(jù)庫中關(guān)系模型中的主鍵是什么?
數(shù)據(jù)庫中關(guān)系模型中的主鍵是什么?
數(shù)據(jù)庫中,
關(guān)系模型
中的
主鍵
是對(duì)每條數(shù)據(jù)記錄的唯一標(biāo)識(shí),不可重復(fù)。主鍵可以是屬性集,比如一張表R(A,B,C,D),主鍵為A+B是可以的。
主鍵,即主關(guān)鍵字(
primary key
)是表中的一個(gè)或多個(gè)字段,它的值用于唯一地標(biāo)識(shí)表中的某一條記錄。在兩個(gè)表的關(guān)系中,主關(guān)鍵字用來在一個(gè)表中引用來自于另一個(gè)表中的特定記錄。主關(guān)鍵字是一種唯一關(guān)鍵字,表定義的一部分。
一個(gè)表的主鍵可以由多個(gè)關(guān)鍵字共同組成,并且主關(guān)鍵字的列不能包含空值。主關(guān)鍵字是可選的,并且可在 CREATE TABLE 或 ALTER TABLE 語句中定義。
擴(kuò)展資料:
建立主鍵應(yīng)該遵循的原則:
1、主鍵應(yīng)當(dāng)是對(duì)用戶沒有意義的。如果用戶看到了一個(gè)表示多對(duì)多關(guān)系的連接表中的數(shù)據(jù),并抱怨它沒有什么用處,那就證明它的主鍵設(shè)計(jì)地很好。
2、 永遠(yuǎn)也不要更新主鍵。因?yàn)橹麈I除了唯一地標(biāo)識(shí)一行之外,再?zèng)]有其他的用途了,所以也就沒有理由去對(duì)它更新。如果主鍵需要更新,則說明主鍵應(yīng)對(duì)用戶無意義的原則被違反了。
3、主鍵不應(yīng)包含動(dòng)態(tài)變化的數(shù)據(jù),如時(shí)間戳、創(chuàng)建時(shí)間列、修改時(shí)間列等。
4、主鍵應(yīng)當(dāng)由計(jì)算機(jī)自動(dòng)生成。如果由人來對(duì)主鍵的創(chuàng)建進(jìn)行干預(yù),就會(huì)使它帶有除了唯一標(biāo)識(shí)一行以外的意義。一旦越過這個(gè)界限,就可能產(chǎn)生人為修改主鍵的動(dòng)機(jī)。
參考資料來源:
百度百科-主關(guān)鍵字
關(guān)系模型中主鍵可以分成二部分來理解:1、關(guān)系模型,2、主鍵。
1、主鍵可以是單字段,也可以是聯(lián)合主鍵。也就是兩個(gè)以上的字段組合。
比如:學(xué)生成績表就可以用聯(lián)合主鍵
?。╯tudent_id,course_id,grade)主鍵是student_id跟course_id的聯(lián)合,就是學(xué)號(hào)跟課程號(hào)的組合,grade字段為分?jǐn)?shù)
2、關(guān)系實(shí)際上就是關(guān)系模式在某一時(shí)刻的狀態(tài)或內(nèi)容。也就是說,關(guān)系模式是型,關(guān)系是它的值。
關(guān)系模式是靜態(tài)的、穩(wěn)定的,而關(guān)系是動(dòng)態(tài)的、隨時(shí)間不斷變化的,因?yàn)殛P(guān)系操作在不斷地更新著數(shù)據(jù)庫中的數(shù)據(jù)。
主鍵可以是單字段,也可以是聯(lián)合主鍵。也就是兩個(gè)以上的字段組合。
比如學(xué)生成績表就可以用聯(lián)合主鍵
(student_id,course_id,grade)主鍵是student_id跟course_id的聯(lián)合,就是學(xué)號(hào)跟課程號(hào)的組合,grade字段為分?jǐn)?shù)
數(shù)據(jù)庫設(shè)計(jì)是指根據(jù)用戶的需求,在某一具體的數(shù)據(jù)庫管理系統(tǒng)上,設(shè)計(jì)數(shù)據(jù)庫的結(jié)構(gòu)和建立數(shù)據(jù)庫的過程。例如,編程微課是在線編程教育項(xiàng)目,該項(xiàng)目涉及到課程、學(xué)生、老師、學(xué)習(xí)資料等數(shù)據(jù),這些數(shù)據(jù)都要被存儲(chǔ)下來,并且能夠方便的增加、修改、刪除和查詢。這就需要規(guī)劃課程、學(xué)生、老師、學(xué)習(xí)資料等數(shù)據(jù)構(gòu)成以及相互之間的關(guān)系。因此,規(guī)劃數(shù)據(jù)構(gòu)成及數(shù)據(jù)間關(guān)系,并應(yīng)用某一具體的數(shù)據(jù)庫管理系統(tǒng)如MySQL構(gòu)建數(shù)據(jù)庫的過程就是數(shù)據(jù)庫設(shè)計(jì)。
由于項(xiàng)目需求的易變性和數(shù)據(jù)的復(fù)雜性,數(shù)據(jù)庫設(shè)計(jì)不可能一蹴而就,而只能是一種“反復(fù)探尋,逐步求精”的過程。數(shù)據(jù)庫設(shè)計(jì)步驟如下圖所示:
圖2-5 數(shù)據(jù)庫設(shè)計(jì)過程流程圖
需求分析階段主要分析項(xiàng)目涉及的業(yè)務(wù)活動(dòng)和數(shù)據(jù)的使用情況,弄清所用數(shù)據(jù)的種類、范圍、數(shù)量以及在業(yè)務(wù)活動(dòng)中的存儲(chǔ)情況,確定用戶對(duì)數(shù)據(jù)庫系統(tǒng)的使用要求和各種約束條件等,形成數(shù)據(jù)庫需求說明書。
概念結(jié)構(gòu)設(shè)計(jì)階段根據(jù)數(shù)據(jù)庫需求說明書,創(chuàng)建數(shù)據(jù)庫概念結(jié)構(gòu),描述概念結(jié)構(gòu)的有力工具是ER模型。
ER模型表示的概念結(jié)構(gòu)模型獨(dú)立于任何一種數(shù)據(jù)模型,并獨(dú)立于任何一個(gè)具體的數(shù)據(jù)庫管理系統(tǒng)。因此,需要把概念結(jié)構(gòu)設(shè)計(jì)階段設(shè)計(jì)的ER模型轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型二維表結(jié)構(gòu),此階段為邏輯結(jié)構(gòu)設(shè)計(jì)階段。
物理設(shè)計(jì)階段是在計(jì)算機(jī)的物理設(shè)備上確定應(yīng)采取的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)和存取方法,以及如何分配存儲(chǔ)空間等問題。關(guān)系數(shù)據(jù)庫物理設(shè)計(jì)的主要工作是由系統(tǒng)自動(dòng)完成的,數(shù)據(jù)庫設(shè)計(jì)者只要關(guān)心索引文件的創(chuàng)建即可。
驗(yàn)證設(shè)計(jì)是在上述設(shè)計(jì)的基礎(chǔ)上,收集數(shù)據(jù)并建立數(shù)據(jù)庫,運(yùn)行應(yīng)用任務(wù)來驗(yàn)證數(shù)據(jù)庫的正確性和合理性,當(dāng)發(fā)現(xiàn)設(shè)計(jì)問題時(shí),可能需要對(duì)數(shù)據(jù)庫設(shè)計(jì)進(jìn)行修改。
實(shí)體聯(lián)系模型(ER圖)
當(dāng)前常用的概念數(shù)據(jù)模型是ER模型。ER模型描述數(shù)據(jù)庫的概念模式,不考慮數(shù)據(jù)庫的邏輯與物理結(jié)構(gòu),它充分反映現(xiàn)實(shí)世界,易于理解,將現(xiàn)實(shí)世界的事物以信息結(jié)構(gòu)的形式很方便地表示出來。
例如,課程是編程微課的主要內(nèi)容,課程涉及到老師、學(xué)生等對(duì)象等實(shí)體,進(jìn)一步分析還涉及到課程視頻、課程資料、課程價(jià)格等各種數(shù)據(jù)。在用ER模型對(duì)課程分析和描述中,對(duì)這些實(shí)體以及實(shí)體之間的聯(lián)系給出了確切的定義。
ER模型有四個(gè)概念,分別是實(shí)體、屬性、聯(lián)系、實(shí)體集。
實(shí)體
實(shí)體是客觀存在并且可以互相區(qū)分的事物,可以是人或物,也可以是抽象的概念。在現(xiàn)實(shí)世界,實(shí)體并不是孤立存在的,實(shí)體與實(shí)體之間也存在聯(lián)系。例如,課程與學(xué)生之間存在學(xué)生學(xué)習(xí)課程的聯(lián)系,課程與老師之間存在老師創(chuàng)建課程的聯(lián)系。
屬性
每個(gè)實(shí)體具有的特征稱為屬性,一個(gè)實(shí)體可以由若干屬性來描述,屬性都有其取值范圍,稱為值集或值域。例如,課程實(shí)體可以由課程編號(hào)、課程名稱、授課老師、類別、簡課程介、價(jià)格等屬性組成。唯一地標(biāo)識(shí)實(shí)體的屬性或?qū)傩越M稱為實(shí)體的關(guān)鍵字。例如,屬性值“,Java編程基礎(chǔ),郎老師,編程語言,課程以淺顯易懂的語言,以常見的生活場景為案例,帶領(lǐng)大家逐步進(jìn)入計(jì)算機(jī)編程世界,86”。其中是課程編號(hào)的屬性值,該編號(hào)在在所有的課程實(shí)體中是唯一的,該屬性就是課程實(shí)體的關(guān)鍵字。
聯(lián)系
實(shí)體不是孤立存在的,實(shí)體之間是有聯(lián)系的。實(shí)體之間的聯(lián)系可以分為三類:一對(duì)一(1:1)、一對(duì)多(1:n)和多對(duì)多(m:n)。例如,一個(gè)老師可以創(chuàng)建多個(gè)課程,老師與課程的聯(lián)系就是一對(duì)多的;如果一個(gè)老師只能創(chuàng)建一個(gè)課程,則老師和課程的聯(lián)系就是一對(duì)一的。在進(jìn)行問題分析時(shí),要根據(jù)客觀實(shí)際,抓住問題實(shí)質(zhì)進(jìn)行現(xiàn)實(shí)世界的抽象。
實(shí)體集
具有相同屬性的實(shí)體的稱為實(shí)體集。在同一實(shí)體集中,每個(gè)實(shí)體的屬性及其值域是相同的,但可能取不同的值。例如,所有的課程實(shí)體組成課程實(shí)體集,所有的老師實(shí)體組成老師實(shí)體集。
繪制ER圖
ER圖是ER模型的圖形化描述。俗話說:一張圖勝過千言萬語,用ER圖可以清晰地描述出ER模型的結(jié)構(gòu)。
規(guī)范的ER圖可以幫助人們對(duì)ER模型的統(tǒng)一認(rèn)識(shí),便于溝通和討論,有助于工作效率的提高。它使用一組預(yù)定義的符號(hào)來表示ER模型的實(shí)體、屬性、聯(lián)系等概念,這些預(yù)先定義的符號(hào)已經(jīng)標(biāo)準(zhǔn)化,從而讓全世界的開發(fā)人員都可以采用這些符號(hào)而不會(huì)引起混淆。ER圖的基本圖素有如下的約定:
圖 2-6 ER圖的基本圖素
(1)用長方形表示實(shí)體,在框內(nèi)寫上實(shí)體名。
(2)用橢圓表示實(shí)體的屬性,并用連接線把實(shí)體與屬性連接起來,屬性如果是實(shí)體的關(guān)鍵字,可以用雙線橢圓表示。
(3)用菱形表示實(shí)體間的聯(lián)系,菱形內(nèi)寫上聯(lián)系名,用連接線把菱形分別與有關(guān)的實(shí)體相連接,在連接線旁標(biāo)上連接的類型,如果聯(lián)系也有屬性,則聯(lián)系的屬性和菱形連接。
圖 2-7 用ER圖表示的課程管理
圖2-7所示為用ER圖表示一個(gè)課程管理,這是一個(gè)簡化的課程管理模型,課程由老師創(chuàng)建并屬于老師,兩者之間是一對(duì)多的聯(lián)系。課程與學(xué)生直接存在學(xué)習(xí)的聯(lián)系,課程與學(xué)生是多對(duì)多的聯(lián)系,因此聯(lián)系也有屬性,分別是學(xué)生編號(hào)和課程編號(hào)。雙線橢圓表示的屬性編號(hào)是實(shí)體的關(guān)鍵字。
通過圖2-7可以看出,ER模型是依賴業(yè)務(wù)運(yùn)營方式的,它是企業(yè)運(yùn)營方式的信息化描述。企業(yè)業(yè)務(wù)的改變直接影響著ER圖的結(jié)構(gòu)和實(shí)體間的聯(lián)系。即使是相同的業(yè)務(wù),數(shù)據(jù)庫設(shè)計(jì)人員側(cè)重分析的數(shù)據(jù)不同,給出的ER圖也可能是不同的。
對(duì)于設(shè)計(jì)比較復(fù)雜的系統(tǒng)來說,有時(shí)為了使ER圖簡潔明了,在ER圖中可以省略屬性,只畫出實(shí)體和聯(lián)系,將屬性以表格的形式另外列出。如圖2-8所示,給出的是不包含屬性的ER圖,
圖 2-8 不包含屬性的課程管理ER圖
ER圖直觀易懂,是系統(tǒng)開發(fā)人員和客戶之間很好的溝通工具。對(duì)于客戶來說,它概況了企業(yè)運(yùn)營的方式和各種聯(lián)系;對(duì)于系統(tǒng)開發(fā)人員來說,它從概念上描述了一個(gè)應(yīng)用系統(tǒng)數(shù)據(jù)庫的信息組織。因此,如能準(zhǔn)確畫出企業(yè)運(yùn)營方式的ER圖,就意味著搞清楚了企業(yè)的業(yè)務(wù)運(yùn)營方式,以后可以根據(jù)ER圖,結(jié)合具體的數(shù)據(jù)庫管理系統(tǒng),把ER圖轉(zhuǎn)換為數(shù)據(jù)庫管理系統(tǒng)所能支持的數(shù)據(jù)模型。這種逐步推進(jìn)的數(shù)據(jù)庫設(shè)計(jì)方法已經(jīng)普遍應(yīng)用于數(shù)據(jù)庫設(shè)計(jì)中,畫出應(yīng)用系統(tǒng)的ER圖成為數(shù)據(jù)庫設(shè)計(jì)的一個(gè)重要步驟。
關(guān)系模型
ER圖給出了實(shí)體聯(lián)系模型的圖形化描述,增強(qiáng)了開發(fā)人員與客戶的溝通能力。在需求開發(fā)階段ER模型是非常重要的,也是從企業(yè)的業(yè)務(wù)運(yùn)營方式到概念模型的映射。
到了設(shè)計(jì)階段。就需要在概念模型的基礎(chǔ)上建立關(guān)系模型,關(guān)系模型是用二維表來表示實(shí)體集屬性間的關(guān)系以及實(shí)體間聯(lián)系的形式化模型。它將用戶數(shù)據(jù)的邏輯結(jié)構(gòu)ER模型歸納為滿足一定條件的二維表的形式。
ER模型中的一個(gè)實(shí)體或聯(lián)系對(duì)應(yīng)一張二維表,ER模型中的實(shí)體屬性轉(zhuǎn)換為二維表的列,也可稱為屬性,每個(gè)屬性的名稱稱為屬性名,也可稱為列名。每個(gè)屬性取值范圍稱為該屬性的域。二維表每個(gè)屬性或列取值后的一行數(shù)據(jù)稱為二維表的一個(gè)元組,也可以稱為一條記錄。二維表可以包含有限個(gè)不重復(fù)的記錄。
圖2-9給出了實(shí)體“課程”、“老師”轉(zhuǎn)化為關(guān)系模型的二維表。每個(gè)課程是課程表中的一條記錄或一個(gè)元組,即一行;同樣,每個(gè)老師的屬性也反映在老師表中的一行;課程表和老師表的聯(lián)系反映在課程表屬性“老師編號(hào)”字段上,該字段和老師表的編號(hào)字段為同一個(gè)字段,因此通過“老師編號(hào)”字段可以確定是哪位老師建立的課程。
只有一個(gè),唯一標(biāo)識(shí)
只能是a,不能a+b
關(guān)于數(shù)據(jù)庫表的主鍵的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
當(dāng)前標(biāo)題:數(shù)據(jù)庫表主鍵解析:實(shí)現(xiàn)數(shù)據(jù)準(zhǔn)確性和高效性(數(shù)據(jù)庫表的主鍵)
地址分享:http://m.fisionsoft.com.cn/article/djdoisc.html


咨詢
建站咨詢
