teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足追記

2019/03/02 02:32

投稿

wwbQzhMkhhgEmhU
wwbQzhMkhhgEmhU

スコア343

answer CHANGED
@@ -1,4 +1,10 @@
1
1
  識別子系は長さが変わること、数値でなくなることが多いので、個人的には文字列にしています。
2
2
  理由は、識別子系は外部から指定されることが多いものだからです。つまりここは外部要件から変更がかかりやすく、内部で勝手に決められない、ということです。外から指定されないものか、未来永劫確実に数字で行けそうなコードの場合のみ、数字で指定します。
3
3
 
4
- なぜそこまで気にするかというと、ココが変わると、設計も実装も大幅に変わり、工数がとんでもなく増えるからです。識別子は多くの場合、どこまでも伝搬されるものなので。文字列は大量に何かを処理する場合、インデックスなどが作られる=ハッシュ値になるはずなので、数字か文字列かでそこまでナイーブになる必要はないと思います。
4
+ なぜそこまで気にするかというと、ココが変わると、設計も実装も大幅に変わり、工数がとんでもなく増えるからです。識別子は多くの場合、どこまでも伝搬されるものなので。文字列は大量に何かを処理する場合、インデックスなどが作られる=ハッシュ値になるはずなので、数字か文字列かでそこまでナイーブになる必要はないと思います。
5
+
6
+ ---
7
+ 【追記-1】
8
+ 上の文章で、数値と数字を混在させていますが、大した意味はありません。個人的には1対1に紐づく前提であれば、どちらでもいいと思っています。MySQLで言えば、intとnumberでは意味が違いますし、intにすればそれなりに小さくなるし速いと予想が出来るからで、識別子としての数字だから文字列にしないといけないか?と言われると必ずしもそうではないからです。ようは算術演算をするから数値という意味付けに実用的な違いがあまりないから、と言えます。
9
+
10
+ ただし文字列と数値で1対1に紐付かないケースだけはNGです。例えば'00001'と'1'が文字列として両方出現する可能性があり、両者を一意に識別しないといけない場合は、数値だと1にしかしようがないので、それはダメってことです。