• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby on rails开发从头来(四十二)- ActiveRecord基础(主键和ID)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
   也许你已经注意到了,在我们前面的代码中,数据库定义里都使用了一个integer型的字段id作为主键,这是Active Record的一个约定。

    或许你要问,为什么不用订单编号或者某个有意义的列来作为主键呢?使用id作为主键有一个很重要的原因,就是如果使用具有内在格式的主键的话,随着时间推移,有可能其中的规则也会变化。例如,使用ISBN号码来给book表做主键,毕竟ISBN号码是唯一的,但是,有可能当一本书写完后,美国的出版业已经发展了并且在所有的ISBN号码后又附加了一位数字。

    如果我们使用了ISBN作为book表的主键,我们就要更新所有book表的记录来反映这个变化,而且还有一个问题,还有其他表引用了book表的主键,我们就要更新所有的引用,这还牵涉到要删除外键,所有的这一切都是非常痛苦的。

    如果使用有意义的值作为主键,那么我们将收到外界业务规则的影响,如果使用id,我们可以自己完全控制,而且如果象ISBN等一些东西改变的话,将不会影响到数据库结构。

    如果你从一个新的数据库结构开始,可能会遵循约定,给所有的表都使用id作为主键,但是,当你使用的是一个既存的数据库开始的时候,Active Record提供了简单的方法来让你重新给表指定主键,例如:

class BadBook < ActiveRecord::Base

set_primary_key "isbn"

end

    通常,Active Record会注意给新创建的记录生成主键值-使用自增长的整数。不管怎样,当你override表的主键名字的时候,你就需要自己负责给新建记录一个唯一的主键值。也许有些让人惊讶,你还是设置一个id的属性来完成这件事,因为Active Record所关心的是,主键的设置永远都使用名为id属性,set_primary_key的声明只是设置了使用的列名,下面的例子,我们使用ISBN作为主键。

book = BadBook.new

book.id = "0-12345-6789"

book.title = "My Great American Novel"

book.save

# ...

book = BadBook.find("0-12345-6789")

puts book.title # => "My Great American Novel"

p book.attributes #=> {"isbn" =>"0-12345-6789",

"title"=>"My Great American Novel"}

    也就是说,在设置主键的时候,使用id属性,其他时候,使用真实的列名。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【原创】编程基础之Ruby发布时间:2022-07-14
下一篇:
Linux CentOS6下安装Ruby和RubyGems和OpenSSL和Zlib-devel 为了Redis 集群发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap