Создание связей между двумя таблицами в базе данных в SQLite - PullRequest
0 голосов
/ 05 июля 2018

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

Я решил разработать приложение-словарь для мобильных платформ, поскольку между двумя языками, которые я знаю, нет ни одного. То, что я хотел бы сделать, это создать отношения или ссылки между элементами на двух таблицах. Я не мог найти выполнимый метод для такой простой задачи. Я разрабатываю свое приложение на Xamarin.Forms в Visual Studio с SQLite3.

У меня есть две таблицы для слов / фраз на языке со следующей простой моделью.

ID | Word
1    X
2    Y
3    Z

Например, когда я ищу слово house на Language 1 , я бы хотел получить каждое слово на Language 2 , которое имеет отношение / ссылку на дом . Результат может содержать только одно слово или несколько слов.

Я провел небольшое исследование на эту тему, но сейчас заблудился. Я нашел ForeignKey в SQLite, но он определяет только одно отношение, где мне могут понадобиться 3 или 4 отношения с разными словами. И я подумал о создании еще одной таблицы отношений между словами, но в долгосрочной перспективе это не сработает, когда мне нужно будет добавить или удалить слова при заполнении базы данных. Будет очень сложно изменить / отредактировать отношения с помощью ForeignKeys или сопоставления идентификаторов.

У меня вопрос: есть ли платформа / приложение, где я могу видеть отношения напрямую и изменять их, не беспокоясь об идентификаторах или ForeignKeys? Ничего особенного или супер подробного. Я просто хочу иметь возможность редактировать свои отношения, работая со словами, а не числами (идентификаторами). Я знаю, что в фоновом режиме все будет в идентификаторах.

Заранее спасибо!

Редактировать

Я решил изменить свою модель следующим образом.

Язык 1

ID | Word | Meanings
1    X      A
2    Y      B
3    Z      C, D

Язык 2

ID | Word | Meanings
1    A      X
2    B      Y
3    C      Z
4    D      Z

В коде я буду реализовывать метод, чтобы разделить «Значения» на список строк и искать их в поле «Слово» другой таблицы. Таким образом, я не смогу создавать разные записи для гомографий (одинаковое написание, другое значение), но это будет проще, чем сопоставление идентификаторов.

1 Ответ

0 голосов
/ 05 июля 2018

Я бы сделал таблицу со всеми словами и языком, к которому они принадлежат. Во второй таблице вы можете определить языки, которые вы можете использовать. А в третьей таблице вы можете поместить переводы, сопоставив 2 слова.

Я предлагаю сопоставить отношения с внешним ключом в поле id. Использование слов в качестве идентификатора вызовет проблемы с этим дизайном, если слово существует в более чем одном языке (если вы не хотите разделять слова с более чем 1 значением в языке). Вы можете создать уникальный индекс для комбинации word / languageId. То, как вы их создадите, зависит от технологии, которую вы используете. Простой SQL, Entity Framework и т. Д.

WordTable

  • ID
  • слово
  • languageId - внешний ключ для LanguageTable.Id

TranslationTable

  • ID
  • wordOriginalid - Внешний ключ в WordTable.Id
  • wordTranslationId - внешний ключ в WordTable.Id

LanguageTable

  • ID
  • LanguageCode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...