2011-02-16 5 views
2

Juste curieux de savoir comment les autres traitent avec enums & nosql? Est-il préférable de stocker un attribut en tant que valeur enum ou chaîne? Cela affecte-t-il la taille ou les performances de la base de données dans certains cas? Par exemple, il suffit de penser à, disons, un joueur de sport professionnel ... son type de sport pourrait être le football, le hockey, le baseball, le basketball, etc ... chaîne vs enum, que pensez-vous tous?NoSql: Enums vs Strings

+0

Trouvé également cet article: http://www.objectreference.net/post/enum-to-friendly-string-extension-method.aspx – bbqchickenrobot

Répondre

1

Vous devriez utiliser des énumérations dans votre code - un typage fort permet d'éviter beaucoup d'erreurs - et de les convertir en chaînes ou en nombres pour le stockage.

Les chaînes nécessitent beaucoup plus d'espace de stockage - "Basketball" est de 10-20 octets selon l'encodage, et si vous le stockez en 4, il n'a besoin que de 1 octet. Cependant, il y a très peu de cas où cela compte vraiment - si vous avez un million d'enregistrements, il reste moins de 20 Mo de différence dans la taille totale de la base de données. Les chaînes sont plus faciles à utiliser et moins susceptibles d'échouer silencieusement si l'énumération change, utilisez donc des chaînes.

Les chaînes sont également plus lentes que les nombres pour la plupart des opérations, y compris la conversion en énumération en charge. Cependant, la différence est inférieure d'un ordre de grandeur au temps nécessaire pour extraire quoi que ce soit de la base de données, cela n'a donc pas d'importance.

1

String sont mieux de la perspective de portabilité. Et Enum est pas pris en charge par les SGBD populaires comme MSSQL Server et beaucoup d'autres.

Vous pouvez avoir une logique au niveau de l'application pour empêcher une entrée valide sur une baie et la stocker simplement en tant que chaîne.

EDIT:

Mes préférences ont changé à String comme CakePHP (où je fais des applications Web) sans plus de soutien Enum pour des raisons de portabilité.