在之前的文章中,我介紹了關(guān)系型數(shù)據(jù)庫中的關(guān)系、基數(shù)、實(shí)體關(guān)系圖、鴉爪圖和業(yè)務(wù)規(guī)則等概念,這篇文章會(huì)繼續(xù)討論數(shù)據(jù)庫的另一個(gè)重要的概念“鍵”。理解這部分的內(nèi)容后,我們對(duì)數(shù)據(jù)索引的認(rèn)識(shí)會(huì)上升到一個(gè)新高度。
在解釋概念之前,讓我們先回顧一下此前的內(nèi)容。
圖 “SKU”、“供應(yīng)商”、“采購訂單”實(shí)體關(guān)系圖
首先我們看“SKU”和“供應(yīng)商”的關(guān)系,簡(jiǎn)單來說,這是“一對(duì)多”的關(guān)系,如果用更加嚴(yán)謹(jǐn)?shù)谋磉_(dá),那就是“0或1個(gè)”SKU,是由”0或多個(gè)“供應(yīng)商來供貨的。
這個(gè)關(guān)系的意思是SKU可能有多個(gè)供貨商,也可能暫時(shí)沒有貨源。反過來,供應(yīng)商最多只能提供某一個(gè)的SKU,或是不供應(yīng)。
其次是“供應(yīng)商”和“采購訂單”的關(guān)系,一個(gè)供應(yīng)商可以對(duì)應(yīng)著“0或多個(gè)”的采購訂單,而一個(gè)采購訂單只能對(duì)著“1個(gè),且僅有1個(gè)”的供應(yīng)商。這些關(guān)系的具體內(nèi)容都在前篇文章中已介紹過,不再重復(fù)。
什么是“鍵”呢?它是從英文“Keys”翻譯過來的,在數(shù)據(jù)庫中討論的鍵主要有2種,分別是主鍵(Primary Keys,縮寫PK)和外鍵(Foreign Keys,縮寫FK)。
主鍵就是主要的鍵,它是一個(gè)或多個(gè)屬性,可用于識(shí)別某個(gè)實(shí)體或表中唯一的記錄。定義很抽象,讓我們來舉個(gè)例子。
圖 “SKU”表格
在SKU實(shí)體中的屬性有件號(hào)、供應(yīng)商編號(hào)、供應(yīng)商名稱和配額。在表格中有4條記錄,哪個(gè)屬性可以識(shí)別出唯一的記錄呢?很顯然是件號(hào),其他的屬性都可能會(huì)有重復(fù)的記錄,然而件號(hào)是根據(jù)一定的規(guī)則編制的,且不會(huì)重復(fù)。
主鍵是身份標(biāo)識(shí)號(hào),就像是人的身份證一樣。全中國(guó)同名同姓的人可能有很多,不能作為主鍵,身份證號(hào)碼是唯一的,它就可以是主鍵。
在數(shù)據(jù)庫中,主鍵是自動(dòng)生成的號(hào)碼,按照順序,從小到大的整數(shù),例如“26303”。每次新增一條記錄,主鍵的號(hào)碼就自動(dòng)增加1位。使用整數(shù)的好處是占用存儲(chǔ)空間小,成本更低,而且查詢的速度也更快。
由于主鍵是唯一的,我們?cè)趪L試添加一條新的數(shù)據(jù)之前,數(shù)據(jù)庫會(huì)檢查是否有重復(fù)的條目。因此,主鍵是一個(gè)對(duì)特定表中的每一條記錄都是唯一的值。
在“供應(yīng)商”實(shí)體中,哪一個(gè)屬性是主鍵呢?可能有人會(huì)說是“供應(yīng)商編號(hào)”,它看起來符合成為主鍵的條件。但是供應(yīng)商表格里可能存在重復(fù)的供應(yīng)商編號(hào),所以僅憑一個(gè)屬性是不能成為主鍵,我們需要把多個(gè)屬性組合在一起后,它們才能變成唯一的值。
舉個(gè)例子,高鐵上有多個(gè)車廂,每個(gè)車廂里都有1A這個(gè)座位,我該如何對(duì)號(hào)入住呢?就需要結(jié)合車廂號(hào)和座位號(hào),才能找到該趟車上正確的位置,例如03車1A座,這是唯一的記錄。在供應(yīng)商表中,屬性“供應(yīng)商編號(hào)”和“序號(hào)”組合在一起,它們構(gòu)成了該實(shí)體中的主鍵,也叫做復(fù)合鍵(Composite Keys)。
圖 復(fù)合鍵
顧名思義,“外鍵”就是外來的鍵。在介紹概念之前,讀者可能已經(jīng)觀察到了,有些實(shí)體的主鍵會(huì)出現(xiàn)在其他的實(shí)體之中,例如“SKU”中的“件號(hào)”也存在于“供應(yīng)商”實(shí)體里。“件號(hào)”在前者的表格里是主鍵,那么它在其他表中的作用是什么呢?
SKU和供應(yīng)商實(shí)體是一對(duì)多的關(guān)系,每個(gè)SKU可以有多個(gè)的供應(yīng)商供貨,而供應(yīng)商只能供應(yīng)某一個(gè)特定的SKU。在這種情況下,SKU是獨(dú)立的或叫做父級(jí)實(shí)體,而供應(yīng)商是相關(guān)的或叫做子級(jí)實(shí)體。
“件號(hào)”在SKU表中是主鍵,它在相關(guān)的子級(jí)表中就是外鍵。外鍵是另一個(gè)表中的主鍵,用于連接從屬關(guān)系與父級(jí)實(shí)體。
圖 主鍵和外鍵的關(guān)系
在上圖的例子中,父實(shí)體是SKU,它的主鍵是件號(hào)。子實(shí)體是供應(yīng)商表,其外鍵是存儲(chǔ)在供應(yīng)商表中的件號(hào)。這樣做是有什么意義呢?每一個(gè)SKU,例如件號(hào)是26516,蘇州X公司和常熟Y公司都可以供貨。
因此,每個(gè)供應(yīng)商都有自己的供應(yīng)商編號(hào)和序號(hào),蘇州X公司的編號(hào)是1475,序號(hào)是6,常熟Y公司的編號(hào)是1369,序號(hào)是5,但他們兩家的件號(hào)的值都是26516,這是供應(yīng)商表中的外鍵。
件號(hào)是SKU表的主鍵,它是一個(gè)唯一的值,可以識(shí)別SKU表中的每一行。然后在供應(yīng)商表中,主鍵是供應(yīng)商編號(hào)和序號(hào),但每個(gè)供應(yīng)商也有一個(gè)件號(hào),它是一個(gè)有效的值,來自這個(gè)SKU表。
重要的一點(diǎn)是,供應(yīng)商編號(hào)和序號(hào)是供應(yīng)商的唯一標(biāo)識(shí)符。件號(hào)不需要作為供應(yīng)商主鍵的一部分,因?yàn)檫@個(gè)表已經(jīng)有一個(gè)完整的唯一識(shí)別主鍵。這只是一個(gè)額外的支持信息,幫助我們?cè)谶@兩個(gè)表之間建立數(shù)據(jù)關(guān)系。
總結(jié)一下,主鍵是幫助我們唯一地識(shí)別表中的每一條記錄的屬性。所以它們對(duì)每一條記錄都必須是唯一的,只要我們有了這個(gè)鍵,就能幫助我們找到一行中的所有附加信息。
外鍵是存儲(chǔ)在從屬實(shí)體中的屬性,它向我們展示了從屬實(shí)體中的記錄是如何與獨(dú)立實(shí)體相關(guān)的。所以,外鍵是另一個(gè)表的主鍵,而這個(gè)表是子表或從屬實(shí)體。
瑪氏中國(guó)|2025年度瑪氏箭牌北京區(qū)域包材及原材料倉儲(chǔ)(VMI)項(xiàng)目
2180 閱讀華為的物流“布局”,為何備受關(guān)注?
1383 閱讀北美倉配一體機(jī)會(huì)和風(fēng)險(xiǎn)
1201 閱讀?年?duì)I收15億的跨境物流企業(yè)要上市
937 閱讀縱騰集團(tuán)借殼上市,6.4億收購A股上市公司綠康生化
896 閱讀解秘粵港澳大灣區(qū)規(guī)模最大的生產(chǎn)服務(wù)型國(guó)家物流樞紐——廣州東部公鐵聯(lián)運(yùn)樞紐
875 閱讀TEMU美區(qū)半托管即將開放國(guó)內(nèi)發(fā)貨模式
778 閱讀京東物流一線員工日10周年:為5年、10年老員工授勛,為15000名標(biāo)桿頒獎(jiǎng)
724 閱讀2024年快遞滿意度出爐:順豐、京東快遞排名最高
683 閱讀TikTok撤換美國(guó)電商負(fù)責(zé)人,抖音前副總裁木青上位
628 閱讀