1

我有来自 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”,其他字段那些是诸如“ES”,“PT”,...之类的语言ID。

对于这个新问题,我很抱歉,但我想知道一些关于这种一对多关系的事情。

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

谢谢你的耐心。

4

2 回答 2

1

我会试着回答...

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

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

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

由于您提出的设计中有许多翻译并且只有一个“原始”单词,因此链接将从翻译(许多)到单词(一个),链接是我在1下提到的“word_id” 。
请注意,只有一个包含“单词、含义、语言”和一个用于自连接翻译的含义 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 | 词 |
    在 word_id 上表示PK

翻译word_id | 语言 | word
    PK on (word_id,language), FK word_id -> WORD

于 2010-03-23T06:23:32.807 回答
0

另一种设计,基于我们在我之前回答的评论中的讨论:

  • WORD: (WORD_ID | WORD | LANGUAGE)
          PK on (WORD_ID)

  • MEANING:(MEANING_ID | MEANING)
          在 MEANING_ID 上的 PK

  • Table LINK: (WORD_ID | MEANING_ID)
          PK on (WORD_ID,MEANING_ID) 说明
    表是多对多关系。一个词有多种含义(在同一种语言中),一种含义可以有多个词(在一种或多种语言中)


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

于 2010-03-23T08:31:43.140 回答