家計簿アプリを作成する②【DB設計】

Python

家計簿アプリ作成【DB設計】

SQLAlchemyを使ってDBを操作するため、必要なテーブルを作成する

作成テーブル

  • ユーザー情報
  • 家計簿詳細
  • ログ
  • マスタ

ユーザー情報詳細

テーブル名:users

家計簿アプリを操作できるユーザー情報を扱う

カラム名データ型プライマリーキーNULL許可初期値詳細
user_id文字型(20)TrueユーザーID
name文字型(20)False名前
password文字型(20)Falseパスワード
del_flag文字型(1)False0削除フラグ
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)False0削除フラグ
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整数型TrueFalseログ番号
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)False0削除フラグ
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.