本篇內容將重點討論數據庫中各表之間的關系。
數據庫是由實體(也叫做表)組成的,例如“SKU”、“供應商”和“采購訂單”是實體。
每個表里有一些屬性,例如“件號”、“供應商編號”等是屬性。假設我們有3個實體,其中各有一些屬性,如下圖。
圖 實體和屬性
我簡略地解釋一下其中的主要內容。在“SKU”表里存儲的是每個最小的庫存單位(Stock Keeping Unit,縮寫SKU)的關鍵信息,SKU有一個唯一的號碼,也就是件號,這就像是人的身份證一樣,是一一對應的,一般來說,1個SKU不會有2個件號。假設SKU是從外部采購的,因此需要供應商的信息。
某個SKU可能存在多個供應商同時供貨的情況,“SKU”表中的“配額”屬性定義了每個供應商的采購比例。如果SKU是獨家供應的,配額當然是100%,如果有超過1個的供應商可供貨,我們需要根據采購制定的策略進行分配,累計數量必須是100%。
供應商表中的屬性有供應商編號,一家供應商可能提供多個SKU,所以需要一個序號,另外還有件號和對應的價格。
在采購訂單表中,重要的屬性包括了訂單號、行號、件號、供應商編號和名稱、價格、數量和到貨日期等。
在這3個實體中,我們發現有一些重復出現的屬性,例如件號、供應商編號和名稱,這說明實體之間應該是有一些關系的,我們需要一種工具把這種關系描述出來,它就是實體關系圖(Entity Relationship Diagram, 縮寫ERD)。
實體關系圖是數據庫的一個示意圖,描述了所有不同的實體或表,以及它們之間的關系。在ERD中,實體被畫成了一個個盒子,它們之間用線條連接,表示實體之間是有關系的。
在數據庫的語言中,使用基數(Cardinality)這個詞描述了兩個實體和關系之間相關發生的預期數量,這個概念很抽象,我就不詳細介紹了。我們可以簡單地把關系理解為三種情況,分別是:
一對一:
例如一個人只有一個身份證號碼,一個SKU只對應一個件號。
一對多:
一個供應商可以對應多個采購訂單,相反地,一個采購訂單只能對應一個供應商,我們不能在同一個采購訂單里出現2家以上的供應商,這可能會泄露商業機密。即使這些供應商之間沒有直接競爭關系,但我們還是要有所顧慮,避免不必要的麻煩,所以它們是一對多的關系。
多對多:
一個采購訂單里可以有多個SKU,就像是我們去大型超市一樣,通常會采購多項的商品,很容易理解。反過來,一個SKU可以出現在多個采購訂單里,以前買過了,現在來復購,這是很正常的,所以它們是多對多的關系。
如何用簡單的方式來描繪出以上3種的關系呢?可以使用鴉爪圖(Crow's foot notation),它看上去有點像烏鴉的爪子,因此得名。
以“供應商”和“采購訂單”為例,讓我們看一下它們的ERD是什么樣子的。
圖 供應商”和“采購訂單”關系和鴉爪圖
在上圖中,“供應商”和“采購訂單”實體之間被一條線連接在一起,這代表它們是有關系的。
圖 放大后的線條
在線條的左側是兩條垂直的短線,它的意思是關系是“1個,且僅有1個”。在右側的符號是一個圈,外加了3條短線,它代表“0或多個”。
這種關系是含義是什么呢?一家供應商可以有多個采購訂單,只要不是一錘子的買賣,客戶很可能是會重復購買的。為什么會有0個訂單的情況?可能供應商剛剛被加入到備選清單中,還沒來得及下訂單,或者是供應商出了產品質量問題,采購被通知暫停購買,這些都是有可能出現的情況,所以這個關系是“0或多個”。為什么一個采購訂單對應的供應商數量是“1個,且僅有1個”?首先,一張訂單不能出現多個供應商,原因之前已經解釋過了。其次,僅有1個的意思是它不能是0個,這樣說有點拗口,我們換個角度來理解一下這句話的含義。當采購員在做訂單時,他必須把訂單發給某一個供應商,這就是“1”的關系,他如果選擇了“0”,意味著不知道供應商是誰,這樣的訂單是無效的,采購東西的時候至少要知道該向誰買吧,所以是采購訂單對應供應商的數量是1,且僅是1。
再來舉一個例子,來看一下“SKU”和“供應商”實體之間的關系,如下圖。
圖 “SKU”和“供應商”關系和鴉爪圖
兩個實體之間被一條線連接在一起,這代表它們是有關系的。
圖 放大后的線條
右側的圖形表示“0或多個”,剛才已經介紹過了。左側的圖形是一個圈加上一條豎線,代表是“0或1個”。1個SKU可能有多個供應商能夠供貨,除非是壟斷的資源或是技術,許多供應商都可以制造出類似的產品。
如果某個特殊的SKU在市場上找不到貨源,那么供應商數量為零,這也是可能的,例如有些年代久遠的產品配件在市場上難覓蹤跡。因此,SKU與供應商數量的關系是 “0或多個”。
反過來看,1個供應商理論上只有對應1個SKU,因為后者是最小庫存單位,即便是同樣的產品,更換了外包裝或是包裝數量,它就是另一個SKU了。供應商也沒有理由去對應多個一模一樣的SKU。
當然,供應商可以在現階段不提供任何的產品或服務,但是以后說不準會有購買行為,所以關系會是“0“。這就是SKU這邊是“0或1個”的原因。
圖 鴉爪圖中的4種基數
數據庫中實體之間的關系,加上這些關系中的基數(一對一、一對多、多對多)構成了業務規則的基礎。
我們只需要看ERD,就能理解業務的規則,例如1個供應商對應著0或多個采購訂單,如果更改了關系和基數,意味著業務規則也變動了。
假設采購有新的規定,供應商這邊至少要有1個SKU在供貨,否則就要從采購名單中撤下來,不能在數據庫中出現,那么供應商對著SKU的關系就變成了1個,不能再出現0了。
再比如說,采購認為那些找不到供應渠道的SKU必須從數據庫中拿掉,那么SKU對應供應商的關系成為了“1或多個“。
現在我們可以理解了,一個數據模型可能會有多個解決方案,用于描述不同的基礎業務流程或規則。企業的實際業務需求和流程決定了數據庫的業務規則。
當我們看到一個實體關系圖,或者一個數據模型,通過實體或表之間的關系和基數,就可以理解業務流程和規則。
美國對中國商品加征10%關稅,對跨境電商的巨大沖擊
1074 閱讀SCOR模型:數字化時代供應鏈管理的航海圖
850 閱讀白犀牛副總裁王瀚基:無人配送帶來了哪些機遇與挑戰?
764 閱讀快遞人2025愿望清單:漲派費、少罰款、交社保......
753 閱讀京東物流北京區25年331大件DC承運商招標
670 閱讀突發!美國郵政停收中國內地和中國香港包裹,800美元免稅取消,影響幾何?
585 閱讀“朝令夕改”!美國郵政恢復接收中國包裹
562 閱讀春節假期全國攬投快遞包裹超19億件
530 閱讀1月27日-2月2日全國物流保通保暢運行情況
524 閱讀暖心護航春節返程,順豐確保每一份滿滿當當的心意與牽掛新鮮抵達!
476 閱讀