Когда я должен использовать & # 8220; NOT NULL & # 8221; в таблице MySQL и есть ли какие-либо преимущества?

StackOverflow https://stackoverflow.com/questions/240544

Вопрос

У меня есть следующая миграция рельсов:

create_table :articles do |t|
  t.integer :user_id, :allow_null => false
  t.integer :genre_id, :allow_null => false
  t.string :url, :limit => 255, :allow_null => false
  t.string :title, :limit => 60, :allow_null => false
  t.text :summary, :limit => 350, :allow_null => false
  t.integer :votes_count, :default => 0
  t.datetime :published_at, :default => nil
  t.timestamps
end

Все поля, которые " NOT NULL " сначала проверяются в модели, поэтому мне интересно, стоит ли мне беспокоиться о включении allow_null в процессе миграции? Я не уверен, какие преимущества " НЕ NULL " дает в базу данных, если таковые имеются.

Это было полезно?

Решение

Немного, если вы имеете в виду производительность или эффективность хранения. Тем не менее, это просто хорошая практика - вставить как можно больше ваших низкоуровневых ограничений в слой базы данных. Во-первых, это гарантирует, что небольшая ошибка в Rails не приведет к случайным данным NULL в ненулевом поле. Аналогичным образом, если вы когда-нибудь запустите другое приложение для той же базы данных, будет чрезвычайно полезно иметь ограничения в центральном месте для обслуживания и избежать дублирования.

Другие советы

NOT NULL - это еще одна вещь, когда компьютер может следить за вами и удерживать вас от ошибок.

Это, по-видимому, не влияет на mySQL, но вы должны знать о 2 недавно исправленных проблемах миграции (одна из которых не указана по умолчанию)

http://blog.codefront.net/2008/05/04/living-on-the-edge-of-rails-19-change_table-for-migrations-and-more/

http: // antoniocangiano.com/2008/07/14/a-close-look-at-three-rails-21-bugs/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top