最近在開發功能的時候
有遇到一個滿困擾的問題
在某些需求中,可能會遇到數張結構相同的表,
只是因為外來鍵參考的表不一樣而分化
比如說有個紀錄縣市總預算的需求
假設縣和市都有自己的東西要存,因此不能存在同一張表
必須是獨立的兩張表
那資料庫預算表可能會長這樣
CountyBudget
id/countyId/income/expenses
CityBudget
id/cityId/income/expenses
在程式面或許可以把預算表的屬性抽一個物件
在縣市底下放這個物件進去
但資料庫這邊除了重複定義欄位之外 有其他方式可以解決嗎?
有想過類似這樣的方式
Budget
id/type/referId/income/expenses
但是問題是這樣就沒辦法建立實體關聯了QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.113.80 (臺灣)※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1671603742.A.79A.html→ qss051樓要關連可以兩個自己不同type去關連啊?然後再建一個city跟 12/21 14:33
→ qss052樓country的關聯,三個表就可以互串,照理,你原本也會建一 12/21 14:33
→ qss053樓個city-country的才對?不然你怎麼關聯的,除非你兩個ID都 12/21 14:33
→ qss054樓一樣? 12/21 14:33
我上面只是舉個例子 實際上有些情況是city和country並沒有關聯性 所以也沒有關聯表
可以直接參照
目前的做法就是在city和country底下各自建立一張budget表
但這種方式在遇到budget表底下也有很多與其關聯的表
維護上就會十分麻煩...
以MSSQL來講 應該是做不到type/referId,可以和不同的表做關聯吧?
s06yji35樓你把budget的key分別放到county和city呀 12/21 15:07
s06yji36樓不一定要設定foreign key 12/21 15:11
→ t641417樓兩張額外的 mapping 表ㄧ端分別對應 county 和 city,另 12/21 16:18
→ t641418樓一端對應 budget 表。但會變成多對多且關聯起來不方便, 12/21 16:18
→ t641419樓要在 mapping 表加 constraint 來避免多對多,不然就是如 12/21 16:18
→ t6414110樓樓上放棄外鍵 12/21 16:18
WaterLengend11樓那看起來就是把foreign key跟分散好幾張表的column 12/21 17:06
→ WaterLengend12樓統一在一張table就好了,就是樓上大大的做法 12/21 17:06
→ WaterLengend13樓還是說參考foreign key的table可能會出現例外? 12/21 17:07
我們有用On Delete的慣例
因此很少會選擇放棄實體關聯
s06yji314樓既然這樣,我會把city和county不同的地方抽出分別建立兩 12/21 18:35
→ s06yji315樓個表。共同的地方一個表再去關聯預算。 12/21 18:35
→ BlueBird556616樓用jpa來說 你要的是DiscriminatorColumn跟 12/21 18:44
→ BlueBird556617樓DiscriminatorValue 12/21 18:44
→ BlueBird556618樓你的欄位會是 ID/TYPE/ID/INCOME/EXPENSES 12/21 18:45
internetms5219樓既然要獨立budget表,應該要各自擁有與county及cit 12/21 19:07
→ internetms5220樓y的關連表,麻煩的點是不想幫不同外鍵的表建立關連 12/21 19:07
→ internetms5221樓表嗎?,這取決於這些外鍵與budget的關系是否一致, 12/21 19:07
→ internetms5222樓若一致,你是可以直接把全部的外鍵放在同一張表, 12/21 19:07
→ internetms5223樓只用單張關聯表描述他 12/21 19:07
SHANGOYANYI24樓呃 弄張表有region_type跟region_id不就好了? 12/21 19:41
qss0525樓建一個對應表,看你想怎麼關連budget的ID,budget只存ID/I 12/21 20:17
→ qss0526樓NCOME/EXPENSES,也是可以? 12/21 20:17
→ alan310027樓這年頭還有人硬刪除呀也太可怕了 12/21 22:10
pvq21228樓多重多對多 12/21 23:25
ck23729樓我是覺得多對多挺適合處理這個場景,把城市直接當一個菜單 12/22 02:07
→ ck23730樓處理 12/22 02:07