在SQLite中的数据库中创建两个表之间的关系

时间:2018-07-05 06:49:40

标签: c# database sqlite

这是我的第一个问题,我希望这是一个适当的问题。由于我对数据库的了解有限,因此我不知道正确的术语,也找不到我想要的东西。

我决定为移动平台开发字典应用程序,因为我知道的两种语言之间没有任何应用程序。我想做的是在两个表上的项目之间创建关系或链接。在如此简单的任务上,我找不到可行的方法。我正在使用SQLite3在Visual Studio的Xamarin.Forms上开发我的应用程序。

我有两个具有以下简单模型的语言单词/短语表。

ID | Word
1    X
2    Y
3    Z

例如,当我在语言1 中搜索词 house 时,我想在语言2 上获取每个具有相关性的词/ link到房屋。结果可能只有一个单词或多个单词。

我对此主题进行了一些研究,但现在迷路了。我在SQLite中找到了ForeignKey,但是它只定义了一种关系,在这种情况下,我可能需要3个或4个具有不同单词的关系。我曾考虑过要在单词之间创建另一个关系表,但是从长远来看,当我需要在填充数据库时添加或删除单词时,该表将无法正常工作。用ForeignKeys或ID匹配更改/编辑关系将非常困难。

我的问题是,是否有一个平台/应用程序,可以直接查看它们之间的关系并进行更改而无需担心ID或ForeignKeys?没有花哨或超级详细。我只希望能够通过使用文字而不是数字(ID)来编辑我的关系。我知道在后台所有内容都将在ID中。

谢谢!

修改

我决定像这样改变我的模型。

语言1

ID | Word | Meanings
1    X      A
2    Y      B
3    Z      C, D

语言2

ID | Word | Meanings
1    A      X
2    B      Y
3    C      Z
4    D      Z

在代码中,我将实现一种将“含义”拆分为字符串列表并在其他表的“单词”字段中进行搜索的方法。这样,我将无法为同形异义词创建不同的条目(相同的拼写,不同的含义),但是比ID匹配更容易。

1 个答案:

答案 0 :(得分:1)

我也会用所有单词及其所属的语言制作一张桌子。在第二张表中,您可以定义可以使用的语言。在第三个表格中,您可以通过匹配2个单词来放置翻译。

我建议将关系与id字段上的外键匹配。如果一个单词以一种以上的语言存在(如果您不希望将一种语言中具有1种以上含义的单词分开),则使用单词作为标识符会给该设计带来问题。您可以在word / languageId组合上创建唯一索引。如何创建它们取决于您使用的技术。普通SQL,实体框架等。

WordTable

  • id
  • 单词
  • languageId-LanguageTable.Id上的外键

翻译表

  • id
  • wordOriginalid-WordTable.Id上的外键
  • wordTranslationId-WordTable.Id上的外键

语言表

  • id
  • 语言代码