Как связать таблицу с полем на сервере MySQL - PullRequest
1 голос
/ 23 марта 2010

У меня есть эти данные из 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", "смысл" и "перевод"). С другой стороны, поле «перевод» может содержать несколько языков, таких как ES, PT, EN, JA, KO и т. Д. Итак, я создаю таблицу («words.translation», одно поле - «id», а другие - это идентификаторы языков, такие как "ES", "PT", ...).

Прошу прощения за этот новый вопрос, но я бы хотел кое-что узнать об отношениях один-ко-многим.

  1. Как объединить (или связать?) Эти две таблицы в MySQL?
  2. Какую информацию хранит поле «перевод» в таблице «слова»?
  3. Как в SQL-запросе получить всю информацию о слове (используется синтаксис JOIN?)

Спасибо за ваше терпение.

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Я постараюсь ответить ...

  1. Как объединить (или связать?) Эти две таблицы в MySQL?

Вы можете связать две таблицы, объявив ограничение внешнего ключа между 'word_id' в таблице TRANSLATION и полем 'id' в таблице WORD.

  1. Какую информацию должно хранить поле «перевод» в таблице «слова»?

, поскольку в предложенном вами дизайне имеется много переводов и только одно «оригинальное» слово, ссылка будет с перевода (много) на слово (одно), ссылка - это «слово_идентификатора», которое я упомянул под 1 .
Обратите внимание, что другой вариант с одной единственной таблицей, содержащей слово, значение, язык и смысл_ид для самостоятельных переводов, может быть лучше для слов с несколькими переводами / значениями.

  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)

предостережение: ваш дизайн предполагает, что всегда будет возможность перейти на один перевод с одного языка на другой. К сожалению, это не так.

Каждое слово имеет набор совместных значений, которые отличаются от языка к языку, ваше поле значения подразумевает, что вы знаете об этом.


Таблица СЛОВО : id | слово | значение
PK на word_id

Таблица ПЕРЕВОД word_id | язык | слово
ПК включен (word_id, язык), FK word_id -> WORD

0 голосов
/ 23 марта 2010

альтернативный дизайн, основанный на нашем обсуждении в комментариях к моему предыдущему ответу:

  • Таблица WORD: (WORD_ID | WORD | ЯЗЫК)
    ПК включен (WORD_ID)

  • Таблица ЗНАЧЕНИЕ: (MEANING_ID | MEANING)
    ПК на MEANING_ID

  • Таблица ССЫЛКА: (WORD_ID | MEANING_ID)
    PK on (WORD_ID, MEANING_ID)
    Desciption Эта таблица является отношением многих ко многим , Одно слово con имеет несколько значений (на одном языке), а одно значение может иметь несколько слов (на одном или нескольких языках)


Обратите внимание, что «одно и то же» слово в разных языках больше не несет одно и то же слово_id

...