Ответ 1
Рекомендации, основанные на личном опыте:
- Строка:
- Ограничено до 255 символов (в зависимости от СУБД)
- Использование для коротких текстовых полей (имена, электронные письма и т.д.)
- Текст:
- Неограниченная длина (в зависимости от СУБД)
- Использовать для комментариев, сообщений в блогах и т.д. Общее эмпирическое правило: если оно захвачено через текстовое поле, используйте текст. Для ввода с использованием текстовых полей используйте строку.
- Integer:
- Целые числа
- Float:
- Десятичные числа, хранящиеся с точностью с плавающей запятой
- Точность фиксирована, что может быть проблематичным для некоторых расчетов; обычно не подходит для математических операций из-за неточного округления.
- Decimal:
- Десятичные числа, хранящиеся с точностью, которая зависит от ваших расчетов; используйте их для математики, которая должна быть точной.
- См. этот для примеров и подробное объяснение различий между поплавками и десятичными знаками.
- Boolean:
- Использовать для хранения атрибутов true/false (т.е. вещей, которые имеют только два состояния, например, включение/выключение)
- Binary:
- Использовать для хранения изображений, фильмов и других файлов в исходном, необработанном формате в кусках данных, называемых blobs
- : primary_key
- Этот тип данных является заполнителем, который Rails переводит в любой первичный ключевой тип данных, который требуется вашей базе данных (т.е.
serial primary key
в postgreSQL). Его использование несколько сложное и не рекомендуется. - Используйте модели и ограничения миграции (например,
validates_uniqueness_of
иadd_index
с опцией:unique => true
) вместо этого, чтобы имитировать функции первичного ключа в одном из ваших собственных полей.
- Этот тип данных является заполнителем, который Rails переводит в любой первичный ключевой тип данных, который требуется вашей базе данных (т.е.
- Дата:
- Сохраняет только дату (год, месяц, день).
- Время:
- Сохраняет только время (часы, минуты, секунды)
- DateTime:
- Сохраняет дату и время
- Отметка
- Сохраняет дату и время
- Примечание. Для целей Rails как Timestamp, так и DateTime означают одно и то же (используйте любой тип для хранения даты и времени). Для описания TL, DR, почему оба существуют, прочитайте нижний абзац.
Это типы, по которым часто возникает путаница; Надеюсь, это поможет. Я действительно не знаю, почему об этом нет официальной документации. Кроме того, я думаю, эти адаптеры баз данных, о которых вы говорили, были написаны теми же людьми, которые писали Rails, поэтому им, вероятно, не нужна была какая-либо документация, когда они писали адаптеры. Надеюсь, это поможет!
Примечание: наличие как :DateTime
, так и :Timestamp
, из того, что я могу найти, включено Rails в основном для совместимости с системами баз данных. Например, тип данных MySQL TIMESTAMP
хранится как временная метка unix. Его допустимый диапазон варьируется от 1970 до 2038, а время хранится как количество секунд, прошедших со времени последнего epoch, что предположительно стандартным, но на практике может отличаться от системы к системе. Признавая, что относительное время было не очень хорошо иметь в базах данных, MySQL позже представила тип данных DATETIME
, который хранит каждую цифру в году, месяце, день, час, минуту и секунду за счет увеличения размера. Тип данных TIMESTAMP
был сохранен для обратной совместимости. Другие системы баз данных прошли аналогичные эволюции. Rails признал, что существует несколько стандартов, и предоставил интерфейсы для обоих. Однако Rails ActiveRecord по умолчанию имеет значения :Timestamp
и :DateTime
для дат UTC, хранящихся в MySql DATETIME
, поэтому он не имеет функциональных отличий от программистов Rails. Они существуют, так что пользователи, которые хотят провести различие между ними, могут это сделать. (Для более подробного объяснения см. этот ответ SO).