activerecord は、新しく作成されたレコードにどのように ID を割り当てますか? ID値はいたるところにあるようです。シーケンシャルな場合もあれば、ある種のハッシュのように見える場合もあります。行動を制御する方法はありますか?
1 に答える
リレーショナルデータベース内では、IDは通常シーケンシャルであることがわかります。id
これは、Railsを使用するこれらのデータベースでは、デフォルトで自動的にインクリメントされるフィールドです。これは99%のケースです。つまり、99%の確率で、このように実行されることが期待できます。それは正気の方法です。
ただし、データベース内の「id」フィールドが自動的にインクリメントされず、代わりに文字列になる場合があります。現在使用しているデータベースでは、idフィールドはと呼ばれclient_id
、「RAB001」などの6文字の文字列であり、コード自体によって手動で割り当てる必要があります。これは、私たちがサポートしているレガシーシステムによるものであり、それを修正するためにできることは何もありません。それはまさにそれです。
Mongoidなどの他のデータベースでは、IDは再び自動的に生成されます。ただし、ここには違いがあります。自動的に数値をインクリメントするのではなく、ハッシュです。私がたまたま便利なMongoデータベースでは、オブジェクトの_id
フィールドの1つ(アンダースコアに注意)は、この素敵で理解しやすい1つのハッシュです4e22b5812f8b7d6f6d000001
。これはMongoによって自動的に生成され、オブジェクトを見つける必要があり、別の一意の値でそれを見つける他の方法がない場合を除いて、それが何であるかはあまり気にしません。
PostgreSQLやMySQLなどの従来のデータベースシステムによって提供されるものであれ、Mongoによって提供されるものであれ、自動生成されるIDシステムを使用することをお勧めします。
レコードの主キーを手動で生成する必要があるシステムには、巨大な「HERE BE DRAGONS」ラベルを付ける必要があり、ニトログリセリンの場合のように、またはこの適切なアナロジーと同様に処理する必要があります。可能であれば、このシステムは避けてください。
1私はここで皮肉を言っています。