🔎

その数はどんな数?(失敗学)

2023/04/05に公開

年表のデータベースを作っている

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になった。
どっちにしよう?

最初からちゃんと考えてつくれよ、ができなくたって、生きていける

Flutter大学

Discussion