gpt4 book ai didi

mysql - 食谱数据库,设计问题(mysql,innodb)

转载 作者:行者123 更新时间:2023-11-29 00:39:52 27 4
gpt4 key购买 nike

我已经在食物食谱数据库上工作了一段时间,并且积累了一些关于我的设计的问题。这是我的第一个项目,所以如果您看到任何奇怪的地方,请指出。这是我目前所拥有的:

下表是“分升、升、打”等词的列表。

CREATE TABLE amount_type(
amount_type_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
amount_type VARCHAR(40) NOT NULL,
PRIMARY KEY (amount_type_id)
)
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci;

下面记录了食谱名称、描述:“good ol' pancakes”、所有说明“将鸡蛋、面粉、牛奶放入煎锅中”以及制作的食物量。

CREATE TABLE recipe(
recipe_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description VARCHAR(100) NOT NULL,
instruction VARCHAR (250) NOT NULL,
amount SMALLINT(10) UNSIGNED NOT NULL,
amount_type_id INT(10) UNSIGNED NOT NULL,
last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (amount_type_id) REFERENCES amount_type (amount_type_id),
PRIMARY KEY (recipe_id)
)
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci;

每种成分都属于“蔬菜、乳制品”等类型

CREATE TABLE ingredient_type(
ingredient_type_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
type VARCHAR(40) NOT NULL,
PRIMARY KEY (ingredient_type_id)
)
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci;

哪家公司生产的成分:

CREATE TABLE ingredient_brand(
ingredient_brand_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
brand_name VARCHAR(40) NOT NULL,
PRIMARY KEY (ingredient_brand_id)
)
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci;

成分名称,成分描述,单价为每升/公斤,视产品而定,临时优惠价。

CREATE TABLE ingredient(
ingredient_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
ingredient_type_id INT(10) UNSIGNED NOT NULL,
name VARCHAR(40) NOT NULL,
description VARCHAR(40) NOT NULL,
ingredient_brand_id INT(10) UNSIGNED NOT NULL,
unit_price DECIMAL(9,4) UNSIGNED NOT NULL,
unit_discount_price DECIMAL(9,4) UNSIGNED NOT NULL,
unit_discount_expire_date DATE NOT NULL,
last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (ingredient_type_id) REFERENCES ingredient_type (ingredient_type_id),
FOREIGN KEY (ingredient_brand_id) REFERENCES ingredient_brand (ingredient_brand_id),
PRIMARY KEY (ingredient_id)
)
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci;

配方和成分之间的关​​系表,还跟踪每个配方中成分的数量。

CREATE TABLE recipe_to_ingredient(
recipe_id INT(10) UNSIGNED NOT NULL,
ingredient_id INT(10) UNSIGNED NOT NULL,
amount DECIMAL(9,2) UNSIGNED NOT NULL,
amount_type_id INT(10) UNSIGNED NOT NULL,
FOREIGN KEY (recipe_id) REFERENCES recipe (recipe_id),
FOREIGN KEY (ingredient_id) REFERENCES ingredient (ingredient_id),
FOREIGN KEY (amount_type_id) REFERENCES amount_type (amount_type_id),
PRIMARY KEY (recipe_id, ingredient_id)
)
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci;

现在开始提问:自来水等某些成分不属于品牌或给定价格。有时折扣价格和折扣日期也不会存储,因为它在那个时间点不可用。

你会如何处理?是设计的错吗?我应该存储一个像“undefined”这样的值吗?我应该允许这些字段为空吗?谈到价格,大多数产品(99% 以上)可能毕竟有价格。

自动柜员机还有一个问题,当您只需要 2 分升时,最便宜的配料可能是 5 升容器。但我可以接受,因为它似乎很难用 atm 来弥补。

欢迎任何意见/建议!

最佳答案

水的价格是已知的(至少在第一世界),所以我会使用 $0.00 而不是 NULL。由于您没有连接到基于此列的另一个表,因此混合使用值和 NULL 没有问题。

ingredient_brand 更难,因为您确实想根据此列加入。确实没有品牌,所以我会使用 NULL(因此需要 OUTER JOIN)。

至于批量购买,您可以在他们的个人资料中为用户提供允许这样做的选项(“如果我可以节省 x%...”)。在批量购买之前,您可能还想弄清楚产品的保质期是否较长。

祝你好运。

关于mysql - 食谱数据库,设计问题(mysql,innodb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12722895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com