Каждый цвет хранится в отдельной таблице, со множеством других параметров так что синонимы скорее всего лучше будет вынести в отдельную таблицу.
Задача простая - хранить (с возможностью редактирования, конечно) все оттенки и связи между ними, и иметь возможность получить все оттенки какого-то цвета при запросе.
То есть захотел посмотреть все оттенки красного - получил "бардовый, алый". Захотел посмотреть аналоги бардового - получил "красный, алый".
На ум приходит простой вариант таблицы:
id | colors
1 | array(1, 2, 3)
2 | array(4, 5, 6)
3| array(7, 8, 9)
появился новый цвет без аналогов - будет просто
4 | array(10)
появился новый цвет в качестве аналога существующей линейки (ну там огненно-красный в линейку красных цветов) - изменили запись:
1 | array(1, 2, 3, 11)
в основной таблице цветов в отдельном поле указана группа синонимов, то есть для красного, бардового, алого - это будет "1", для синих цветов - "2", для зеленых - "3", и тд.
Это будет абсолютно не правильно. Сколько цветов ты будешь хранить в базе? 16 000 000 что бы 24 бита глубины цвета получить? Если нужно будет больше?
Нужно почитать тебе теорию цвета. Цвет это номер, и алгоритмы формирования цвета имеют свои паттерны. Так если иметь номер цвета, то при помощь форму можно получить оттенки того же цвет, или схожие оттенки, оттенки по яркости, или насыщенности, можно будет получить цвета подходящие к этому тону, это могут быть совершенно разные цвета как например фиолетовый и серо голубой.
Вообще что бы дать квалифицированный ответ, нужно понять не как ты планируешь делать или что ты хочешь делать, а задачу целиком. Для чего этот алгоритм? Для чего будет использоваться результат подбора. Ведь подбор цветов для дизайнер для создания палитры сайта, и подбор цвета для светового шоу, это разные вещи. Если в первом случае можно вообще оттолкнуться от красивой картинки и взять ее палитры, то во втором случае нужны будут алгоритмы генерации цветов.
Ели речь идет о поиске синонимов и антонимов в языке то тут все еще сложнее. Нужен соундекс. Парсер естественного языка. Ты можешь ввести столы, а он должен понять это как стол, столов, столами, ... Ты можешь сказать вообще конечную задачу? Для чего это? ведь решений тут много разных, описывать все не просто.
Sergey Romanov, да не нужно никаких сложностей, просто где-то указать что стол и барная стойка - это аналоги друг для друга.
стул, кресло, барный стул, табурет - это тоже аналоги друг для друга.
нужно иметь возможность получить заранее сохраненные аналоги для стула