我从 xml 文件中获取了以下数据:

<?xml version="1.0" encoding="utf-8" ?>
<words>
    <id>...</id>
    <word>...</word>
    <meaning>...</meaning>
    <translation>
        <ES>...</ES>
        <PT>...</PT>
    </translation>
</words>

这形成了名为“words”的表,该表有四个字段(“id”、“word”、“meaning”和“translation”)。另一方面,“翻译”字段可以包含多种语言,如 ES、PT、EN、JA、KO 等......所以我创建了一个表(“words.translation”,一个字段是“id”,其他字段是语言 ID,如“ES”、“PT”...)。

对于这个新手问题,我感到很抱歉,但我想了解有关这种一对多关系的一些事情。

  1. 如何在 MySQL 中连接(或链接?)这两个表?
  2. “words”表中的“translation”字段要存储什么信息?
  3. sql查询如何获取所有单词信息(使用JOIN语法?)

谢谢你的耐心。

有帮助吗?

解决方案

我会尝试回答...

  1. 如何在 MySQL 中连接(或链接?)这两个表?

您可以通过声明链接两个表 外键约束 TRANSLATION 表中的“word_id”和 WORD 表中的“id”字段之间。

  1. “words”表中的“translation”字段要存储什么信息?

由于有很多翻译,并且您提出的设计中只有一个“原始”单词,因此该链接将从翻译(许多)到单词(一个),该链接是我在下面提到的“word_id” 1.
请注意,只有一个表包含“单词、含义、语言”和用于自连接翻译的meaning_id的不同设计,对于具有多个翻译/含义的单词可能会更好。

  1. sql查询如何获取所有单词信息(使用JOIN语法?)

假设有两个表,单词和翻译,语法是

select w.word, w.meaning, t.language, t.word 
  from WORD as w
  join TRANSLATION as t 
    on (w.id = t.word_id)

警告: 您的设计假设总是存在从一种语言到另一种语言的一对一翻译。嗯?——幸运的是这不是真的。

每个单词都有一组不同语言之间不同的共同含义,您的含义字段意味着您已经意识到这一点。


桌子 单词:编号 |文字 |意义
对word_id进行PK

桌子 翻译 word_id |语言 |词
PK (word_id,语言), FK word_id -> WORD

其他提示

一个替代设计,基于我们在我之前的答案的评论中的讨论:

  • 桌子 单词: (WORD_ID | 单词 | 语言)
    PK (WORD_ID)

  • 桌子 意义: (MEANING_ID | 含义)
    对 MEANING_ID 进行 PK

  • 桌子 关联: (WORD_ID | MEANING_ID)
    PK (WORD_ID,MEANING_ID)
    描述 该表是多对多关系。一个单词 con 有多种含义(在同一种语言中),一种含义可以有多个单词(在一种或多种语言中)


请注意,不同语言中的“相同”单词不再带有相同的 word_id

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top