Lignes directrices construit à partir de l'expérience personnelle:
-
Chaîne de caractères:
- Limité à 255 caractères (en fonction du SGBD)
- Utilisation pour les courts champs de texte (noms, e-mails, etc)
-
Texte:
- Longueur illimitée
- Utilisation pour des commentaires, des articles de blog, etc. Règle générale: si il est capturé par textarea, utiliser du Texte. Pour l'entrée à l'aide de textfields, utilisez de la ficelle.
-
Entier
-
Float:
- Les nombres décimaux stockées avec précision en virgule flottante
- La précision est fixe, ce qui peut être problématique pour certains calculs; en général rien de bon pour les opérations mathématiques inexactes en raison de l'arrondissement.
-
Virgule:
- Les nombres décimaux stockées avec précision qui varie en fonction de ce qui est nécessaire par vos calculs; utilisez-les pour les mathématiques, qui doit être précise
- Voir ce post pour avoir des exemples et une explication approfondie sur les différences entre les chars et les décimales.
-
Boolean
- Utiliser pour stocker vrai/faux attributs (c'est à dire des choses qui n'ont que deux états, comme on/off)
-
:primary_key
- Ce type de données est un espace réservé que les Rails se traduit par ce que la clé primaire de type de données de votre base de données de choix implique (c -
serial primary key
dans postgreSQL). Son utilisation est un peu compliquée et n'est pas recommandé.
- L'utilisation modèle et la migration des contraintes (comme
validates_uniqueness_of
et add_index
avec l' :unique => true
option) au lieu de simuler la clé primaire de la fonctionnalité sur l'un de vos propres champs.
-
Date:
- Ne stocke qu'une date (année, mois, jour)
-
Temps:
- Ne stocke qu'une heure (heures, minutes, secondes)
-
DateTime:
- Magasins à la fois la date et l'heure
-
Timestamp
- Magasins à la fois la date et l'heure
- Note: Pour les fins de Rails de, les deux Timestamp et DateTime dire la même chose (utiliser soit le type de stocker à la fois la date et l'heure). Pour le TL;DR description de la raison, les deux existent, lire le paragraphe en bas.
Ce sont les types sur lesquels la confusion existe souvent; j'espère que cette aide. Je ne sais vraiment pas pourquoi il n'y a pas de documentation officielle sur ces. Aussi, j'imagine que ces adaptateurs base de données que vous citez ont été écrits par la même personne qui a écrit Rails, de sorte qu'ils n'avait certainement pas besoin de toute la documentation d'aller quand ils ont écrit les cartes. Espérons que cette aide!
Remarque: la présence de deux :DateTime
et :Timestamp
, de ce que je peux trouver, est inclus par Rails surtout pour la compatibilité avec les systèmes de base de données. Par exemple, MySQL TIMESTAMP
type de données est stockée comme un timestamp unix. Sa gamme va de 1970 à 2038, et le temps est stocké comme le nombre de secondes qui se sont écoulées depuis la dernière époque, qui est censé être la norme, mais dans la pratique peut différer d'un système à l'autre. Reconnaissant que le temps relatif n'était pas une bonne chose à avoir dans les bases de données, MySQL, a ensuite présenté le DATETIME
type de données, qui stocke tous les chiffres dans l'année, le mois, le jour, l'heure, la minute et la seconde, au prix d'une augmentation de la taille. L' TIMESTAMP
type de données a été conservé pour la compatibilité descendante. D'autres systèmes de base de données est passé par des évolutions similaires. Rails reconnu que plusieurs standards existent, et les interfaces fournies à la fois. Cependant, les Rails ActiveRecord par défaut les deux :Timestamp
et :DateTime
UTC dates stockées dans MySql DATETIME
, de sorte qu'il ne fait aucune différence fonctionnelle de Rails de programmeurs. Il en existe, afin que les utilisateurs qui le souhaitent de différencier les deux peuvent le faire. (Pour une explication plus approfondie, voir cette SORTE de réponse).