年份、單位、單位成員邏輯關(guān)系的設(shè)計

0 評論 190 瀏覽 0 收藏 5 分鐘

數(shù)據(jù)庫設(shè)計中,年份、單位與成員的關(guān)系處理往往暗藏玄機。本文通過兩種典型設(shè)計方案對比,深入剖析關(guān)聯(lián)表與冗余存儲的取舍邏輯,揭示數(shù)據(jù)結(jié)構(gòu)如何影響業(yè)務(wù)靈活性與系統(tǒng)性能。從多對多關(guān)系到間接關(guān)聯(lián),每種設(shè)計背后都對應(yīng)著不同的業(yè)務(wù)場景與數(shù)據(jù)完整性考量。

以年份、單位、單位成員邏輯關(guān)系設(shè)計為具體實例,用以反思三個字段邏輯關(guān)系設(shè)計不同時的數(shù)據(jù)結(jié)構(gòu)等。

年份與單位/單位成員需要關(guān)聯(lián),但連接方式不同,在數(shù)據(jù)和代碼處理上有所不同。

分析兩種關(guān)聯(lián)方式在數(shù)據(jù)庫中的不同

設(shè)計方式1:年份與單位關(guān)聯(lián)

(1)說明:創(chuàng)建單位,填寫單位名稱,同時選擇年份。

(2)設(shè)計理解:年份-單位,單位是年份下的單位。

(3)業(yè)務(wù)猜想:有一種活動,每年活動的負(fù)責(zé)單位不確定。

(4)數(shù)據(jù)表設(shè)計:

Unit表,unit_id unit_name

Year表,year_id year_name

Unit_ Year表,unit_ year_id unit_id year_id

Member表,member_id member_name unit_year_id

(5)關(guān)聯(lián)特點:

單位:屆別 = 多對多(通過關(guān)聯(lián)表)

成員:單位-屆別 = 多對一

(6)三級關(guān)聯(lián):

單位→單位-屆別→成員

(7)數(shù)據(jù)完整性:

成員必須加入一個已有年份的單位。

單位需先聲明參與哪些屆別,成員才能加入。

(8)存儲說明:

額外存儲關(guān)聯(lián)表,增加存儲開銷。

避免了冗余存儲單位。

(9)原型設(shè)計:單位必須先設(shè)置年份,成員再屬于某年份下的某單位。

(10)使用建議:

單位-屆別有獨立屬性:如屆別特定的單位預(yù)算、負(fù)責(zé)人等。

數(shù)據(jù)一致性要求高:需要確保組合有效。

批量操作多:經(jīng)常為單位分配屆別。

歷史數(shù)據(jù)重要:需要跟蹤單位-屆別關(guān)系變化。

設(shè)計方式2:年份與單位成員關(guān)聯(lián)

(1)說明:添加成員到單位,同時選擇成員年份。

(2)設(shè)計理解:單位、年份-成員,成員是單位下的成員,成員是年份下的成員。

(3)業(yè)務(wù)猜想:單位工作成員固定,每年開展活動,可以是不同單位,但單位成員變化不大。

(4)數(shù)據(jù)表設(shè)計:

Unit表,unit_id unit_name

Year表,year_id year_name

Member表,member_id member_name unit_id year_id

(5)關(guān)聯(lián)特點:

成員:單位 = 多對一

成員:屆別 = 多對一

單位:屆別 = 間接關(guān)聯(lián)(通過成員)

(6)二級關(guān)聯(lián):

成員→單位+成員

成員→年份+成員

(7)數(shù)據(jù)靈活性:

成員可以只是某單位的成員。

成員可以只是某年份的成員。

(8)存儲說明:

成員表存儲兩個外鍵,數(shù)據(jù)行大,較設(shè)計1易產(chǎn)生冗余。

表結(jié)構(gòu)簡單。

(9)原型設(shè)計:成員可以分別獨立設(shè)置年份或單位。

(10)使用建議:

簡單快速開發(fā):原型系統(tǒng)或MVP。

查詢性能優(yōu)先:高頻查詢成員信息。

單位屆別關(guān)系簡單:沒有額外屬性。

數(shù)據(jù)量小:不需要復(fù)雜優(yōu)化。

本文由 @產(chǎn)品-子魚 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!