дизайн базы данных для применения в словаре - PullRequest
10 голосов
/ 21 января 2011

В настоящее время я хотел бы разработать словарное приложение для мобильного устройства. Сам словарь использует автономный файл / базу данных для перевода слова. он просто переводит для двух языков, например, англо - испанский словарь. У меня в голове простой дизайн. это будет две таблицы: английская и испанская. для каждой таблицы содержится:

  • word_id = идентификатор, который будет внешним ключом для другой таблицы
  • слово = слово
  • word_description
  • respon_trans_id = идентификатор другой таблицы, которая является переводом этого слова на другой язык.

, а также из-за этого для мобильных приложений, базы данных используют SQLite.

Данные определения для каждой таблицы предоставлены в порядке по полю 'word' в таблице. Однако я все еще думаю о проблеме, если есть дополнение для определения данных. Поскольку таблица будет упорядочена по полю 'word' , есть ли способ поместить (вставить) новую запись, по-прежнему упорядоченную по слову? или есть идея сделать его более эффективным?

Ответы [ 4 ]

15 голосов
/ 21 января 2011

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

ENGLISH
ID | WORD
1  | 'dictionary'

GERMAN
ID | WORD
1  | 'lexikon'
2  | 'wörterbuch'

TRANSLATION_EN_DE
ID_EN | ID_DE
1     | 1
1     | 2

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

вы также можете объединить ваши языковые таблицы в одну таблицу, определяющую язык слов по другому столбцуязыковая таблица).в этом случае вам понадобится индекс из двух столбцов для языка и самого слова.

3 голосов
/ 21 января 2011

Что вы собираетесь делать, когда слово на языке 1 может быть переведено более чем на одно слово на языке 2?Я думаю, что для этого вам нужно использовать что-то вроде дизайна wursT.

RE вставка записей в алфавитном порядке: Обычно вы не беспокоитесь о физическом порядке записей в базе данных.Вы используете предложение ORDER BY, чтобы получить их в любом желаемом порядке, и индекс, чтобы сделать его эффективным.В стандарте SQL нет ничего для контроля физического порядка.Хм, я помню, что сталкивался с чем-то, касающимся принудительного физического упорядочения в какой-то базе данных, с которой я работал, я думаю, что это был MySQL, но большинство не даст вам никакого контроля над этим.Я не работал с SQLite, поэтому не могу сказать, предоставляет ли он способ.

1 голос
/ 21 января 2011

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

0 голосов
/ 21 января 2011

Я согласен с Мэттом - чтобы сделать жизнь намного проще, я бы придерживался одного стола.Также, если вы планируете использовать CoreData, моделирование индекса традиционного дизайна базы данных отличается от модели на основе графов объектов при работе в Obj.С / IOS.

Очень легко думать по традиционным направлениям запросов Select и внутренних / внешних объединений, но, например, ваш столбец «respon_trans_id »обычно обрабатывается установкой отношения при определении модели данных для двух таблиц.(если вы используете CoreData, конечно).

По сути, если нет веской причины иметь две таблицы, я бы придерживался только одной.

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

Снова используя CoreData, NSFetchRequest и NSSortDescriptor, очень легко вернуть набор записей, упорядоченных по указанному столбцу, что избавит вас от необходимости беспокоиться об изменениях и дополнениях в вашей базе данных.

Если у вас есть какие-либо вопросы, дайте мне крик.

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