Estoy buscando más que la simple lista de tipos que se encuentra en esta página :
: primary_key,: string,: text,: integer,: float,: decimal,: datetime,: timestamp,: time,: date,: binary,: boolean
¿Pero hay alguna documentación que realmente defina estos campos?
Específicamente:
- ¿Cuál es la diferencia entre
:string
y:text
? - Entre
:float
y:decimal
? - ¿Cuáles son las características distintivas de
:time
,:timestamp
y:datetime
?
¿Los matices de este tipo están documentados en alguna parte?
EDITAR: Los puntos de las implementaciones de la plataforma DB son irrelevantes para la pregunta que estoy tratando de hacer. Si, por ejemplo, :datetime
no tiene un significado intencionado definido en la documentación de Rails, ¿a qué recurren los escritores de adaptadores db al elegir el tipo de columna correspondiente?
ruby-on-rails
Grant Birchmeier
fuente
fuente
:string
e:text
y no pude encontrar ninguna que no sea esta. Entonces, me preguntaba para futuras referencias.Respuestas:
Pautas construidas a partir de la experiencia personal:
serial primary key
en postgreSQL). Su uso es algo complicado y no recomendado.validates_uniqueness_of
yadd_index
con la:unique => true
opción) en su lugar para simular la funcionalidad de la clave principal en uno de sus propios campos.Estos son los tipos sobre los cuales a menudo existe confusión; Espero que esto ayude. Realmente no sé por qué no hay documentación oficial sobre estos. Además, me imagino que estos adaptadores de bases de datos a los que se refirió fueron escritos por las mismas personas que escribieron Rails, por lo que probablemente no necesitaban ninguna documentación cuando escribieron los adaptadores. ¡Espero que esto ayude!
Nota: la presencia de ambos
:DateTime
y:Timestamp
, por lo que puedo encontrar, está incluida por Rails principalmente por compatibilidad con sistemas de bases de datos. Por ejemplo, elTIMESTAMP
tipo de datos de MySQL se almacena como una marca de tiempo de Unix. Su rango válido va desde 1970 hasta 2038, y el tiempo se almacena como el número de segundos transcurridos desde la última época , que supuestamente es estándar, pero en la práctica puede diferir de un sistema a otro. Al reconocer que el tiempo relativo no era bueno para tener en las bases de datos, MySQL luego introdujo elDATETIME
tipo de datos, que almacena cada dígito en el año, mes, día, hora, minuto y segundo, a costa de un aumento de tamaño. losTIMESTAMP
el tipo de datos se retuvo por compatibilidad con versiones anteriores. Otros sistemas de bases de datos pasaron por evoluciones similares. Rails reconoció que existían múltiples estándares y proporcionó interfaces para ambos. Sin embargo, los carriles de ActiveRecord por defecto tanto:Timestamp
y:DateTime
hasta fechas UTC almacenados en MySQLDATETIME
, por lo que no hace ninguna diferencia funcional a los programadores de Rieles. Estos existen para que los usuarios que deseen diferenciar entre los dos puedan hacerlo. (Para una explicación más detallada, vea esta respuesta SO).fuente
Del código fuente de la rama maestra de Rails encontré:
resumen mysql_adapter
el
super
en eltype_to_sql
métodofuente