iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
AI & Data

ML/DL實作-「營養抗老」專題製作系列 第 9

Day 9_DrugBank 交互查詢 MVP(只讀、可查、可擴充)

  • 分享至 

  • xImage
  •  

🎯 目標

打通從 DrugBank(授權帳號下載的資料)→ 本機 DB → API 查詢 的最短路徑

新增 /api/interactions 查詢端點(依營養成分/食物 → 可能的藥物交互與嚴重度)

🛠 工作項目
1) 資料與結構(DB)

既有表:effects / foods / evidence(不動)

使用 Day 3 已建的表:compounds、interactions

compounds(name):先只放關鍵活性成分(例:番茄紅素、維生素C、Omega-3、銅…)

interactions(compound_id, drugbank_drug_id, interaction_type, mechanism, severity, evidence_level, pmid_or_doi, notes)

索引:

CREATE INDEX idx_compounds_name ON compounds(name);

CREATE INDEX idx_interactions_compound ON interactions(compound_id);

CREATE INDEX idx_interactions_drugbank ON interactions(drugbank_drug_id);

2) 最小 ETL(一次性導入)

準備 etl/drugbank_min.csv(欄位:compound_name, drugbank_drug_id, interaction_type, mechanism, severity, evidence_level, pmid_or_doi)

腳本 import_drugbank_min.sh:

INSERT IGNORE INTO compounds(name)(去重)

INSERT ... SELECT 用 JOIN compounds.name = csv.compound_name 寫入 interactions

先導入少量高關聯成分(與 E001/E002 相關者),確保端到端打通

3) 後端程式

dao/InteractionDao.java:

List<InteractionDto> findByCompoundName(String compoundName)

List<InteractionDto> findByFoodName(String foodName)(可選:foods → (食物對應成分) → interactions,Day 8 先用手動對應表或暫定規則)

dto/InteractionDto:
controller/InteractionController:

GET /api/interactions?compound=番茄紅素

(可選)GET /api/interactions?food=番茄 → 以簡單 mapping 找到對應成分

基本驗證與 404:compound/food 不存在回一致錯誤格式(沿用 Day 6 的 @ControllerAdvice)

4) 權限與安全(最小做法)

DrugBank 檔案不進 repo,只放到 ~/mywork/data/drugbank/

.gitignore 已忽略資料檔

連線密碼仍用本機 mall/mallpass,不對外開放


上一篇
Day 8_ML/DL實作-「營養抗老」專題 | 穩定性與可觀測性(Cache/指標/文件/打包)
下一篇
Day 10_食物成分對應 + 推薦結果整合交互警示
系列文
ML/DL實作-「營養抗老」專題製作14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言