2015-02-04 2 views
0

Я разрабатываю базу данных для перевода нескольких языков. Отдельное слово может иметь более одного слова на другом языке (например, синонимы слова).Многоязычный перевод

Например, слово a (in язык1) -> слово b & c (на языке 2). Оба правильные. Мне нужно сохранить все слова в базе данных. Я исследовал ann found Schema for a multilanguage database.

Но проблема в том, что я столкнулся с множеством картографических данных в моих словах. Я также упомянул Good database and structure to store synonyms. В настоящее время это мой дизайн базы данных

CREATE TABLE Language1 (
    Word_number int, 
    Word int, 
    other char(10) 
) 
CREATE TABLE Language2 (
    Word_number int, 
    Word int 
    other char(10) 
) 
CREATE TABLE Language3 (
    Word_number int, 
    Word int, 
other char(10) 
) 
CREATE TABLE Linkwords (
    Language1_Word_number int, 
    Language2_Word_number int, 
    Language3_Word_number int 
) 

Хотя язык таблица выглядит аккуратно. Таблица ссылок беспорядочна.
Например, если language3 имеет 3 слова для того же слова в языке 1 & 2 записей в таблице выглядит как

1 1 1,1 1 2, 1 1 3,... 

Может кто-нибудь пожалуйста, предложить лучший дизайн?

ответ

1

Как я проектировал бы это следующим образом:

Words 
id // primary key 
word // the word itself 

Languages 
id // primary key 
langname 

LangWords 
word_id // joint primary key 
lang_id // joint primary key 
langword 

В таблице языков будет иметь записи, как этот

+----+-------------+ 
| id | langname | 
+----+-------------+ 
| 1 | French  | 
| 2 | Italian  | 
| 3 | German  | 
+----+-------------+ 

Давайте предположим, что мы хотим сохранить слово «красный». В таблицах «слова», id = 1, слово = «красный».

Там будет три записи в таблицах «langwords»

+---------+---------+-----------------+ 
| word_id | lang_id | langword  | 
+---------+---------+-----------------+ 
| 1  | 1  | rouge   | 
| 1  | 2  | aldo   | 
| 1  | 3  | rot    | 
+---------+---------+-----------------+ 

Количество записей в «langwords» должно быть числом слов раза числа языков. Вышеупомянутая структура позволяет легко получить доступ ко всем словам на данном языке или к одному и тому же слову на каждом языке.

+0

Спасибо за ваш ответ. Я не уверен, как ваш проект базы данных решает проблему многих и многих отношений в моем вопросе. Например, у меня есть другое слово для красного цвета на итальянском языке: «xyz». Как я буду вводить это в текущую таблицу «langwords». Строка типа 1,2, xyz не будет удовлетворять первичному значению ключа. Не могли бы вы помочь мне в этом вопросе – user987743

+1

@ user987743: если имеется более одного перевода, соответствующего исходному слову, вам нужно будет добавить другое ключевое поле в таблицу «langwords» (здесь называется «уровень»). Таким образом, вы могли бы использовать «langwords» кортеж (1,2,1, «aldo») и (1,2,2, «rosso»). Я всегда думал, что «альдо» по-итальянски означает «красный» на английском, но Google Translate говорит, что нет. –

Смежные вопросы