Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Я начал изучать программирование (мне 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) как получать нужные мне пары из двух слов?
Помогите. Я уже полтора месяца сам вожусь в никуда. Заранее спасибо.
Неактивен
Разделитель - это очень плохая практика в РСУБД.
Логично выглядит как сделать
Справочник языков
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
Чтобы разобраться с тем, куда класть синонимы нужно лучше представлять вашу исходную задачу.
Чего вообще хотите-то? Как пользоваться?
Неактивен
мне необходимо из этой базы получить пары на разных языках означающих одно и тоже. в данном случае
1 | черный | кот
3 | black | cat
-----------------------
1 | черный | кот
5 | noir | chat
------------------------
3 | black | cat
5 | noir | chat
-----------------------
2 | red | dog
6 | красная| собака
причем именно пары слов. вот такая странная задача
Неактивен
Структура базы Вам дана "сверху" или Вы сами её проектируете?
Неактивен
Программку я пишу для себя и такую структуру я выбрал сам. Возможно она не правильная, т.к. у меня не хватает опыта и знаний в 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
Неактивен
В дополнение к той структуре, что приведена в
https://sqlinfo.ru/forum/viewtopic.php?pid=48651#p48651
для синонимов можно накинуть табличку
synonyms
id(просто счётчик) word_id lang_id val
тем самым схема будет описывать словарь.
Неактивен