家計簿アプリ作成【DB設計】
SQLAlchemyを使ってDBを操作するため、必要なテーブルを作成する
作成テーブル
- ユーザー情報
- 家計簿詳細
- ログ
- マスタ
ユーザー情報詳細
テーブル名:users
家計簿アプリを操作できるユーザー情報を扱う
カラム名 | データ型 | プライマリーキー | NULL許可 | 初期値 | 詳細 |
user_id | 文字型(20) | True | – | – | ユーザーID |
name | 文字型(20) | – | False | – | 名前 |
password | 文字型(20) | – | False | – | パスワード |
del_flag | 文字型(1) | – | False | 0 | 削除フラグ |
entry_user_id | 文字型(20) | – | False | – | 登録ユーザー |
entry_at | 日付型 | – | False | 日付時間 | 登録時間 |
update_user_id | 文字型(20) | – | True | – | 更新ユーザー |
update_at | 日付型 | – | True | 日付時間 | 更新時間 |
# ユーザー情報
class User(Bass):
__tablename__ = "users"
# ユーザーID
user_id: Mapped[str] = mapped_column(String(20), primary_key=True)
# 名前
name: Mapped[str] = mapped_column(String(20), nullable=False)
# パスワード
password: Mapped[str] = mapped_column(String(20), nullable=False)
# 削除フラグ
del_flg: Mapped[str] = mapped_column(String(1), nullable=False, default="0")
# 登録ユーザー
entry_user_id: Mapped[str] = mapped_column(String(20), nullable=False)
# 登録時間
entry_at: Mapped[datetime] = mapped_column(
DateTime, nullable=False, default=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
# 更新ユーザー
update_user_id: Mapped[str] = mapped_column(String(20), nullable=True)
# 更新時間
update_at: Mapped[datetime] = mapped_column(
DateTime, nullable=True, onupdate=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
家計簿詳細
テーブル名:HAB_detail (※HABはhousehold_account_bookの略)
“いつ”、”どこで”、”何に”支払をしたか、入金があったのかの情報を扱う
カラム名 | データ型 | プライマリーキー | NULL許可 | 初期値 | 詳細 |
HAB_seq | 整数型 | True | – | – | 詳細番号 |
HAB_kbn | 文字型(1) | – | False | – | 入出金区分 |
HAB_at | 日付型 | – | False | – | 利用日時 |
amount | 整数型 | – | False | – | 金額 |
HABkinds | 文字型(20) | – | False | – | 詳細種類 |
HABdetail | 文字型 | – | False | – | 家計簿詳細 |
del_flag | 文字型(1) | – | False | 0 | 削除フラグ |
entry_user_id | 文字型(20) | – | False | – | 登録ユーザー |
entry_at | 日付型 | – | False | 日付時間 | 登録時間 |
update_user_id | 文字型(20) | – | True | – | 更新ユーザー |
update_at | 日付型 | – | True | 日付時間 | 更新時間 |
# 家計簿詳細
class HAB_Detail(Bass):
__tablename__ = "HAB_detail"
# 詳細番号
HAB_seq: Mapped[int] = mapped_column(Integer, primary_key=True)
# 入出金区分
HAB_kbn: Mapped[str] = mapped_column(String(1), nullable=False)
# 利用日時
HAB_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
# 金額
amount: Mapped[int] = mapped_column(Integer, nullable=False)
# 詳細種類
HABkinds: Mapped[str] = mapped_column(String(20), nullable=False)
# 家計簿詳細
HABdetail: Mapped[str] = mapped_column(Text, nullable=False)
# 削除フラグ
del_flg: Mapped[str] = mapped_column(String(1), default="0")
# 登録ユーザー
entry_user_id: Mapped[str] = mapped_column(
String(20), ForeignKey("users.user_id"), nullable=False
)
# 登録時間
entry_at: Mapped[datetime] = mapped_column(
DateTime, nullable=False, default=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
# 更新ユーザー
update_user_id: Mapped[str] = mapped_column(
String(20), ForeignKey("users.user_id"), nullable=True
)
# 更新時間
update_at: Mapped[datetime] = mapped_column(
DateTime, nullable=True, onupdate=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
ログ
テーブル名:log
“いつ”、”誰が”、”どの画面で”、”どの操作”をしたのかの情報を扱う
カラム名 | データ型 | プライマリーキー | NULL許可 | 初期値 | 詳細 |
log_seq | 整数型 | True | False | – | ログ番号 |
log_kinds | 文字型(1) | – | False | – | ログ種類 |
function_id | 文字型(20) | – | False | – | 処理ID |
log_detail | 文字型 | – | False | – | ログ詳細 |
user_id | 文字型(20) | – | False | – | 操作ユーザー |
at | 日付型 | – | False | 日付時間 | 操作時間 |
# ログ
class Log(Bass):
__tablename__ = "log"
# ログ番号
log_seq: Mapped[int] = mapped_column(Integer, primary_key=True)
# ログ種類
log_kinds: Mapped[str] = mapped_column(String(1), nullable=False)
# 処理ID
function_id: Mapped[str] = mapped_column(String(20), nullable=False)
# ログ詳細
log_detail: Mapped[str] = mapped_column(Text, nullable=False)
# 操作ユーザー
user_id: Mapped[str] = mapped_column(
String(20), ForeignKey("users.user_id"), nullable=False
)
# 操作時間
operate_at: Mapped[datetime] = mapped_column(
DateTime, nullable=False, default=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
マスタ
テーブル名:master
マスタ情報を扱う
カラム名 | データ型 | プライマリーキー | NULL許可 | 初期値 | 詳細 |
M_id | 文字型(10) | True | – | – | マスタID |
M_code | 文字型(10) | True | – | – | マスタコード |
M_text | 文字型 | – | False | – | テキスト |
del_flag | 文字型(1) | – | False | 0 | 削除フラグ |
entry_user_id | 文字型(20) | – | False | – | 登録ユーザー |
entry_at | 日付型 | – | False | 日付時間 | 登録時間 |
update_user_id | 文字型(20) | – | True | – | 更新ユーザー |
update_at | 日付型 | – | True | 日付時間 | 更新時間 |
# マスタ
class Master(Bass):
__tablename__ = "master"
# マスタID
m_id: Mapped[str] = mapped_column(String(10), primary_key=True)
# マスタコード
m_code: Mapped[str] = mapped_column(String(10), primary_key=True)
# マスタテキスト
m_text: Mapped[str] = mapped_column(Text, nullable=False)
# 削除フラグ
del_flg: Mapped[str] = mapped_column(String(1), default="0")
# 登録ユーザー
entry_user_id: Mapped[str] = mapped_column(
String(20), ForeignKey("users.user_id"), nullable=False
)
# 登録時間
entry_at: Mapped[datetime] = mapped_column(
DateTime, nullable=False, default=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
# 更新ユーザー
update_user_id: Mapped[str] = mapped_column(
String(20), ForeignKey("users.user_id"), nullable=True
)
# 更新時間
update_at: Mapped[datetime] = mapped_column(
DateTime, nullable=True, onupdate=lambda: datetime.now(ZoneInfo("Asia/Tokyo"))
)
全体コード(GitHub)
household_account_book/db/models.py at main · SakumaTakayuki/household_account_book
Contribute to SakumaTakayuki/household_account_book development by creating an account on GitHub.