Я создал приложение для двуязычного словаря , и в настоящее время он очень прост, но мы собираемся начать разработку записей более полно, и я пытаюсь найти лучшую структуру базы данных для него. Предыдущие проекты словарей, над которыми я работал, использовали xml (поскольку словарные записи в основном иерархичны), но мне нужно сделать это с помощью базы данных.Лучший дизайн базы данных для иерархической структуры?
Это то, что характерно, запись средней сложности будет выглядеть (немного упрощен):
ДАР
/DAR/
- существительного
- дом, жилые помещения, жилые помещения
ar-rājl dhul ad-dār: «Человек вошел в дом». - начало
rjaƷna lid-dār, «Мы вернулись домой».
- дом, жилые помещения, жилые помещения
- глагол
- превратить
Dur ли-Yamin, "Поверните направо". - оборачиваться/о
- превратить
Как вы можете видеть, одно слово может иметь несколько частей речи, так что «часть речи» не может быть просто атрибутом Entry, это должно быть связано с чувствами. Каждый pos может иметь множественные чувства (пронумерованные), и, конечно, каждый смысл может иметь несколько близких синонимичных переводов. У чувств могут также быть примерные предложения (возможно, более одного), но не всегда. Думая о том, как части входа связаны друг с другом, я придумал следующую структуру, используя пять таблиц:
Entry
-id
-headword
-pronunciation
-...
PartOfSpeech
-id
-entry (ForeignKey)
-pos
Sense
-id
-sense_number
-part_of_speech (ForeignKey)
-...
Translation
-id
-tr
-sense (ForeignKey)
-...
Example
-id
-ex
-ex_tr
-sense (ForeignKey)
-...
Или, другими словами:
_ Translation
Entry -- PartOfSpeech -- Sense --|
- Example
Это кажется простым и имеет смысл я, но мне интересно, будет ли это слишком сложно в исполнении. Например, чтобы отобразить список записей, мне нужно было бы написать несколько вложенных циклов for
(for e in entries → for p in pos → for s in senses → for tr in translations
) - и все с обратным просмотром!
И я не думаю, что я мог бы даже отредактировать целую запись в администраторе Django (если только это не позволит вам как-то сделать Inline Inline Inline). Я все равно собираюсь создать интерфейс редактора, но приятно иметь возможность проверять вещи на сайте администратора, когда захотите.
Есть ли лучший способ сделать это? Я чувствую, что должно быть что-то умное, что мне не хватает.
Спасибо, Karen
Если вам интересно: tunisiandictionary.org. В своей простой, текущей форме он имеет только две таблицы (Entry, Sense), причем переводы просто разделяются запятой в одном поле. Что плохо.
По двум причинам: 1) потому что это веб-приложение, которое я написал с Python/Django, и 2), потому что я ненавижу xml.
Нет, это не сработает, потому что каждая часть записи будет иметь свои собственные атрибуты. (Возможно, я должен был указать, что приведенный выше пример ввода несколько упрощен.) Например, чувства должны иметь номера, а некоторые из них могут иметь предлоги. Каждое слово перевода также может иметь связанные с ним атрибуты (т. Е. «Датированные», «ненормативная лексика»). И, конечно же, мне нужно будет легко найти часть речи, перевода и т. Д. В целом, то, что я пытаюсь сделать, было бы слишком сложным для такой структуры. – larapsodia
Если это слишком ограничено, у вас должен быть полный дизайн базы данных. Вы можете использовать sqlite, который является легким и легким. Пример дизайна: http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu
Спасибо, например, но, к сожалению, не hablo java. :-) У меня уже есть база данных (я использую Postgres), но мне просто интересно, является ли эта структура для нее логичной/эффективной. – larapsodia