Мне нужно хранить цвета в базе данных.
Как я могу сохранить цвет наилучшим образом в поле базы данных?, по имени цвета или что-то еще?
Мне нужно хранить цвета в базе данных.
Как я могу сохранить цвет наилучшим образом в поле базы данных?, по имени цвета или что-то еще?
Если его для HTML-страницы достаточно хранить тэг #RRGGBB в виде строки.
Если это для .NET, он поддерживает построение цвета с его значением ARGB
System.Drawing.Color c = System.Drawing.Color.FromArgb(int);
int x = c.ToArgb();
чтобы вы могли просто сохранить этот int.
Вероятно, значение цвета было бы лучшим, например. #FFFFFF или # FF0000
Сохраняйте цвет как целое число 24 или 32 бита, например, в HTML/CSS, то есть # FF00CC, но преобразуется в целое число, а не в строку.
Целые числа занимают меньше места, чем строки (особенно VCHAR).
Идеальный формат хранения зависит от того, как вы планируете использовать базу данных.
Простейшее решение, конечно, просто хранит все как шестибайтную шестнадцатеричную строку ASCII цвета RGB без поддержки какого-либо другого формата. Хотя вы можете столкнуться с проблемами, если позже захотите поддерживать дополнительные форматы.
Для удобства чтения, гибкости и простоты доступа, используя простую строку, это хорошая идея. Разница в пространстве хранения между шестнадцатеричной цветовой строкой и необработанным целым в большинстве случаев незначительна. Для повышения скорости вы можете установить поле цвета для индексации. И для гибкости вы можете добавить одну или несколько из следующих функций:
Чтобы оптимизировать скорость поиска и сортировки,, а также использование диска, сохранение как целого числа без знака - это путь. Это связано с тем, что одно число быстрее для поиска, чем строка символов, может быть сохранено на внутреннем уровне как маленькое, как несколько бит, и вы можете фильтровать по цветным каналам в ваших запросах с помощью FromArgb()
и подобных функций. Недостатком является ваш код, тогда вам нужно постоянно преобразовывать вещи взад и вперед для каждого поля цвета в каждом запросе, что может фактически компенсировать любое увеличение скорости базы данных.
Возможно, стоит изучить гибридный подход. Например, рассмотрим таблицу всех возможных значений RGB в 8 бит на канал, с полями, состоящими из таких элементов, как id, rgbhex, cssname, cmyk, hsl, hsv, lab, rgb и т.д. Вам нужно будет автоматизировать создание такой таблицы, поскольку она была бы такой большой (16777216 записей). Это добавит более 16 МБ к вашей таблице, но преимущество этого решения в том, что все ваши значения цвета будут всего лишь одним целым полем id, связанным с внешним ключом, в таблицу поиска цветов. Быстрые сортировки и поиск, любые цветовые данные, которые вам нужны без какого-либо преобразования, и чрезвычайно расширяемы. Вы также можете сохранить таблицу в своем собственном файле базы данных для совместного использования любой другой базой данных или script в своем приложении. По общему признанию, это решение в большинстве случаев является излишним.
Сохраните его как int
Используйте ToArgb и FromArgb для установки и получения значений.
Я думаю, это зависит. Если вам просто нужно сохранить цвет, то шестнадцатеричное обозначение должно быть прекрасным. Если вам нужно выполнить запросы к конкретным цветовым каналам, тогда вам понадобятся небольшие поля для каждого цветного канала (будь то RGB, ARGB, CYMK и т.д.).
Итак, для простого хранения, прост. Если вам нужно выполнить анализ, вам нужно будет рассмотреть альтернативные варианты, которые продиктованы вашей проблемной областью.
Я предлагаю иметь таблицу поиска по 3 столбцам:
ID int; Имя varchar (40) null; ColorVal char (8) или int (в зависимости от того, как вы представляете цвета)
Для неназванных цветов просто оставьте поле имени null
Я бы пошел на шестнадцатеричную нотацию, если цвета ограничены цветами в Интернете.
Так например # 0000FF для синего.
Дополнительная информация здесь: http://en.wikipedia.org/wiki/Web_colors
В каком формате вы хотите хранить цвета? CMTK, RGB, Pantone? Это как-то помогает узнать... строковый формат #RGB hex отлично работает, если он предназначен для веб-цветов или приложений, но не очень хорош, если вы пытаетесь смешивать краски.
Я храню его как char (9).
Сохранить цвет в базе данных:
//Save this int value in database
int argb = colorDialog1.Color.ToArgb();
а также удалить его из базы данных:
//argb is the value of color stored in database in prev. section
Color.FromArgb(argb)
Почему бы вам не использовать оба? Структура таблицы будет Int ARGB для ключа и varchar для имени.
ARGB (Key), Name
FFFFFFFF ,Black
FF000000 ,White