gpt4 book ai didi

mysql - "many to many to many"关系

转载 作者:搜寻专家 更新时间:2023-10-30 22:31:04 26 4
gpt4 key购买 nike

我有一个简单的化妆品数据库。每个产品可能包含多种成分。因此它是一个简单的多对多关系,目前我有一个这样的数据库:

CREATE TABLE `products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` TEXT NOT NULL,
PRIMARY KEY (`id`),
);

CREATE TABLE `ingredients` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` TEXT NOT NULL,
PRIMARY KEY (`id`),
);

CREATE TABLE `ingredient_to_product` (
`ingredient_id` INT UNSIGNED NOT NULL,
`product_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`ingredient_id`, `product_id`),
INDEX (`product_id`)
);

但是,某些成分可以有许多不同的名称。例如:“LINALOOL ESSENTIAL OIL”、“LINALYL ALCOHOL”和“3,7-DIMETHYL-1,6-OCTADIEN-3-OL”指的是同一种成分。

当我展示一种产品时,我希望保留产品标签上的成分名称。因此,在一种产品的情况下,它将是“LINALYL ALCOHOL”,而在另一种产品的情况下,它可能是其他东西,但指的是相同的成分。

现在我想通过指定产品名称之一或 ID 来查询数据库中产品的所有名称,但是一个 ID 怎么可以引用多个名称呢?我是否必须保留两个表格:一个用于一般特定成分,另一个表格仅用于名称(许多名称与一种成分的关系)?有没有更好的办法?

最佳答案

成分

  • ID (int) (pkey) (ai)
  • 姓名 (varchar)

同义词

  • ID (int) (pkey) (ai)
  • IngredientID (int)(外键映射到:Ingredients.ID)
  • 姓名 (varchar)
  • Flag(可选;示例值:IUPAC NameCommon NameSpanish Name、... )

是的,对于您描述的规则,您将至少有一个主名称,然后是一个使用 Ingredients.ID

的同义词表

我还引入了一个 Flag 字段,这样您就可以通过编程方式选择何时使用同义词,而不是一直对它进行硬编码。例如,如果您要发布标记为 工业化学品 的产品,它会被编程为提取 IUPAC* 名称

*IUPAC 指的是命名化学品的约定,特化学家几乎总是使用它,但几乎从未在消费超市中使用过:http://www.chem.uiuc.edu/GenChemReferences/nomenclature_rules.html

关于mysql - "many to many to many"关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43102205/

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