当我应该使用执照;不是NULL”在MySQL表和有什么好处吗?When should I be using “NOT NULL” in a MySQL table and are there any benefits?

- 此内容更新于:2014-12-30
主题:

我有下面的rails迁移: 所有的字段都“不空”首先在模型中进行验证,所以我想知道我需要麻烦在迁移allow_null吗?我不确定有什么好处“不空”给到数据库,如果任何。

原文:

I have the following rails migration:

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

All the fields that are "NOT NULL" are validated in the model first, so I'm wondering if I need to bother having allow_null in the migration? I'm not sure what benefits "NOT NULL" gives to the database, if any.

解决方案:
原文:

Not much if you mean in terms of performance or storage efficiency. However, it's just good practice to push as many of your low-level constraints into the database layer. For one thing, it guarantees that a subtle bug in Rails isn't going to lead to some randomly NULL data in a not-null field. Likewise, if you ever run another app against the same database, it will be extremely helpful to have the constraints in a central place for maintenance and to avoid duplication.

解决方案:
NOT NULL是一件事,电脑可以照看你,阻止你犯错误。
原文:

NOT NULL is one more thing where the computer can keep an eye on you and keep you from making mistakes.

解决方案:
这并不seemt o影响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/
原文:

This doesn't seemt o affect mySQL, but you should be aware of 2 recently fixed migration issues (one when you don't specify default)

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/