MySQL数据库结构:更多列还是更多行?

Ant*_*ony 1 mysql database-design data-structures

我正在创建一个在线词典,我必须为此目的使用三种不同的词典:日常术语,化学术语,计算机术语.我有树选项:

1)创建三个不同的表,每个字典一个表

2)创建一个包含额外列的表,即:

id    term    dic_1_definition    dic_2_definition    dic_3_definition
----------------------------------------------------------------------
1     term1   definition
----------------------------------------------------------------------
2     term2                       definition
----------------------------------------------------------------------
3     term3                                           definition
----------------------------------------------------------------------
4     term4                       definition
----------------------------------------------------------------------
5     term5   definition                              definition
----------------------------------------------------------------------
etc.
Run Code Online (Sandbox Code Playgroud)

3)创建一个带有额外"标签"列的表,并根据它的字典标记我的所有术语,即:

id    term     definition    tag
------------------------------------
1     term1    definition    dic_1
2     term2    definition    dic_2
3     term3    definition    dic_3
4     term4    definition    dic_2
5     term1    definition    dic_2
etc.
Run Code Online (Sandbox Code Playgroud)

术语可以与一个或多个词典相关,但具有不同的定义,假设日常使用中的术语可能与IT领域中的术语不同.这就是为什么term1(在我的上一个)表中可以分配两个标签 - dic_1(id 1)和dic_2(id 5).

将来我会添加更多的词典,所以可能会有三个以上的词典.我想如果我将使用选项2(带有额外的列),我将来会得到一个表和许多列.我不知道它是否对性能有害.

在我的情况下,哪种选择是最好的方法?哪一个更快?为什么?非常感谢任何建议和其他选择.

谢谢.

Jam*_*win 6

2)创建一个带有额外列的表

你绝对不应该使用第二种方法.如果您将来决定要10个词典,该怎么办?你将不得不创建另外10列疯狂..

你应该做的是建立一个单一的针对所有字典表,一个单一的所有术语表和一个单一的所有定义的表,这样的逻辑喜好所有的数据集合在一起.

然后,您可以为每个词典创建唯一的ID,在术语表中引用.然后,您只需要一个简单的查询来获取特定字典的术语.


Teb*_*ebo 5

我认为你应该为你的字典类型找一个查找表

DictionaryType(DTId,DTName)

为您提供另一张表格

条款(TermID,TermName)

然后你的定义

差异(DifinitionId,TermID,定义,DTId)

这应该工作.