- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个食谱应用程序来帮助我妻子培养她的蛋糕爱好。这个想法是创建一个食谱数据库来保存她所有的蛋糕食谱。
每个食谱都有多种成分。每种成分都会有测量值(克、毫升、茶匙等),然后是数量。
我了解如何创建“食谱”和“成分”表以及如何将这 2 个表与联结表“recipe_ingredients”相关联,但是我正在为如何实现测量和数量字段而苦苦挣扎。
有更多数据库经验的人可以建议数据库方案或有任何提示来处理这个问题吗?
最佳答案
对此您有一些选择,并且像大多数事情一样,您可以走简单的路线(Nick Coons 在我输入这篇文章时发布了一个很好的例子)或逐渐复杂的路线。这里有一些关于您如何看待此工作的问题要问自己:
一个好的中间立场应该是这样的
CREATE TABLE `recipe` (
`recipe_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) DEFAULT NULL,
`description` TEXT,
`instructions` TEXT,
PRIMARY KEY (`recipe_id`)
)
CREATE TABLE `ingredient` (
`ingredient_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`recipe_id` INT(10) UNSIGNED NOT NULL,
`ingredient` VARCHAR(64) DEFAULT NULL,
`amount` DECIMAL(4, 2) DEFAULT NULL,
`unit` ENUM ('tsp', 'tbsp', 'oz', 'g', 'lb', 'cup', 'gallon', 'pinch') DEFAULT NULL,
PRIMARY KEY (`ingredient_id`)
)
这通过强制执行一组单位来满足 #1,这很好。缺点是您必须更改表格才能更新单位。使您的前端与有效选择保持同步也可能更加困难。
接下来,您可以为单位添加一个表,并通过成分表中的外键引用它,如下所示:
CREATE TABLE `unit` (
`unit_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`label` VARCHAR(64) DEFAULT NULL,
`sort` INT(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`unit_id`),
UNIQUE KEY `unit_label_uk` (`label`)
)
CREATE TABLE `ingredient` (
`ingredient_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`unit_id` INT(10) UNSIGNED NOT NULL,
`recipe_id` INT(10) UNSIGNED NOT NULL,
`ingredient` VARCHAR(64) DEFAULT NULL,
`amount` DECIMAL(4, 2) DEFAULT NULL,
`sort` INT(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`ingredient_id`)
)
这满足了#1 和#2,让您可以轻松管理您的单位并访问列表以在您的前端使用,因此您无需在更改单位时更改您的前端。
从那里您可以转向太空,想出处理单位转换等的方法,但这对于您尝试做的事情来说可能有点矫枉过正。
编辑:根据您的评论,我会这样设置:
CREATE TABLE `recipe` (
`recipe_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`description` TEXT,
`instructions` TEXT,
PRIMARY KEY (`recipe_id`)
)
CREATE TABLE `ingredient` (
`ingredient_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`label` VARCHAR(64) NOT NULL,
`sort` INT(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`ingredient_id`)
UNIQUE KEY `ingredient_label_uk` (`label`)
)
CREATE TABLE `unit` (
`unit_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`label` VARCHAR(64) DEFAULT NULL,
`sort` INT(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`unit_id`),
UNIQUE KEY `unit_label_uk` (`label`)
)
CREATE TABLE `recipe_ingredient` (
`recipe_ingredient_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`recipe_id` INT(10) UNSIGNED NOT NULL,
`ingredient_id` INT(10) UNSIGNED NOT NULL,
`unit_id` INT(10) UNSIGNED NOT NULL,
`amount` DECIMAL(4, 2) DEFAULT NULL,
`sort` INT(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`recipe_ingredient_id`)
)
您的 recipe_ingredient 表在这里完成大部分工作,将所有内容联系在一起。
关于php - 配方/成分/测量/数量的数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655382/
我有一些带有反应组件抽象的外部 UI,我想从试剂中重用它们,有没有什么方法可以通过从 clojurescript 传递数据来直接渲染预定义的 react 组件。我是 clojurescript 初学者
我刚刚构建了一个库(Material Components库)from source并将本地Maven存储库添加到了我的项目中。现在,我可以通过将Log调用添加到库的本地源中来成功地进行一些外行调试。
我正在尝试测试呈现 grommet 的组件菜单 组件。索环 Menu 组件将绝对定位的菜单呈现到文档的顶层,作为子级插入到 body 中。因此它呈现在包装器的范围之外。我可以使用 document.b
如何创建一个凹形的 SKPhysicsBody? 我的猜测是创建一个由多个凸体组成的复合节点。我可以用任何其他方式“粘贴”它们,从而在它们之间创建 SKPhysicsJointFixed 吗? 最佳答
我正在开发一个食谱应用程序来帮助我妻子培养她的蛋糕爱好。这个想法是创建一个食谱数据库来保存她所有的蛋糕食谱。 每个食谱都有多种成分。每种成分都会有测量值(克、毫升、茶匙等),然后是数量。 我了解如何创
我正在使用 sklearn's PCA用于对大量图像进行降维。安装 PCA 后,我想看看组件的外观。 可以通过查看 components_ 属性来做到这一点。没有意识到这是可用的,我做了其他事情: e
我是一名优秀的程序员,十分优秀!