Задача казалось бы тривиальная, нечто вроде русско-английского словаря, с категориями. Нужно хранить в БД слова русские [Ruword], английские [Enword]. И слова разделены по категориям [Categories]. Есть указанные сущности(модели). Русские слова могут иметь несколько английских значений, и наоборот. Например "работа" -> (job, work) и наоборот job->(работа, труд, и тп). Связь Many-to-many. И есть категории к которым принадлежат слова (и русские и английские). В свою очередь у одного слова может быть несколько категорий, и у одной категории может быть много слов (Ruword, Enword). Кое-как получилось сделать это с помощью полиморфной связи,
Ruword
id - integer
value - string
products
id - integer
value - string
Categories
id - integer
runame - string
enname - string
word_id - integer
word_type - string
где word_id - ID слова из Ruword или Enword
word_type - строковое значение модели к которому слово относится ('App\Ruword' или 'Enword').
Собственно смущает что в таблице категорий много дублирования самих категорий.
т.е. записи выглядят примерно следующим образом:
Categories
ID runame enname word_id word_type
1 Путешествия Travel 4 'App\Ruword'
2 Путешествия Travel 8 'App\Enword'
3 Путешествия Travel 5 'App\Enword,
4 Путешествия Travel 12 'App\Enword'
т.е. хотелось бы чтобы категрии не дублировались а одна категория была уникальной и содержала все слова(id) и Ruword и Enword.
Как можно изменить схему, и как хранить. Кто-нибудь сталкивался с разработкой словариков, мобильных или десктоп приложений словарей иностранных (два языка), или тестов по английскому языку. Подскажите пожалуйста в каком направлении искать организацию и схему БД для таких приложений, как хранить или как можно упростить задачу. По сути требуется слова двух языков, и категории, связи я описал выше. Т.е. везде многие ко многим. Заранее признателен за советы.