Je dois stocker les couleurs dans la base de données.
Comment puis-je stocker une couleur de la meilleure manière dans le champ de la base de données?, Par nom de couleur ou autre chose ??
Si c'est pour une page HTML, le stockage de la balise #RRGGBB sous forme de chaîne est probablement suffisant.
Si c'est pour .NET, il prend en charge la construction d'une couleur à partir de sa valeur ARGB
System.Drawing.Color c = System.Drawing.Color.FromArgb(int);
int x = c.ToArgb();
vous pouvez donc simplement stocker cet int.
La valeur de couleur serait probablement la meilleure, par ex. #FFFFFF ou # FF0000
Le format de stockage idéal dépend de la façon dont vous prévoyez d'utiliser la base de données.
La solution la plus simple consiste bien sûr à tout stocker sous la forme d'une chaîne hexadécimale de 6 octets ASCII de la couleur RVB, sans prise en charge d'aucun autre format). si vous souhaitez ultérieurement prendre en charge des formats supplémentaires.
Pour la lisibilité, la flexibilité et la facilité d'accès, utiliser une chaîne simple est une bonne idée. La différence d'espace de stockage entre une chaîne de couleur hexadécimale et un entier brut est négligeable dans la plupart des cas. Pour augmenter la vitesse, vous pouvez définir le champ de couleur à indexer. Et pour plus de flexibilité, vous pouvez ajouter une ou plusieurs des fonctionnalités suivantes:
Pour optimiser la vitesse de recherche et de tri, ainsi que l'utilisation du disque, le stockage en tant qu'entier non signé est la solution. En effet, un seul numéro est plus rapide à rechercher qu'une chaîne de caractères, peut être stocké en interne aussi petit que quelques bits, et vous pouvez toujours filtrer par canaux de couleur dans vos requêtes à l'aide de FromArgb()
et de fonctions similaires . L'inconvénient est que votre code doit ensuite constamment convertir les choses dans les deux sens pour chaque champ de couleur dans chaque requête, ce qui peut en fait compenser tout gain de vitesse de la base de données.
ne approche hybride peut être utile d'explorer. Par exemple, considérez un tableau de toutes les valeurs RVB 8 bits par canal possibles, avec des champs composés de choses comme id, rgbhex, cssname, cmyk, hsl, hsv, lab, rgb, etc. Vous devez automatiser le création d'un tel tableau car il serait si volumineux (16777216 entrées). Cela ajouterait plus de 16 Mo à votre table, mais l'avantage de cette solution est que toutes vos valeurs de couleur ne seraient qu'un seul champ d'identifiant entier lié avec une clé étrangère à la table de recherche des couleurs. Tri et recherche rapides, toutes les données de couleur dont vous avez besoin sans aucune conversion et extrêmement extensibles. Vous pouvez également conserver la table dans son propre fichier de base de données afin qu'elle soit partagée par toute autre base de données ou script de votre application. Certes, cette solution est exagérée dans la plupart des cas.
Stockez une couleur sous forme d'entier 24 ou 32 bits, comme en HTML/CSS, c'est-à-dire # FF00CC, mais converti en un entier et non en une chaîne.
Les entiers prendront moins d'espace que les chaînes (en particulier les VCHAR).
Stockez-le en tant qu'int
Utilisez ToArgb et FromArgb pour définir et obtenir les valeurs.
Je pense que cela dépend. Si vous avez juste besoin de stocker la couleur, la notation hexadécimale devrait convenir. Si vous devez effectuer des requêtes sur des canaux de couleur spécifiques, vous souhaitez des champs en petits caractères pour chaque canal de couleur (que ce soit RGB, ARGB, CYMK, etc.).
Donc, pour un stockage simple, restez simple. Si vous devez effectuer une analyse, vous devrez envisager d'autres options en fonction de votre domaine problématique.
Je suggère d'avoir une table de recherche de couleurs à 3 colonnes:
ID int; Nom varchar (40) null; ColorVal char (8) ou int (selon la façon dont vous représentez les couleurs)
Pour les couleurs sans nom, laissez simplement le champ de nom nul
Dans quel format souhaitez-vous stocker les couleurs? CMTK, RVB, Pantone? Cela aide à savoir ... le format hexadécimal strictement #RGB fonctionne très bien si c'est pour les couleurs Web ou une application, mais pas si bon si vous essayez de mélanger des peintures.
Pour enregistrer la couleur dans la base de données:
//Save this int value in database
int argb = colorDialog1.Color.ToArgb();
et aussi pour le récupérer de l'utilisation de la base de données:
//argb is the value of color stored in database in prev. section
Color.FromArgb(argb)
Je le stocke comme char (9).
J'opterais pour la notation hexadécimale si les couleurs sont limitées aux couleurs Web.
Ainsi, par exemple # 0000FF pour le bleu.
Plus d'informations ici: http://en.wikipedia.org/wiki/Web_colors