【问题标题】:Good sqlite DB Structure to store and search for synonyms用于存储和搜索同义词的良好 sqlite DB 结构
【发布时间】:2012-11-29 22:52:12
【问题描述】:

我有一个包含单词和描述的数据库表(有点像字典)。这些单词可以有同义词,我想同时搜索单词和同义词,从而得到“主要”单词。实现这一点并使搜索尽可能简单和高效的最佳数据库结构是什么?

例如:一个词可能是“树”和可能的同义词“植物”和“植物”。搜索“植物”时,结果应类似于:

(植物、植被):Blablabla


假设我也想搜索单词描述,这会改变你的答案吗?

域(以防万一)是带有 Sqlite DB 的 Android 应用程序。

附:我看到过诸如Good database and structure to store synonyms 之类的问题,但这更具体一些。

【问题讨论】:

  • 听起来可能是一对一

标签: android database sqlite


【解决方案1】:

类似:

create table descriptions
(
   description_id integer not null primary key,
   content varchar
);

create table words
(
   word varchar not null primary key,
   description_id integer not null,
   foreign key (description_id) references descriptions (description_id)
);

(不是100%关于语法,我不太懂SQLite,不过上面是ANSI SQL)

words 表中具有相同description_id 的每一行都是其他行的同义词。

您可能希望在存储单词之前对其进行“规范化”(全小写、单数等)。

【讨论】:

  • 这种设计有一个缺陷,即无法分辨哪个词是同义词组的“主要”规范词,但可以通过在表词中添加布尔值来解决。另一件事是(正如您在我的示例中看到的)当显示结果时,我想将单词与其同义词分组。我是否错误地假设使用这种设计来实现这一目标会非常低效?
  • @OmarKohl:你没有说你需要一个“主要”词。但如果需要,我也会添加一个布尔标志。我真的不知道 SQLite,但是使用 PostgreSQL 和其他 DBMS,可以使用两个表之间的连接并使用 string_agg() 来检索单词,以便在单个 SQL 中获取逗号分隔的列表。另一种解决方案是简单地发送两个查询。一个用于文字,另一个用于描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多