-- 创建食物分类表 -- 该表用于存储食物的分类信息,如常见、水果蔬菜、肉蛋奶等 CREATE TABLE IF NOT EXISTS `t_food_categories` ( `key` varchar(50) NOT NULL COMMENT '分类唯一键(英文/下划线)', `name` varchar(50) NOT NULL COMMENT '分类中文名称', `icon` varchar(100) DEFAULT NULL COMMENT '分类图标', `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(升序)', `is_system` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否系统分类(1:系统,0:用户自定义)', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`key`), KEY `idx_sort_order` (`sort_order`), KEY `idx_is_system` (`is_system`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='食物分类表'; -- 创建食物库表 -- 该表用于存储食物的基本信息和营养成分 CREATE TABLE IF NOT EXISTS `t_food_library` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(100) NOT NULL COMMENT '食物名称', `description` varchar(500) DEFAULT NULL COMMENT '食物描述', `category_key` varchar(50) NOT NULL COMMENT '分类键', `calories_per_100g` float DEFAULT NULL COMMENT '每100克热量(卡路里)', `protein_per_100g` float DEFAULT NULL COMMENT '每100克蛋白质含量(克)', `carbohydrate_per_100g` float DEFAULT NULL COMMENT '每100克碳水化合物含量(克)', `fat_per_100g` float DEFAULT NULL COMMENT '每100克脂肪含量(克)', `fiber_per_100g` float DEFAULT NULL COMMENT '每100克膳食纤维含量(克)', `sugar_per_100g` float DEFAULT NULL COMMENT '每100克糖分含量(克)', `sodium_per_100g` float DEFAULT NULL COMMENT '每100克钠含量(毫克)', `additional_nutrition` json DEFAULT NULL COMMENT '其他营养信息(维生素、矿物质等)', `is_common` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否常见食物(1:常见,0:不常见)', `image_url` varchar(500) DEFAULT NULL COMMENT '食物图片URL', `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(分类内)', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_category_key` (`category_key`), KEY `idx_is_common` (`is_common`), KEY `idx_name` (`name`), KEY `idx_category_sort` (`category_key`, `sort_order`), CONSTRAINT `fk_food_category` FOREIGN KEY (`category_key`) REFERENCES `t_food_categories` (`key`) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='食物库表'; -- 插入食物分类数据 INSERT INTO `t_food_categories` (`key`, `name`, `sort_order`, `is_system`) VALUES ('common', '常见', 1, 1), ('fruits_vegetables', '水果蔬菜', 2, 1), ('meat_eggs_dairy', '肉蛋奶', 3, 1), ('beans_nuts', '豆类坚果', 4, 1), ('snacks_drinks', '零食饮料', 5, 1), ('staple_food', '主食', 6, 1), ('dishes', '菜肴', 7, 1); -- 插入示例食物数据 INSERT INTO `t_food_library` (`name`, `category_key`, `calories_per_100g`, `protein_per_100g`, `carbohydrate_per_100g`, `fat_per_100g`, `fiber_per_100g`, `sugar_per_100g`, `sodium_per_100g`, `is_common`, `sort_order`) VALUES -- 常见食物 ('无糖美式咖啡', 'common', 1, 0.1, 0, 0, 0, 0, 2, 1, 1), ('荷包蛋(油煎)', 'common', 195, 13.3, 0.7, 15.3, 0, 0.7, 124, 1, 2), ('鸡蛋', 'common', 139, 13.3, 2.8, 8.8, 0, 2.8, 131, 1, 3), -- 水果蔬菜 ('香蕉', 'fruits_vegetables', 93, 1.4, 22.8, 0.2, 1.7, 17.2, 1, 1, 1), ('猕猴桃', 'fruits_vegetables', 61, 1.1, 14.7, 0.5, 3, 9, 3, 1, 2), ('苹果', 'fruits_vegetables', 53, 0.3, 14.1, 0.2, 2.4, 10.4, 1, 1, 3), ('草莓', 'fruits_vegetables', 32, 0.7, 7.7, 0.3, 2, 4.9, 1, 1, 4), -- 主食 ('蛋烧麦', 'staple_food', 157, 6.2, 22.2, 5.2, 1.1, 1.8, 230, 1, 1), ('米饭', 'staple_food', 116, 2.6, 25.9, 0.3, 0.3, 0.1, 5, 1, 2), -- 零食饮料 ('无糖美式咖啡', 'snacks_drinks', 1, 0.1, 0, 0, 0, 0, 2, 0, 1), -- 肉蛋奶 ('鸡蛋', 'meat_eggs_dairy', 139, 13.3, 2.8, 8.8, 0, 2.8, 131, 0, 1), ('荷包蛋(油煎)', 'meat_eggs_dairy', 195, 13.3, 0.7, 15.3, 0, 0.7, 124, 0, 2); -- 创建索引以优化查询性能 CREATE INDEX `idx_food_common_category` ON `t_food_library` (`is_common`, `category_key`); CREATE INDEX `idx_food_name_search` ON `t_food_library` (`name`);