1

私はxmlファイルからこのデータを持っています:

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

これにより、「words」という名前のテーブルが形成されます。このテーブルには、4つのフィールド(「id」、「word」、「meaning」、「translation」)があります。一方、「translation」フィールドにはES、PT、EN、JA、KOなどの複数の言語を含めることができます。そこでテーブルを作成します(「words.translation」、1つのフィールドは「id」、他のフィールドは「id」です)。 1つは、「ES」、「PT」などの言語IDです。

このnewbyの質問については申し訳ありませんが、この1対多の関係についていくつか知りたいと思います。

  1. MySQLでこの2つのテーブルを結合(またはリンク)する方法は?
  2. 「words」テーブルの「translation」フィールドにはどのような情報を保存する必要がありますか?
  3. すべての単語情報を取得するためのSQLクエリはどのように行われますか(JOIN構文が使用されていますか?)

お待ち頂きまして、ありがとうございます。

4

2 に答える 2

1

私は答えようとします...

  1. MySQLでこの2つのテーブルを結合(またはリンク)する方法は?

TRANSLATIONテーブルの「word_id」とWORDテーブルの「id」フィールドの間に外部キー制約を宣言することにより、2つのテーブルをリンクできます。

  1. 「words」テーブルの「translation」フィールドにはどのような情報を保存する必要がありますか?

多くの翻訳があり、提案するデザインには「元の」単語が1つしかないため、リンクは翻訳(多く)から単語(1)になります。リンクは、 1で説明した「word_id」です。
「word、meaning、language」と、翻訳を自己結合するためのmeaning_idを含む単一のテーブルのみを含む別のデザインの方が、複数の翻訳/意味を持つ単語に適している場合があることに注意してください。

  1. すべての単語情報を取得するためのSQLクエリはどのように行われますか(JOIN構文が使用されていますか?)

単語と翻訳の2つのテーブルを想定すると、構文は次のようになります。

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

警告:あなたのデザインは、ある言語から別の言語への翻訳が常にあることを前提としています。Un?-残念ながらそれは真実ではありません。

各単語には、言語ごとに異なる一連の共同意味があります。意味フィールドは、これを認識していることを意味します。


テーブルワード:id | ワード|
    word_idのPKを意味します

テーブル変換word_id | 言語| 単語
    PKon(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

  • テーブルリンク: (WORD_ID | MEANING_ID)
          PK on(WORD_ID、MEANING_ID)説明
    このテーブルは多対多の関係です。1つの単語conは(同じ言語で)複数の意味を持ち、1つの意味は(1つ以上の言語で)複数の単語を持つことができます


異なる言語の「同じ」単語は、同じword_idを持たなくなったことに注意してください

于 2010-03-23T08:31:43.140 に答える