(моя причина задать этот вопрос основана на начитавшись this answer, что заставило меня пересмотреть свою текущую установку)проектирования базы данных для словаря слов
В настоящее время я занимаюсь разработкой рубина по применению рельсов, в котором есть много языков , каждый из которых имеет словарь базовых слов, прикрепленных к нему, а также список слов, которые сопоставляются с каждым базовым словом. Способ, которым я в настоящее время настроен, есть таблица base_words
, которая содержит base_word
в виде строки, а также language_id
в качестве внешнего ключа. Существует также таблица words
, каждая строка которой содержит строку word
, а также base_word_id
в качестве внешнего ключа. В каждом столбце есть индекс language_id
, хотя я почти уверен, что это лишнее из-за языка_ид на base_word, поэтому я планирую снять его (хотя это может быть плохое предположение с моей стороны).
В целом, в отличие от ответа, который я упомянул в начале, таблицы не разделены языком, потому что я рассуждал о том, что я могу просто вывести языковые слова программно, когда придет время. Тем не менее, мое приложение также будет иметь перевод (ы), связанный с каждым базовым словом (как и с ответом, на который я ссылался), и поэтому я сомневаюсь в своей структуре из-за осознания того, что каждый перевод фактически будет base_word в той же таблице, что и само по себе, что означало бы, что перевод фактически будет просто идентификатором другого базового слова в указанной таблице. Это может быть совершенно нормально, или это может быть не так - я понятия не имею (это мой первый проект программирования).
Это нормально? Нужно ли отделять свои базовые слова на отдельные таблицы для каждого языка, или я могу оставить все это в одной таблице?
Другой пример: мне также нужно хранить много фраз для каждого языка вместе с их переводами. Должен ли я иметь одну таблицу, в которой каждая строка имеет соответствующий перевод фразы или одну таблицу, в которой каждая строка содержит только одну фразу и язык_ид или несколько таблиц (по одному для каждого языка)?
Un Saludo, Майкл
Мысль, провоцируя, на многих уровнях. Отличный ответ. Что касается того, почему фразы нужно обрабатывать по-разному: я не уверен на 100% этого ответа, но я бы сказал, по той же причине, что слова обрабатываются иначе, чем базовые слова: они отображаются в разное время по разным причинам в приложение и хранится с различной информацией. Не говоря уже о том, что фраза состоит из многих слов (в отличие от базовых слов).Однако ваша логика хороша - это та же логика, которая почти заставила меня хранить слова и базовые слова в одной таблице с помощью is_base_word boolean. – michaelsking1993
Вопрос: когда перевод будет работать только в одну сторону ...? Почти по самому определению перевода это не имеет смысла - если он работает одним способом, он определенно работает по-другому в этом конкретном экземпляре. Возможно, не для каждого сценария этого слова, но для конкретного сценария, в котором был сделан перевод, он должен работать - если я не обманываю себя – michaelsking1993