为具有多个名称的项目设计SQL数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为具有多个名称的项目设计SQL数据库相关的知识,希望对你有一定的参考价值。
我正在创建一个膳食补充剂表,其中补充剂可以有许多成分。
我无法设计成分表。问题是一种成分可以有许多名称或首字母缩略词。
例如,维生素B1具有硫胺素和硫胺素等其他名称。缩写BHA可以代表丁基羟基茴香醚和β羟基酸(这实际上是护肤品的一种成分,但我仍在使用它,因为它是一个很好的例子)。
我也关注间距和“ - ”。例如,有人可以在没有间距的情况下拼写维生素A,有人可以写维生素A.此外,β羟基酸也可以写成β-羟基酸(含“ - ”)或β羟基酸(不含“ - ”)。
我想到的是2个选项)
1)使用分号将一个成分的所有名称放在一列中以区分名称。例如)β羟基酸; BHA;β-羟基酸;β羟基酸 - 这很容易但我不确定当我必须执行搜索操作时这是否是设计数据库的聪明方法等。
2)为所有名称创建一个表,并将其与成分表相关联。 - 这是我倾向于的选择,但我想知道是否有更好的方法来做到这一点。我是否必须为相同的项目创建单独的行,并且间距和“ - ”不同?
将'name'的映射表设为'canonical_name'(或id)。它会像行一样
Thiamine vitaminB1
thiamin vitaminB1
vitaminB1 vitaminB1
B1 vitaminB1
通过使用以_ci
结尾的排序规则,您无需担心大小写。
当摄取数据以获得补充时,首先查找qazxsw poi以获得qazxsw poi,然后在任何其他表中使用后者。
在那个2列表中,有
name
这样你就可以去任何一个方向。
创建一个成分和补充表格,并制作一个表格成分和补充相同的列,如果你想选择加入它们
它可能是这样的:
canonical_name
或者您可以添加将成为主要名称的Ingredient.Name,然后取消IngredientName.IsMain。
对于空格,您应该在应用程序中使用一些名称规范化,例如删除连续空格,大写,标注逗号,破折号等空格。当然,如果您愿意,可以在触发器中对数据库应用此类规范化。
还有其他一些可能性。
您应该首先考虑使用数据库的用户案例。这是非常重要的。没有'最好的通用数据库设计'。如果您需要一些特殊的搜索案例,您可能需要特殊的数据库设计或至少索引。
附:我认为将不同的名字放在一个字段中作为分隔值的东西是个坏主意
以上是关于为具有多个名称的项目设计SQL数据库的主要内容,如果未能解决你的问题,请参考以下文章