Sql 多对多?

Sql 多对多?,sql,database,database-design,Sql,Database,Database Design,我有一个很大的Excel表格,请看图片的表格样本。我需要将其传输到MySQL数据库 看起来我已经有了很多很多对很多的桌子。请参见表中DB结构图 无论出于什么原因,它都感觉不对,有没有更好的方法来构建表的DB结构 替代结构: 我会这样安排: Drugs(id, drug_name, drug_date) Ingredients(id, ingredient_type_id, ingredient_name, form) IngredientTypes(id, ingredient_type) Dr

我有一个很大的Excel表格,请看图片的表格样本。我需要将其传输到MySQL数据库

看起来我已经有了很多很多对很多的桌子。请参见表中DB结构图

无论出于什么原因,它都感觉不对,有没有更好的方法来构建表的DB结构

替代结构:


我会这样安排:

Drugs(id, drug_name, drug_date)
Ingredients(id, ingredient_type_id, ingredient_name, form)
IngredientTypes(id, ingredient_type)
DrugIngredients(id, drug_id, ingredient_id, additional_ingredient_id)

药物成分药物是多对一的,药物成分在两个不同的列上是多对多的,成分在成分类型中是多对一的。在配料中,表单列可以是一个。

我没想到会有那么多表。附加成分是否与主要成分不同,是否有各自的优点?或者为什么不只有一张配料表呢?所以我希望有一个按名称和药物id排列的药物表,一个按成分名称和id排列的成分表,一个表格表格类型和表格id,也许还有一个成分类型表。然后你会有一个主药物信息表,它将所有信息与一个日期列放在一起。每个列都有非常特殊的药物成分类型,它的pharmaceutics PLUS将按每个列类型的成分进行搜索,在一个真实的药物表中大约有10种不同的类型。换句话说,不可能混合所有不同类型的成分。非常希望我能清楚地了解情况,我是新来的。所以主要成分和附加成分完全没有重叠?如果是这样的话,那么,一定要把它们分开。但我的其他评论仍然适用。如果有重叠,您仍然可以将它们放在一个表中,甚至可以有一列指示它们在某种程度上是否特殊。但可以肯定的是,一种成分是否是附加成分,取决于它是否出现在药物的附加成分栏中。它不必是一个单独的表。创建您的建议,如果我得到正确的图表,请检查图片。附在这篇文章之后,我也把表单列放到了配料表中。看起来很接近。您的配料表有一个配料列varchar5。那是配料的名字吗?我看不到你提到的表格栏。如果我说得对,我想你错过了表配料中的一个字段配料,但我想我知道了你关于DrugComponents配料的想法。配料在两个不同的栏中是多对多的:多对多按配料id和附加配料id,我在附图中创建了你的变体图。关于枚举类型。对于表单,它只能保存一个值,似乎可以在代码中将集合转换为数组。但这使得搜索表单变得困难。如果我不对,请纠正我。