Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 同义词数据库的设计建议_Database Design - Fatal编程技术网

Database design 同义词数据库的设计建议

Database design 同义词数据库的设计建议,database-design,Database Design,我计划建立一个数据库,可以用来查询单词的同义词。数据库最终将变得庞大,所以我们的想法是让事情保持快速运行 我一直在考虑如何做到这一点,但这些天我的数据库设计技能并没有达到要求 我最初的想法是将每个单词存储在一个表中,然后是另一个具有1对多关系的表,其中每个单词可以链接到另一个单词,并且可以查询该表 我正在开发的应用程序允许用户突出显示一个单词,然后键入该单词,或者从数据库中为该单词选择一些同义词。应用程序从用户输入中学习,因此如果有人突出显示“car”并在“motor”中键入,则数据库将更新,以

我计划建立一个数据库,可以用来查询单词的同义词。数据库最终将变得庞大,所以我们的想法是让事情保持快速运行

我一直在考虑如何做到这一点,但这些天我的数据库设计技能并没有达到要求

我最初的想法是将每个单词存储在一个表中,然后是另一个具有1对多关系的表,其中每个单词可以链接到另一个单词,并且可以查询该表

我正在开发的应用程序允许用户突出显示一个单词,然后键入该单词,或者从数据库中为该单词选择一些同义词。应用程序从用户输入中学习,因此如果有人突出显示“car”并在“motor”中键入,则数据库将更新,以链接尚未存在的关系

我不希望用户输入单词“shop”并将其链接到单词car。所以我想我需要给每一段关系增加一些分量

最终,将使用用户输入的同义词,以便他们可以自动选择与某个单词一起使用的常用同义词。重量较轻的文字不会显示出来,所以除非汽车的重量很重,否则商店永远不会成为汽车的同义词,而且很可能没有人会这么做


这听起来对吗?您能提供一些建议或改进吗?

从关系数据库的角度来看,您真正想要的是单词之间的多对多关系,可能还有一些关于这种关系的附加数据

关系表看起来像:

WORD_TABLE
----------
id
word

RELATION_TABLE
--------------
word_1_id
word_2_1d
weight
我构建它的方式是,用户可以投票(向上或向下)各种单词对。这将以一种相当简单的方式为您提供所需的权重。您可能还希望使用来自同义词库或其他类似来源的数据预先填充它,以覆盖已知的同义词,并减少用户的工作量

另外,这种数据结构的另一个术语是加权图


一般来说,关系数据库并不特别擅长对图形进行建模(它们可以做到,但有更好的选择)。您可能希望查看图形数据库(想到Neo4J)作为关系数据库的替代方案。

它似乎是同一实体集中实体内的多对多关系。我会有一个表格来记录所有单词,另一个表格来记录关系。关系表将有两个指向单词表的外键。桌子大概是这样的

Word (w_pk, ....)
Synonym  (fk1_to_w_pk, fk2_to_w_pk, weight)
同义词中添加条目时,必须检查

- fk1_to_w_pk ≠ fk2_to_w_pk
- both (fk1_to_w_pk, fk2_to_w_pk) and (fk2_to_w_pk, fk1_to_w_pk) do not already exist in Synonym

这应该可以很好地工作:

create table suggestions (
    word varchar(255),
    suggestion varchar(255) not null,
    weight float not null default 1.0,
    primary key(word, suggestion, weight)
);
  • 当用户建议某个单词时,您可以使用默认权重将其添加到列表中
  • 当另一个用户建议使用该词时,您会将权重增加1.0
  • 根据至少3次建议的词语生成建议:
    从word=?和重量>3按重量说明订购。

这是什么类型的应用程序?桌面?网状物另外,这是针对一般同义词,还是针对一个特定的领域,其中可能没有常用的同义词表作为基线?我喜欢单词到同义词表的关系。如果键入了一个词而不是选择了一个词,那么只有当关系(“shop”而不是“car”)由X个以上的人键入时,才可能将关系添加到数据库中?这是一个web应用程序@Johnikarr这就是我所想的,输入的越多,它的权重就越大,直到它有足够的权重出现在列表中。这并不能解释同义词部分是如何工作的。