我正在创建一个在线词典,为此我必须使用三个不同的词典:日常术语、化学术语、计算机术语。我有树选项:
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.
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.
一个术语可以与一个或多个词典相关,但有不同的定义,假设一个日常使用的术语可能与 IT 领域中的同一个术语不同。这就是为什么可以为 term1(在我的最后一个)表分配两个标签 - dic_1
(id 1)和 dic_2
(id 5)。
以后我会增加更多的词典,所以dic可能会超过三个。我想如果我使用选项 2(带有额外的列),我将来会得到一个表和许多列。我不知道这是否对性能不利。
在我的案例中,哪个选项是最好的方法?哪个更快?为什么?非常感谢任何建议和其他选项。
谢谢。
最佳答案
2) Create one table with extra column
您绝对不应该使用第二种方法。如果将来您决定要 10 部词典怎么办?您将不得不创建额外的 10 列,这太疯狂了..
您应该做的是为所有词典创建一个单个表,为所有术语创建一个单个表和一个单个表对于您的所有定义,您的所有数据都以一种合乎逻辑的方式组合在一起。
然后您可以为每个词典创建一个唯一的 ID,在术语表中引用该 ID。然后,您只需要一个简单的查询即可获取特定词典的术语。
关于MySQL数据库结构: more columns or more rows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819692/