私はRailsアプリケーション用のPostgreSQLデータベースを持っています。RailsとPostgreSQLのFacebookユーザIDに使用するデータタイプ
私はFacebookのユーザーIDを保存したいので、整数を使うことができると思っていましたが、十分に大きくないので、floatを選択しました。
しかし今Railsが、私はこれは私は、PostgreSQLを使用していない、非常に長いexample: 100002496803785
私はRailsアプリケーション用のPostgreSQLデータベースを持っています。RailsとPostgreSQLのFacebookユーザIDに使用するデータタイプ
私はFacebookのユーザーIDを保存したいので、整数を使うことができると思っていましたが、十分に大きくないので、floatを選択しました。
しかし今Railsが、私はこれは私は、PostgreSQLを使用していない、非常に長いexample: 100002496803785
: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
を使用することは、ひどい考えであり、型システムの乱用になります。
あるFacebookのユーザーIDには発生しませんので、どのようなデータ型を使用することができます
私のユーザーIDの末に0.0を追加しかしmysqlで私はBIGINTを使用する
postgresql data typesによると、postgresqlのBIGINTも同様です。
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
大きなチップをありがとうと私は文字列に切り替えます。 – chell