SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.05.2021 09:58:08

Mihailo79
Участник
Зарегистрирован: 27.05.2021
Сообщений: 3

Помогите начинающему

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

Дана таблица двойных слов на иностранных языках:

id_sl |  slovo1  |  slovo 2
1     | черный  |    кот
2     | red       |    dog
3     | black    |     cat
4     | black    |    dog
5     | noir     |    chat           <--черный кот на французском
6     | красная|    собака
и т.д

мне необходимо из этой базы получить пары на разных языках означающих одно и тоже. в данном случае
1     | черный  |    кот
3     | black     |     cat
-----------------------
1     | черный  |    кот
5     | noir       |    chat 
------------------------
3     | black     |     cat
5     | noir       |    chat 
-----------------------
2     | red       |    dog
6     | красная|    собака

в начале я решил создать базу данных "синонимов" слов на разных языках
id |  russian  |  english  |  french  |  german
1  |   кот     |    cat     |   chat    |   kater
2  |  собака |    dog     |  chien  |    hund
3  |  черный |  black     |  noir   |  schwarze
и т.д.

потом обнаружил что одно значение в языке тоже может иметь синонимы (собака и собачка например), и я стал записывать в ячейку через разделитель "|" :
2  |  собака|собачка |    dog     |  chien  |    hund
и потом значение этой ячейки я разделяю на массив строк и сравниваю в цикле

в общем у меня образовался тройной цикл который работает ОЧЕНЬ-ОЧЕНЬ-ОЧЕНЬ долго

1) как правильно организовать базу синонимов слов с учетом разных вариантов слова?
2) как получать нужные мне пары из двух слов?

Помогите. Я уже полтора месяца сам вожусь в никуда. Заранее спасибо.

Неактивен

 

#2 27.05.2021 15:17:27

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите начинающему

Разделитель - это очень плохая практика в РСУБД.

Логично выглядит как сделать
Справочник языков

langs
id name
1  русский
2  английский
3  французский

справочник слов (на базовом языке, на русском (ну или другой в вашем случае))
words
id word
1  стол
2  стул

справочник переводов
translates
word_id lang_id val
1           2          table
2           2          chair
1           1          tableau
2           1          chaise

Чтобы разобраться с тем, куда класть синонимы нужно лучше представлять вашу исходную задачу.
Чего вообще хотите-то? Как пользоваться?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 27.05.2021 15:22:08

Mihailo79
Участник
Зарегистрирован: 27.05.2021
Сообщений: 3

Re: Помогите начинающему

мне необходимо из этой базы получить пары на разных языках означающих одно и тоже. в данном случае
1     | черный  |    кот
3     | black     |     cat
-----------------------
1     | черный  |    кот
5     | noir       |    chat
------------------------
3     | black     |     cat
5     | noir       |    chat
-----------------------
2     | red       |    dog
6     | красная|    собака

причем именно пары слов. вот такая странная задача

Неактивен

 

#4 27.05.2021 15:28:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите начинающему

Структура базы Вам дана "сверху" или Вы сами её проектируете?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 28.05.2021 07:42:48

Mihailo79
Участник
Зарегистрирован: 27.05.2021
Сообщений: 3

Re: Помогите начинающему

Программку я пишу для себя и такую структуру я выбрал сам. Возможно она не правильная, т.к. у меня не хватает опыта и знаний в SQL.

Таблица пар слов постоянно изменяется. Мне пришла идея, добавить в таблицу пар колонки id_slovo1 и id_slovo2
в которых будет указан id из таблицы Синонимов. Эти id я могу заполнять функцией при изменении таблицы пар.
Поэтому задача сводится найти все группы в которых значения id_slovo1 и id_slovo2 ОДНОВРЕМЕННО РАВНЫ.
id_sl | id_slovo1 | id_slovo 2
1     | 3         | 1
2     | 4         | 2
3     | 3         | 1
4     | 3         | 2
5     | 3         | 1
6     | 4         | 2
и т.д

Надо получить такой массив:
1 | 3| 1
3 | 3| 1
-----------------------
1 | 3| 1
5 | 3| 1
------------------------
3 | 3| 1
5 | 3| 1
-----------------------
2 | 4| 2
6 | 4| 2

Неактивен

 

#6 28.05.2021 12:56:36

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите начинающему

В дополнение к той структуре, что приведена в
https://sqlinfo.ru/forum/viewtopic.php?pid=48651#p48651
для синонимов можно накинуть табличку

synonyms
id(просто счётчик) word_id lang_id val

тем самым схема будет описывать словарь.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson