Vin*_*ceL 14 mysql database-design
我正在设计一个需要非常灵活的配方数据库,因为它将直接与我们的后台库存系统进行通信.这是我到目前为止关于表格的内容:
基本上,配方行项目表需要能够链接到成分表或配方表,具体取决于需要哪个行项目,我想知道什么是最有效的处理方式.
非常感谢你提前!
看起来你需要一个类似于这个的数据库模型:

此模型具有以下属性:
1如果MySQL支持CHECK约束(它没有),你可以确保它们中的一个(但不是两个)非NULL,如下所示:
CHECK (
(INGREDIENT_ID IS NULL AND SUBRECIPE_ID IS NOT NULL)
OR (INGREDIENT_ID IS NOT NULL AND SUBRECIPE_ID IS NULL)
)
Run Code Online (Sandbox Code Playgroud)
就目前而言,你需要一个触发器.
您\xe2\x80\x99将需要三个表:一个recipes表、一个ingredients表和一个recipe_ingredients将成分分配给配方的表。您还可以在此表中存储其他信息,例如数量。例如,如果您有蔬菜汤的食谱,您将有多个具有相应数量的蔬菜条目。然后,这些条目将通过外键链接到相关的配方和成分。
编辑:最简单的模式:
\n\nCREATE TABLE `ingredients` (\n `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n `name` varchar(45) NOT NULL,\n PRIMARY KEY (`id`)\n) TYPE=InnoDB;\n\nCREATE TABLE `recipes` (\n `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n `name` varchar(45) NOT NULL,\n PRIMARY KEY (`id`)\n) TYPE=InnoDB;\n\nCREATE TABLE `recipe_ingredients` (\n `recipe_id` int(10) unsigned NOT NULL,\n `ingredient_id` int(10) unsigned NOT NULL,\n `quantity` int(10) unsigned NOT NULL,\n KEY `recipe_id` (`recipe_id`),\n KEY `ingredient_id` (`ingredient_id`)\n) TYPE=InnoDB;\n\n\nALTER TABLE `recipe_ingredients`\n ADD CONSTRAINT `recipe_ingredients_ibfk_2` FOREIGN KEY (`ingredient_id`) REFERENCES `ingredients` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,\n ADD CONSTRAINT `recipe_ingredients_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;\nRun Code Online (Sandbox Code Playgroud)\n