Estou procurando mais do que a lista de tipos simples encontrada nesta página :
: primary_key,: string,: text,: integer,: float,: decimal,: datetime,: timestamp,: time,: date,: binary,: boolean
Mas existe alguma documentação que realmente defina esses campos?
Especificamente:
- Qual é a diferença entre
:string
e:text
? - Entre
:float
e:decimal
? - Quais são as características distintivas
:time
,:timestamp
e:datetime
?
As nuances desses tipos estão documentadas em algum lugar?
EDIT: Pontos de implementações da plataforma DB são irrelevantes para a pergunta que estou tentando fazer. Se, por exemplo, :datetime
não tem um significado pretendido definido na documentação do Rails, o que o db-adapter-writers passa ao escolher um tipo de coluna correspondente?
ruby-on-rails
Grant Birchmeier
fonte
fonte
:string
e:text
não consegui encontrar outra coisa além disso. Então, eu só estava pensando em referência futura.Respostas:
Diretrizes criadas a partir da experiência pessoal:
serial primary key
por exemplo, no postgreSQL). Seu uso é um pouco complicado e não é recomendado.validates_uniqueness_of
eadd_index
com a:unique => true
opção) para simular a funcionalidade da chave primária em um de seus próprios campos.Esses são os tipos sobre os quais freqüentemente existe confusão; Eu espero que isso ajude. Realmente não sei por que não há documentação oficial sobre isso. Além disso, imagino que esses adaptadores de banco de dados aos quais você se referiu foram escritos pelas mesmas pessoas que escreveram o Rails, portanto eles provavelmente não precisavam de nenhuma documentação para escrever quando estavam escrevendo os adaptadores. Espero que isto ajude!
Nota: a presença de ambos
:DateTime
e:Timestamp
, pelo que posso encontrar, é incluída pelo Rails principalmente para compatibilidade com sistemas de banco de dados. Por exemplo, oTIMESTAMP
tipo de dados do MySQL é armazenado como um carimbo de data / hora unix. Seu intervalo válido vai de 1970 a 2038 e o tempo é armazenado como o número de segundos decorridos desde a última época , o que é supostamente padrão, mas na prática pode diferir de sistema para sistema. Reconhecendo que o tempo relativo não era bom nos bancos de dados, o MySQL posteriormente introduziu oDATETIME
tipo de dados, que armazena todos os dígitos no ano, mês, dia, hora, minuto e segundo, ao custo de um aumento de tamanho. oTIMESTAMP
o tipo de dados foi retido para compatibilidade com versões anteriores. Outros sistemas de banco de dados passaram por evoluções semelhantes. O Rails reconheceu a existência de vários padrões e forneceu interfaces para ambos. No entanto, Rails ActiveRecord padrões tanto:Timestamp
e:DateTime
a UTC datas armazenadas em MySql deDATETIME
, por isso não faz diferença funcional para os programadores Rails. Eles existem para que os usuários que desejam diferenciar os dois possam fazê-lo. (Para uma explicação mais aprofundada, consulte esta resposta do SO).fonte
No código-fonte da filial principal do Rails, encontrei:
resumo mysql_adapter
o
super
notype_to_sql
métodofonte