本篇內(nèi)容將重點(diǎn)討論數(shù)據(jù)庫中各表之間的關(guān)系。
數(shù)據(jù)庫是由實(shí)體(也叫做表)組成的,例如“SKU”、“供應(yīng)商”和“采購訂單”是實(shí)體。
每個(gè)表里有一些屬性,例如“件號(hào)”、“供應(yīng)商編號(hào)”等是屬性。假設(shè)我們有3個(gè)實(shí)體,其中各有一些屬性,如下圖。
圖 實(shí)體和屬性
我簡(jiǎn)略地解釋一下其中的主要內(nèi)容。在“SKU”表里存儲(chǔ)的是每個(gè)最小的庫存單位(Stock Keeping Unit,縮寫SKU)的關(guān)鍵信息,SKU有一個(gè)唯一的號(hào)碼,也就是件號(hào),這就像是人的身份證一樣,是一一對(duì)應(yīng)的,一般來說,1個(gè)SKU不會(huì)有2個(gè)件號(hào)。假設(shè)SKU是從外部采購的,因此需要供應(yīng)商的信息。
某個(gè)SKU可能存在多個(gè)供應(yīng)商同時(shí)供貨的情況,“SKU”表中的“配額”屬性定義了每個(gè)供應(yīng)商的采購比例。如果SKU是獨(dú)家供應(yīng)的,配額當(dāng)然是100%,如果有超過1個(gè)的供應(yīng)商可供貨,我們需要根據(jù)采購制定的策略進(jìn)行分配,累計(jì)數(shù)量必須是100%。
供應(yīng)商表中的屬性有供應(yīng)商編號(hào),一家供應(yīng)商可能提供多個(gè)SKU,所以需要一個(gè)序號(hào),另外還有件號(hào)和對(duì)應(yīng)的價(jià)格。
在采購訂單表中,重要的屬性包括了訂單號(hào)、行號(hào)、件號(hào)、供應(yīng)商編號(hào)和名稱、價(jià)格、數(shù)量和到貨日期等。
在這3個(gè)實(shí)體中,我們發(fā)現(xiàn)有一些重復(fù)出現(xiàn)的屬性,例如件號(hào)、供應(yīng)商編號(hào)和名稱,這說明實(shí)體之間應(yīng)該是有一些關(guān)系的,我們需要一種工具把這種關(guān)系描述出來,它就是實(shí)體關(guān)系圖(Entity Relationship Diagram, 縮寫ERD)。
實(shí)體關(guān)系圖是數(shù)據(jù)庫的一個(gè)示意圖,描述了所有不同的實(shí)體或表,以及它們之間的關(guān)系。在ERD中,實(shí)體被畫成了一個(gè)個(gè)盒子,它們之間用線條連接,表示實(shí)體之間是有關(guān)系的。
在數(shù)據(jù)庫的語言中,使用基數(shù)(Cardinality)這個(gè)詞描述了兩個(gè)實(shí)體和關(guān)系之間相關(guān)發(fā)生的預(yù)期數(shù)量,這個(gè)概念很抽象,我就不詳細(xì)介紹了。我們可以簡(jiǎn)單地把關(guān)系理解為三種情況,分別是:
一對(duì)一:
例如一個(gè)人只有一個(gè)身份證號(hào)碼,一個(gè)SKU只對(duì)應(yīng)一個(gè)件號(hào)。
一對(duì)多:
一個(gè)供應(yīng)商可以對(duì)應(yīng)多個(gè)采購訂單,相反地,一個(gè)采購訂單只能對(duì)應(yīng)一個(gè)供應(yīng)商,我們不能在同一個(gè)采購訂單里出現(xiàn)2家以上的供應(yīng)商,這可能會(huì)泄露商業(yè)機(jī)密。即使這些供應(yīng)商之間沒有直接競(jìng)爭(zhēng)關(guān)系,但我們還是要有所顧慮,避免不必要的麻煩,所以它們是一對(duì)多的關(guān)系。
多對(duì)多:
一個(gè)采購訂單里可以有多個(gè)SKU,就像是我們?nèi)ゴ笮统幸粯?,通常?huì)采購多項(xiàng)的商品,很容易理解。反過來,一個(gè)SKU可以出現(xiàn)在多個(gè)采購訂單里,以前買過了,現(xiàn)在來復(fù)購,這是很正常的,所以它們是多對(duì)多的關(guān)系。
如何用簡(jiǎn)單的方式來描繪出以上3種的關(guān)系呢?可以使用鴉爪圖(Crow's foot notation),它看上去有點(diǎn)像烏鴉的爪子,因此得名。
以“供應(yīng)商”和“采購訂單”為例,讓我們看一下它們的ERD是什么樣子的。
圖 供應(yīng)商”和“采購訂單”關(guān)系和鴉爪圖
在上圖中,“供應(yīng)商”和“采購訂單”實(shí)體之間被一條線連接在一起,這代表它們是有關(guān)系的。
圖 放大后的線條
在線條的左側(cè)是兩條垂直的短線,它的意思是關(guān)系是“1個(gè),且僅有1個(gè)”。在右側(cè)的符號(hào)是一個(gè)圈,外加了3條短線,它代表“0或多個(gè)”。
這種關(guān)系是含義是什么呢?一家供應(yīng)商可以有多個(gè)采購訂單,只要不是一錘子的買賣,客戶很可能是會(huì)重復(fù)購買的。為什么會(huì)有0個(gè)訂單的情況?可能供應(yīng)商剛剛被加入到備選清單中,還沒來得及下訂單,或者是供應(yīng)商出了產(chǎn)品質(zhì)量問題,采購被通知暫停購買,這些都是有可能出現(xiàn)的情況,所以這個(gè)關(guān)系是“0或多個(gè)”。為什么一個(gè)采購訂單對(duì)應(yīng)的供應(yīng)商數(shù)量是“1個(gè),且僅有1個(gè)”?首先,一張訂單不能出現(xiàn)多個(gè)供應(yīng)商,原因之前已經(jīng)解釋過了。其次,僅有1個(gè)的意思是它不能是0個(gè),這樣說有點(diǎn)拗口,我們換個(gè)角度來理解一下這句話的含義。當(dāng)采購員在做訂單時(shí),他必須把訂單發(fā)給某一個(gè)供應(yīng)商,這就是“1”的關(guān)系,他如果選擇了“0”,意味著不知道供應(yīng)商是誰,這樣的訂單是無效的,采購東西的時(shí)候至少要知道該向誰買吧,所以是采購訂單對(duì)應(yīng)供應(yīng)商的數(shù)量是1,且僅是1。
再來舉一個(gè)例子,來看一下“SKU”和“供應(yīng)商”實(shí)體之間的關(guān)系,如下圖。
圖 “SKU”和“供應(yīng)商”關(guān)系和鴉爪圖
兩個(gè)實(shí)體之間被一條線連接在一起,這代表它們是有關(guān)系的。
圖 放大后的線條
右側(cè)的圖形表示“0或多個(gè)”,剛才已經(jīng)介紹過了。左側(cè)的圖形是一個(gè)圈加上一條豎線,代表是“0或1個(gè)”。1個(gè)SKU可能有多個(gè)供應(yīng)商能夠供貨,除非是壟斷的資源或是技術(shù),許多供應(yīng)商都可以制造出類似的產(chǎn)品。
如果某個(gè)特殊的SKU在市場(chǎng)上找不到貨源,那么供應(yīng)商數(shù)量為零,這也是可能的,例如有些年代久遠(yuǎn)的產(chǎn)品配件在市場(chǎng)上難覓蹤跡。因此,SKU與供應(yīng)商數(shù)量的關(guān)系是 “0或多個(gè)”。
反過來看,1個(gè)供應(yīng)商理論上只有對(duì)應(yīng)1個(gè)SKU,因?yàn)楹笳呤亲钚齑鎲挝唬幢闶峭瑯拥漠a(chǎn)品,更換了外包裝或是包裝數(shù)量,它就是另一個(gè)SKU了。供應(yīng)商也沒有理由去對(duì)應(yīng)多個(gè)一模一樣的SKU。
當(dāng)然,供應(yīng)商可以在現(xiàn)階段不提供任何的產(chǎn)品或服務(wù),但是以后說不準(zhǔn)會(huì)有購買行為,所以關(guān)系會(huì)是“0“。這就是SKU這邊是“0或1個(gè)”的原因。
圖 鴉爪圖中的4種基數(shù)
數(shù)據(jù)庫中實(shí)體之間的關(guān)系,加上這些關(guān)系中的基數(shù)(一對(duì)一、一對(duì)多、多對(duì)多)構(gòu)成了業(yè)務(wù)規(guī)則的基礎(chǔ)。
我們只需要看ERD,就能理解業(yè)務(wù)的規(guī)則,例如1個(gè)供應(yīng)商對(duì)應(yīng)著0或多個(gè)采購訂單,如果更改了關(guān)系和基數(shù),意味著業(yè)務(wù)規(guī)則也變動(dòng)了。
假設(shè)采購有新的規(guī)定,供應(yīng)商這邊至少要有1個(gè)SKU在供貨,否則就要從采購名單中撤下來,不能在數(shù)據(jù)庫中出現(xiàn),那么供應(yīng)商對(duì)著SKU的關(guān)系就變成了1個(gè),不能再出現(xiàn)0了。
再比如說,采購認(rèn)為那些找不到供應(yīng)渠道的SKU必須從數(shù)據(jù)庫中拿掉,那么SKU對(duì)應(yīng)供應(yīng)商的關(guān)系成為了“1或多個(gè)“。
現(xiàn)在我們可以理解了,一個(gè)數(shù)據(jù)模型可能會(huì)有多個(gè)解決方案,用于描述不同的基礎(chǔ)業(yè)務(wù)流程或規(guī)則。企業(yè)的實(shí)際業(yè)務(wù)需求和流程決定了數(shù)據(jù)庫的業(yè)務(wù)規(guī)則。
當(dāng)我們看到一個(gè)實(shí)體關(guān)系圖,或者一個(gè)數(shù)據(jù)模型,通過實(shí)體或表之間的關(guān)系和基數(shù),就可以理解業(yè)務(wù)流程和規(guī)則。
瑪氏中國|2025年度瑪氏箭牌北京區(qū)域包材及原材料倉儲(chǔ)(VMI)項(xiàng)目
2257 閱讀華為的物流“布局”,為何備受關(guān)注?
1495 閱讀縱騰集團(tuán)借殼上市,6.4億收購A股上市公司綠康生化
1043 閱讀15倍爆發(fā)式增長,網(wǎng)絡(luò)貨運(yùn)行業(yè)跑出了一匹黑馬
867 閱讀京東物流一線員工日10周年:為5年、10年老員工授勛,為15000名標(biāo)桿頒獎(jiǎng)
836 閱讀京東物流喀什倉正式運(yùn)營:南疆多縣市當(dāng)天可送貨上門
693 閱讀?16億美元大手筆!這家物流巨頭被UPS收購
670 閱讀閃電倉到底靠不靠譜?從倉儲(chǔ)操作看它的真實(shí)挑戰(zhàn)
654 閱讀順豐控股:2025年一季度業(yè)績(jī)持續(xù)穩(wěn)健增長,營收698.5億元,歸母凈利潤22.34億元 ,同比增16.87%
681 閱讀韻達(dá)2024年完成快遞業(yè)務(wù)量237.83億件
659 閱讀