Я ищу больше, чем простой список типов, который находится на этой странице :
: primary_key,: string,: text,: integer,: float,: decimal,: datetime,: timestamp,: time,: date,: binary,: boolean
Но есть ли документация, которая на самом деле определяет эти поля?
В частности:
- Какая разница между
:string
а:text
? - Между
:float
и:decimal
? - Каковы отличительные черты
:time
,:timestamp
и:datetime
?
Документированы ли нюансы этих типов где-нибудь?
РЕДАКТИРОВАТЬ: Точки реализации DB-платформы не имеют отношения к вопросу, который я пытаюсь задать. Если, скажем, :datetime
не имеет определенного предполагаемого значения в документации по Rails, то что делают разработчики db-адаптеров при выборе соответствующего типа столбца?
ruby-on-rails
Грант Бирчмейер
источник
источник
:string
и:text
я не мог найти, кроме этого. Итак, я просто хотел узнать о будущем.Ответы:
Руководство построено на личном опыте:
serial primary key
в postgreSQL). Его использование несколько сложное и не рекомендуется.validates_uniqueness_of
иadd_index
с:unique => true
опцией) для имитации функциональности первичного ключа в одном из ваших собственных полей.Это типы, о которых часто существует путаница; Надеюсь, это поможет. Я действительно не знаю, почему нет официальной документации об этом. Кроме того, я думаю, что эти адаптеры баз данных, на которые вы ссылались, были написаны теми же людьми, которые писали на Rails, поэтому им, вероятно, не требовалась документация, когда они писали адаптеры. Надеюсь это поможет!
Примечание: наличие обоих
:DateTime
и:Timestamp
, как я могу найти, включено в Rails главным образом для совместимости с системами баз данных. Например,TIMESTAMP
тип данных MySQL хранится как метка времени Unix. Его действительный диапазон варьируется от 1970 до 2038 года, а время сохраняется как количество секунд, прошедших с последней эпохи , которое предположительно является стандартным, но на практике может различаться в зависимости от системы. Признавая, что относительное время не было подходящим для баз данных, MySQL позже представилDATETIME
тип данных, который хранит каждую цифру в году, месяце, дне, часе, минуте и секунде за счет увеличения размера.TIMESTAMP
типа данных было сохранено для обратной совместимости. Другие системы баз данных претерпели аналогичные изменения. Rails признал, что существует множество стандартов, и предоставил интерфейсы для обоих. Тем не менее, Rails ActiveRecord по умолчанию , как:Timestamp
и:DateTime
к датам UTC хранятся в MySQL,DATETIME
, так что это не имеет никакого функционального значения для Rails программистов. Они существуют для того, чтобы пользователи, которые хотятразграничить два можно сделать так. (Более подробное объяснение см. В этом ответе SO).источник
Из исходного кода главной ветки Rails я нашел:
абстрактный mysql_adapter
super
вtype_to_sql
методеисточник