各位大大好
小弟是一間小公司裡
負責部分核心業務的軟體工程師
為了日益多樣的客群,被安排要規劃新的設計
程式語言使用的是Java,資料庫是Postgres
框架使用了Hibernate及Spring data JPA
有天CTO跟我說想到了個好方法
要把核心業務中
原本關系為多對一的A Table 與B Table
改為多對多關係
並把Key直接用String Array Type
儲存在A Table的某個新欄位裡
這樣一來就有很大的彈性
小弟做了一些功課
向CTO表達了應該加關係表正規化的想法
但CTO不滿意,覺得關系表很多餘
小弟又用String Array Type 在Java世界裡
並沒有完整支援為理由嘗試說服
CTO卻覺得這些都是可以克服的問題...
小弟認為一但使用String Array Type
並且不使用關系表
就很有可能要全部走Native SQL
日後無論延展需求或維護都會相當痛苦
為此非常苦惱
因為核心業務的複雜程度
小弟希望可以降低日後的維護門檻
想詢問各位大大
String Array Type的問題
真的有這麼好克服嗎?
或是有什麼更好的說服理由是小弟沒想到的?
這是小弟首次於軟體版發文
感謝耐心看完的大大們,獻上萬分的謝意
----
Sent from BePTT on my Samsung SM-A528B
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.70.45.29 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1669982247.A.465.htmlchuegou1樓我的建議是不要怕留下技術債 還債的不一定是你 12/02 20:23
chen098852樓實際上正規化後各種限制也是問題 12/02 20:51
abccbaandy3樓推1F,怕什麼,你這專案成功了就丟給菜鳥維護了 12/02 21:13
→ abccbaandy4樓還能嘴他需求做太慢,你當年XX一天就好 12/02 21:14
CRPKT5樓你們業務邏輯裡有沒有需要從 B 反查 A? 12/02 21:20
→ 本人6樓CRPKT大大您好,主要的邏輯都是從B向A來查詢的,是 12/02 21:37
→ 本人7樓為了多個B對多個A才這樣做的,因為1B對多A的關係不 12/02 21:37
→ 本人8樓夠用 12/02 21:37
→ neo52779樓存json字串 或是乾脆nosql 12/02 22:08
jack020410樓關係表是有必要的,也可以用NOSQL,或是快逃 12/02 23:01
jack020411樓不過根據主要業務來評估比較好,如果不頻繁的話都行 12/02 23:07
SHANGOYANYI12樓需要這麼厚工喔? 一個基本多對多的表是難在哪?XD 12/03 00:37
→ alan310013樓不就一個mapping table就搞定是難在哪 12/03 01:05
→ alan310014樓pk:id,A_pk,B_pk,isValid,modifyDate 12/03 01:09
→ alan310015樓string array或nosql 你都還是要面對是否要強一致性問題 12/03 01:11
→ ssccg16樓你是要問怎樣比較好,還是怎麼說服你家CTO.. 12/03 01:37
→ ssccg17樓如果要表達關係的話,關係表才是最簡單又有彈性的,存個 12/03 01:46
→ ssccg18樓array除了不開新table外,既沒好處也沒什麼很大的彈性啊 12/03 01:47
→ 本人19樓CTO的溝通部分也許跟軟體不太有關,若覺得奇怪就留 12/03 07:16
→ 本人20樓給小弟我自己解決就可以了,大大們就分享想分享的 12/03 07:16
→ 本人21樓部分就好,謝謝各位大大的回覆 12/03 07:16
Jichang22樓有些情況是不太想用 join 兩種方法各有優缺 有json type 12/03 08:15
→ Jichang23樓可以用 12/03 08:15
→ brucetu24樓讀寫比例 預估資料總筆數 峰值流量 日常流量 12/03 12:35
→ brucetu25樓這些都會影響你要用哪種方式實作 12/03 12:36
→ brucetu26樓但有一個很簡單的準則就是 如果你小公司 流量小 12/03 12:36
→ brucetu27樓就用寫code最快的方式讓memory去扛一切的問題 12/03 12:36
→ brucetu28樓你家CTO提出的辦法基本上就是寫code最快最懶的方法 12/03 12:38
→ brucetu29樓也就是最省成本 12/03 12:38
→ brucetu30樓建議你就做 萬一效能爆炸 增加硬體成本 責任不在你 12/03 12:39