Open fujithuro opened 2 months ago
SQLiteで扱えるデータ型には限りがある https://www.sqlite.org/datatype3.html
そのため、下記の既存のDDLは変更する必要がある。
CREATE TABLE 費目マスター (
費目cd INTEGER PRIMARY KEY NOT NULL,
費目名 TEXT NOT NULL,
有効区分 BOOLEAN DEFAULT true NOT NULL
);
CREATE TABLE 出費履歴 (
id UUID PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
支払日 DATE NOT NULL,
費目cd INTEGER NOT NULL,
金額 INTEGER NOT NULL,
支払先 TEXT NOT NULL,
使途 TEXT NOT NULL,
最終更新者id INTEGER NOT null,
最終更新日時 TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
FOREIGN KEY (費目cd) REFERENCES 費目マスター(費目cd)
);
型にUUIDはなく、UUIDを自動生成する関数もない。 型はTEXTに変え、UUIDの生成はKotlinで行うのが良さそう。
日付や時刻を扱うための型はない。 方法としては下記の3パターンがあるようだが、計算はしないので文字列で持っていれば十分
型にBOOLEANはない。 型をINTEGERに変えて、0 or 1 で管理する。 Booleanへの変更はKotlinの中で処理する。
これらの変更点を踏まえ、ChatGPTに出してもらったのが下記のSQL。 ざっと見た感じでは問題なさそうだが、動作確認はできていないので、あくまで参考情報として。
CREATE TABLE 費目マスター (
費目cd INTEGER PRIMARY KEY NOT NULL,
費目名 TEXT NOT NULL,
有効区分 INTEGER DEFAULT 1 NOT NULL
);
CREATE TABLE 出費履歴 (
id TEXT PRIMARY KEY NOT NULL,
支払日 TEXT NOT NULL,
費目cd INTEGER NOT NULL,
金額 INTEGER NOT NULL,
支払先 TEXT NOT NULL,
使途 TEXT NOT NULL,
最終更新者id INTEGER NOT NULL,
最終更新日時 TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
FOREIGN KEY (費目cd) REFERENCES 費目マスター(費目cd)
);
導入にあたっては、依存関係を加えたうえで、設定を追加すれば良さそう
build.gradle.kts
implementation("org.xerial:sqlite-jdbc")
application.yml
spring.datasource.url=jdbc:sqlite:path/to/your/database.db
spring.datasource.driver-class-name=org.sqlite.JDBC
そのうえで、DDLなどの実行をするにはコマンドラインツールが必要そうなので、Homebrewでインストールする
brew install sqlite
現状と課題
現状は、使い慣れていることもあってPostgreSQLでデータの管理をしている。 ただ、それだとAWSなどにデプロイした際、それなりの金額がかかることを懸念している。
代替案
正直、下記の要件を考えると本格的なRDBMSを使う必要はまるでなく、SQLiteなどでも問題ないのでは?と考えている 「まずは稼働することを目指す」という意味では、最初は現状のままでもいいのだが、 お金が絡むことでもあるので、あまり突っ走らず、ちゃんと考えたい。
費目マスター
の方は別にDBのテーブルじゃなく問題ない気もする参考ページ 【AWSを使おう!】EC2にSQLiteでデータベースを構築しよう!: https://uniuni-diary.com/aws-sqlite/ AWSで爆安サーバレスRDBを構築する (個人開発向け): https://zenn.dev/nixieminton/articles/dc041d5bc8c09f
2024/08/19 追記
以前は、外出先など(主に飲食店)で出費を記録できるようにしたかったので、「まずは稼働することを目指す」というスタンスだった。 しかし今はGoogleフォームの利用により外出先での記録が実現できているので、変に焦る必要はない。 SQLiteに変える方向で進める。