Как лучше организовать словарь синонимов?

Допустим у нас есть список животных.
Пускай

CREATE TABLE animals(
id int UNIQUE PRIMARY KEY,
animal text
);

И у нас есть животное "собака", у неё есть инварианты и синонимы: "пёс","dog","собчака" и т.п.
Как лучше реализовать хранение синонимов?

1. Для каждого значения создавать таблицу синонимов.
Самый глупый как мне кажется вариант. Так как будет у меня 10к животных, и под каждое придётся создать по таблице.

2. Создать дополнительное поле, где для каждого значения будут хранится одновременно все синонимы и инварианты.
Видимо это должно быть text'овое поле. Потому что другого подходящего типа данных я не нашёл. Тогда сразу встаёт вопрос как быть с апдейтом строки, когда я нахожу новый инвариант.

3. Создать дополнительное поле, в котором будет хранится только 1 инвариант для каждого значения. То есть что-то вроде:

id name synonym
------------------------
1 собака dog
2 собака пёс
3 собака собачка
...

В таком виде мне кажется таблица будет захламляться лишней информацией. Так как не зачем хранить дубликаты имени. И получается если надо добавить 100 животных и у каждого по 100 синонимов, то это аж 10к строк.

Подскажите, пожалуйста, как лучше поступить. Возможно есть какой-то 4й более удобный вариант?

Спасибо за внимание!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Единственный нормальный

Единственный нормальный способ - это:

таблица animals
id | animal
--------------------
1 | собака

таблица aliases
aid | id | alias
--------------------
1 | 1 | пёс
2 | 1 | собачка
3 | 1 | dog

т.е. в таблице aliases поле id является FOREIGN KEY для id из таблицы animals
Список алиасов легко получается через JOIN таблиц

или деревом c соответствующим

или деревом c соответствующим ключем

id | parent_id|name
--------------------
1 | null|собака
2 | 1 | пёс
3 | 1 | собачка
4 | 1 | dog

Дерево имеет смысл делать,

Дерево имеет смысл делать, если есть дочерние элементы. Тут же их нет.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023