blackandwhitetux
Дата: 19.12.2012 12:59:28
Описание ситуации:
Требуется таблица вида
id | color | shade
"color" может быть одним из заранее перечисленных цветов "красный, зеленый, синий, белый" и т.д.
"shade" может иметь набор значений из заранее заданных, однако список заранее заданных значений отличается для разных цветов.
То есть на выходе хочется получать нечто подобное
id | red | dark red, brown red
id | green | lime, light green
id | blue | normal blue
id | green | dark green
Вопрос в том, как лучше хранить эти данные? Для столбца shade не хочется использовать set, т.к. в нем придется перечислить вообще все возможные оттенки. Хочется иметь 1) mainTable 2) таблицу цветов 3) таблицы оттенков для каждых цветов. И вот с третьим столбцом и возникает непонимание :)
Если делать каждую подтаблицу оттенков для каждого цвета вида "id | shade" непонятно как заносить набор значений в основную таблицу. Можно таблицу оттенков сделать как "id | set(shades)" но тогда при записи
id | id_color | id_shade
как узнать, из какой именно таблицы оттенков брать значение, ведь выбор таблицы зависит от id_color.
Можно еще сделать оттенки как id | set(shades) | id_mainTable, но тогда третий столбец из основной таблицы можно убрать, и при записи делать 2 insert'а - в mainTable, и следом в таблицу оттенков выбранного цвета, используя id вставленной ранее строки. Но я не уверен что это правильный способ :)
Какие-нибудь советы? Или тыканье носом в неизвестный мне функционал, который позволит "нативно" организовать это? :)
tanglir
Дата: 19.12.2012 13:07:01
blackandwhitetux, не пойму, чем вас
basecolors(id,name)
colors(id,basecolorid,shade)
maintable(id,...,colorid)
не устраивает? Заранее первые 2 таблицы заполнить допустимыми полями, и всё.