[請益] 關於關聯式資料庫處理重複架構的方式
最近在開發功能的時候
有遇到一個滿困擾的問題
在某些需求中,可能會遇到數張結構相同的表,
只是因為外來鍵參考的表不一樣而分化
比如說有個紀錄縣市總預算的需求
假設縣和市都有自己的東西要存,因此不能存在同一張表
必須是獨立的兩張表
那資料庫預算表可能會長這樣
CountyBudget
id/countyId/income/expenses
CityBudget
id/cityId/income/expenses
在程式面或許可以把預算表的屬性抽一個物件
在縣市底下放這個物件進去
但資料庫這邊除了重複定義欄位之外 有其他方式可以解決嗎?
有想過類似這樣的方式
Budget
id/type/referId/income/expenses
但是問題是這樣就沒辦法建立實體關聯了QQ
--
要關連可以兩個自己不同type去關連啊?然後再建一個city跟
country的關聯,三個表就可以互串,照理,你原本也會建一
個city-country的才對?不然你怎麼關聯的,除非你兩個ID都
一樣?
我上面只是舉個例子 實際上有些情況是city和country並沒有關聯性 所以也沒有關聯表 可以直接參照 目前的做法就是在city和country底下各自建立一張budget表 但這種方式在遇到budget表底下也有很多與其關聯的表 維護上就會十分麻煩... 以MSSQL來講 應該是做不到type/referId,可以和不同的表做關聯吧?
※ 編輯: f0921048125 (220.134.113.80 臺灣), 12/21/2022 14:49:26※ 編輯: f0921048125 (220.134.113.80 臺灣), 12/21/2022 14:51:13
你把budget的key分別放到county和city呀
不一定要設定foreign key
兩張額外的 mapping 表ㄧ端分別對應 county 和 city,另
一端對應 budget 表。但會變成多對多且關聯起來不方便,
要在 mapping 表加 constraint 來避免多對多,不然就是如
樓上放棄外鍵
那看起來就是把foreign key跟分散好幾張表的column
統一在一張table就好了,就是樓上大大的做法
還是說參考foreign key的table可能會出現例外?
我們有用On Delete的慣例 因此很少會選擇放棄實體關聯
※ 編輯: f0921048125 (111.83.165.50 臺灣), 12/21/2022 18:20:19既然這樣,我會把city和county不同的地方抽出分別建立兩
個表。共同的地方一個表再去關聯預算。
用jpa來說 你要的是DiscriminatorColumn跟
DiscriminatorValue
你的欄位會是 ID/TYPE/ID/INCOME/EXPENSES
既然要獨立budget表,應該要各自擁有與county及cit
y的關連表,麻煩的點是不想幫不同外鍵的表建立關連
表嗎?,這取決於這些外鍵與budget的關系是否一致,
若一致,你是可以直接把全部的外鍵放在同一張表,
只用單張關聯表描述他
呃 弄張表有region_type跟region_id不就好了?
建一個對應表,看你想怎麼關連budget的ID,budget只存ID/I
NCOME/EXPENSES,也是可以?
這年頭還有人硬刪除呀也太可怕了
多重多對多
我是覺得多對多挺適合處理這個場景,把城市直接當一個菜單
處理
用type+id,讓persistence層自己去關聯就好,資料維護時的
完整性用別的方式處理,DB設計有時候要取捨,太追求理想化
的schema有時候反而會造成更多問題。
可能硬刪除之後搬去hist吧
我偏好CityBudget,CountyBudget分兩張存
除非你budget要常常混再一起算,不然你還要搞 M-to-M 表
現在大型系統,不偏好這種作法 不利於擴展或是重構
譬如到時候需求變更county has many cities的時候
只需要算county budget總和,city budget只是county展開
你原先做的多對多mapping table就會很難重構
典型的正規化/反正規化選擇?
我會分兩張表 沒必要為了省空間搞這麼麻煩
分兩張表+1。書本上的各種 NF都太理想化。實際上不實用。
正規化有好有壞啦,好處是串連的時候很靈活,可以只挑你要
的資料,但有時候一個參數就要串3、4個表,但都不正規化也
很煩,明明一樣的參數,每個表都要存,如果又沒有統一的命
名規則,明明看起來一樣,但命名不一樣,就不知道有沒有延
伸意思,我之前待的兩個公司就是這兩個的極端…
怎麼沒人提到寬表?都塞一起就好
看資料筆數 如果千萬筆以下的話隨便啦
這應該是分表比較好。
16
[請益] 欄位或是變數改名這邊想請問各位前輩系統維護上常常遇到的一個問題 就是程式中的變數或是資料表欄位命名的"變更" 我不確定是不是一開始我的設計的想法就錯了 通常我在設計時,會將使用者的操作"畫面"與系統中的命名盡量保持一致, 討論起來比較有共通的語言,尤其是在一些專有名詞的欄位命名上。7
Re: [請益] 商城的訂單資料庫設計可以先想想後面可能需要的功能,像是: - 訂單快照功能,保留當時的商品資訊 e.g. 價錢,規格等 - 是否需要跨商店結帳? - 出貨時需不需要做到分批出貨? - 退款時需不需要做到只退款部分商品?3
[請益] Django+Mysql資料表問題最近在學習Django,使用Mysql做為資料庫 想呈現的內容是一檔股票每周股權分散的變化 雖然資料表已經創建完成了,不過我用的方式是 先寫好建立資料表的sql語法,用for loop執行(一個csv檔建立一個Table) 表格內容也是用for loop Insert進去2
[問題] 關於Roon匯入Music的資料庫的問題大家好,我想請教一點問題 之前看到版友在問,MAC在播放音樂的時候,取樣率會受到音訊MIDI設定的限制 其實我之前也有相同的問題,推文內說換用Roon之類的player可以解決 所以我就開始試用Roon 早上才開始試用,還在摸索中,我是讓Roon匯入Music的library,但是遇到了幾個問題