食物與營養成分是一對多關係:一種食物包含多種營養成分,每種成分有含量數值。
-- 食物主表
CREATE TABLE food (
id NUMBER PRIMARY KEY,
name VARCHAR2(100) NOT NULL, -- 食物名稱:蔬菜、水果、大米
type VARCHAR2(50), -- 類型:穀物、蔬菜、水果
suitable_age VARCHAR2(50) -- 適宜年齡段
);
-- 營養成分表
CREATE TABLE nutrient (
id NUMBER PRIMARY KEY,
name VARCHAR2(100) NOT NULL, -- 營養名稱:蛋白質、葡萄糖
unit VARCHAR2(20) -- 單位:g、mg、μg
);
-- 關聯表(食物-營養含量)
CREATE TABLE food_nutrient (
food_id NUMBER REFERENCES food(id),
nutrient_id NUMBER REFERENCES nutrient(id),
amount NUMBER(10,3) NOT NULL, -- 含量數值
PRIMARY KEY (food_id, nutrient_id)
);
-- 查詢某食物的所有營養成分
SELECT f.name AS food, n.name AS nutrient, fn.amount, n.unit
FROM food f
JOIN food_nutrient fn ON f.id = fn.food_id
JOIN nutrient n ON fn.nutrient_id = n.id
WHERE f.id = :food_id;
-- 查詢含某營養成分最高的前 10 種食物
SELECT f.name, fn.amount
FROM food f
JOIN food_nutrient fn ON f.id = fn.food_id
JOIN nutrient n ON fn.nutrient_id = n.id
WHERE n.name = '蛋白質'
ORDER BY fn.amount DESC
FETCH FIRST 10 ROWS ONLY;
後端提供 REST API 返回 JSON,前端用 fetch/axios 調用渲染表格或圖表(ECharts/Chart.js)。