Идеальный формат хранения зависит от того, как вы планируете использовать базу данных.
Самое простое решение - это, конечно, просто сохранение всего в виде шестнадцатеричной шестнадцатеричной строки ASCII цвета RGB без поддержки какого-либо другого формата. Хотя вы можете столкнуться с проблемами, если позже захотите поддерживать дополнительные форматы.
Для удобства чтения, гибкости и простоты доступа, использование простой строки - хорошая идея. Разница в объеме памяти между шестнадцатеричной строкой цвета и необработанным целым числом в большинстве случаев незначительна. Для повышения скорости вы можете установить цветное поле для индексации. А для большей гибкости вы можете добавить одну или несколько из следующих функций:
- Предположим, что контекстный цвет по умолчанию задан NULL, пуст или недействителен
- Примите необязательный конечный альфа-байт 00-FF, предполагая, что FF (непрозрачный), если не указан
- Принимать как полный (AABBCC), так и сокращенный (ABC) синтаксис, который в два раза меньше, быстрее вводится и поддерживается CSS
- Поддержка необязательного начального # символа, который является общим
- Поддержка необработанных строк для хранения всего, что поддерживает CSS, например "rgba (255,255,255,1)" или "red"
- Поддержка пользовательских строк цветового режима, таких как "cmyk (), hsv (), hsl (), lab ()" и т. Д.
- Предположим, что шестнадцатеричные строки RGB (A) начинаются с символа # или имеют длину 3, 4, 6 или 8 и содержат только [0-9A-Fa-f]
Чтобы оптимизировать скорость поиска и сортировки, , а также использование диска, хранение в виде целого числа без знака - это путь. Это связано с тем, что поиск по одному номеру быстрее, чем по строке символов, он может храниться внутри всего в несколько битов, и вы все равно можете фильтровать по цветным каналам в своих запросах, используя FromArgb()
и аналогичные функции. Недостатком является то, что ваш код должен постоянно преобразовывать вещи назад и вперед для каждого цветового поля в каждом запросе, что может фактически компенсировать любое увеличение скорости базы данных.
Гибридный подход может стоить изучить. Например, рассмотрим таблицу всех возможных значений RGB по 8 бит на канал с полями, состоящими из таких вещей, как id, rgbhex, cssname, cmyk, hsl, hsv, lab, rgb и т. Д. Вам необходимо автоматизировать создание такой таблицы, поскольку она будет такой большой (16777216 записей). Это добавит к вашей таблице более 16 МБ, но преимущество этого решения состоит в том, что все ваши значения цвета будут просто одним целочисленным полем id, связанным с внешним ключом для таблицы поиска цветов. Быстрая сортировка и поиск, любые данные о цвете, которые вам нужны без какого-либо преобразования, и чрезвычайно расширяемые. Вы также можете хранить таблицу в своем собственном файле базы данных для совместного использования с любой другой базой данных или скриптом в вашем приложении. По общему признанию это решение является излишним для большинства случаев.