その数はどんな数?(失敗学)
年表のデータベースを作っている
userが情報を入力したり検索したりするフロントはflutter、
DatabaseはPostgreSQL、
それを繋ぐbackendはServerpod。
文字か数字、という粗い理解からのスタート
例えば1600年関ヶ原の戦い、だったら1600はint、関ヶ原の戦いはString、textで問題ない。
ところが紀元前336年アレクサンダー王位に就く、だとどうか。
-336と入力してもらいたい。
が、intに設定したTextFormFieldは「-」といれた途端にerrorになる。
負の数だって整数は整数だろう、といっても聞いてもらえない。
138億年前BigBangはどうか。これも当然まず「-」ではねられる。
「-」なし、という安易な回避策をとったとして、
さらに考えなければいけないのは、13800000000とuserに入力させるのか、という問題。
もしそうするならbig intか?。
138億年と日本語で書いていては世界展開できない。
基本13.8(@Billion)になるだろう。
するともう、整数ですらない。
さらにさらに日付。April 5と書くか 5 Avrilと書くか、それをちゃんと並べられるか。
で、0405にしようと思った。
が、これはもはや数字ですらないらしい。
ゼロが保存されずに405となるならまだ許せるが、場合によっては0と保存される。
0405は文字列。文字列でも4桁で統一されていれば、ちゃんと昇順に並べられるだろう。
言語によって単語が違うのは・・・まあ自然言語でも同じことだけれど
さて、単純にint intと書いていたあちらこちらを直すとして
flutter(dart)だとdoubleだが、 PostgreSQLはfloatだ。
Serverpodのserver/lib/src/protocolにうっかりfloatと書いたら、あっちこっち赤くなった。自動生成で同期されるから、当然、間違いも伝搬する。
とはいえ、元を直せば一斉に直ってくれるんだから、文句は言えない。
あとはフロント側で、変数の
= 0;を =0.0;に直すとか、
int.parse(value); を double.parse(value);に直すとか
そして肝心のDatabase
ServerpodはPostgreSQLを内蔵(?)しているとはいえ、protocolのyaml.fileを修正しただけでは、Database側のfield属性は変わってくれない。
pgAdmin4での修正方法がまだわからないが
PosticoならStructureから直せる。floatと打ったら、かってにdouble precisionになった。
試しにdecimalと入れたら、かってにnumericになった。
どっちにしよう?
Discussion