2011-12-14 8 views
2

私はRailsアプリケーション用のPostgreSQLデータベースを持っています。RailsとPostgreSQLのFacebookユーザIDに使用するデータタイプ

私はFacebookのユーザーIDを保存したいので、整数を使うことができると思っていましたが、十分に大きくないので、floatを選択しました。

しかし今Railsが、私はこれは私は、PostgreSQLを使用していない、非常に長いexample: 100002496803785

答えて

7

:limit => 8を整数列に使用すると、bigintが得られます。

class Pancakes < ActiveRecord::Migration 
    def change 
     create_table :pancakes do |t| 
      t.integer :c, :limit => 8 
     end 
    end 
end 

そして、psqlから:たとえば

=> \d pancakes 
         Table "public.pancakes" 
Column | Type |      Modifiers      
--------+---------+------------------------------------------------------- 
id  | integer | not null default nextval('pancakes_id_seq'::regclass) 
c  | bigint | not null 
Indexes: 
    "pancakes_pkey" PRIMARY KEY, btree (id) 

そして、あなたのeight byte bigint列があります。

Facebook IDに文字列を使用することもできます。あなたはIDの算術演算をしていないので、実際には大きな整数のように見えるビットの不透明なバッグです。文字列は並べ替えて比較して、最適なオプションになるでしょう。整数よりも文字列のサイズが大きくなるため、ストレージとアクセスのオーバーヘッドが発生しますが、目立った違いを生じさせるには十分ではありません。

正確である必要があるものには、doubleを使用しないでください。この場合、仮に52ビットの仮数があるため、は値が指数を必要とするほど大きくなってしまうまでは52ビット整数のように動作するため、おそらく大丈夫です(末尾の.0は例外です)。 。それでも、doubleを使用することは、ひどい考えであり、型システムの乱用になります。

+0

大きなチップをありがとうと私は文字列に切り替えます。 – chell

0

あるFacebookのユーザーIDには発生しませんので、どのようなデータ型を使用することができます

私のユーザーIDの末に0.0を追加しかしmysqlで私はBIGINTを使用する

postgresql data typesによると、postgresqlのBIGINTも同様です。

+0

しかしレールが大きなint型を持っていません。 – chell

+0

レールにビグムや何かがあると思いましたか? – danielv

+0

@chell、postgresにはint8があるので、postgresに問題はありません。レールに問題があります。質問に適切なタグを付けてください。 – filiprem

0

muが短すぎるのは素晴らしい答えです。テーブル間の外部キーとしてIDを使用する場合は、文字列を使用せずにBIGINTソリューションに固執してください。これは本質的に、私が使用するものです。

例:

create_table(:photos) do |t| 
    t.integer  :fb_uid, :limit => 8 # Facebook ID of the photo record 
    t.integer  :facebook_profile_uid, :limit => 8, :null => false # foreign key to user 
    # ... 
end 

create_table(:users) do |t| 
    t.integer  :fb_uid, :limit => 8, :null => false # Facebook ID of the user record 
    t.integer  :photos_count, :integer, :default => 0 
    # ... 
end 

class User < ActiveRecord::Base 
    has_many :photos, foreign_key: :facebook_profile_uid, primary_key: :fb_uid 
    # ... 
end 

class Photo < ActiveRecord::Base 
    belongs_to :facebook_profile, foreign_key: :facebook_profile_uid, primary_key: :fb_uid, :counter_cache => true 
end 
関連する問題