为具有多个名称的项目设计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数据库的主要内容,如果未能解决你的问题,请参考以下文章

具有变体数据类型的 SQL 数据库设计 [关闭]

表设计与SQL优化

SQL 查找具有多个引用的行

sql server 2005实现树形菜单显示的数据库表怎么设计?

SQL 数据库设计指南

将多个 SQL Server 表合并为一个