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

Python

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

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

作成テーブル

  • ユーザー情報
  • 家計簿詳細
  • ログ
  • マスタ
  • 店舗マスタ
  • CSV取込列マスタ

ユーザー情報詳細

テーブル名: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日付時間更新時間
update_version整数型False0更新管理
# ユーザー情報
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"))
    )
    # 更新管理
    update_version: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)

家計簿詳細

テーブル名: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日付時間更新時間
update_version整数型False0更新管理
# 家計簿詳細
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"))
    )
    # 更新管理
    update_version: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)

ログ

テーブル名: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文字型(20)TrueマスタID
M_code文字型(20)Trueマスタコード
M_text文字型Falseテキスト
del_flag文字型(1)False0削除フラグ
entry_user_id文字型(20)False登録ユーザー
entry_at日付型False日付時間登録時間
update_user_id文字型(20)True更新ユーザー
update_at日付型True日付時間更新時間
update_version整数型False0更新管理
# マスタ
class Master(Bass):
    __tablename__ = "master"
    # マスタID
    m_id: Mapped[str] = mapped_column(String(20), primary_key=True)
    # マスタコード
    m_code: Mapped[str] = mapped_column(String(20), 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), 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"))
    )
    # 更新管理
    update_version: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)

店舗マスタ

テーブル名:shop_master

店舗情報を扱う

カラム名データ型プライマリーキーNULL許可初期値詳細
seq整数型True番号
code文字型(20)Falseコード
name文字型(20)False店舗名
del_flag文字型(1)False0削除フラグ
entry_user_id文字型(20)False登録ユーザー
entry_at日付型False日付時間登録時間
update_user_id文字型(20)True更新ユーザー
update_at日付型True日付時間更新時間
update_version整数型False0更新管理
# 店舗マスタ
class Shop_Master(Bass):
    __tablename__ = "shop_master"
    # 番号
    seq: Mapped[int] = mapped_column(Integer, primary_key=True)
    # HABKindsコード
    code: Mapped[str] = mapped_column(String(20), nullable=False)
    # 店名
    name: Mapped[str] = mapped_column(String(20), nullable=False)
    # 削除フラグ
    del_flg: Mapped[str] = mapped_column(String(1), 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"))
    )
    # 更新管理
    update_version: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)

CSV取込列マスタ

テーブル名:CSV_master

CSV取込列情報を扱う

カラム名データ型プライマリーキーNULL許可初期値詳細
code文字型(20)True会社コード
HAB_at_text文字型(20)False利用日時列名
amount_text文字型(20)False金額列名
HABdetail_text文字型(20)False家計簿詳細列名
character_code文字型(20)False文字コード
del_flag文字型(1)False0削除フラグ
entry_user_id文字型(20)False登録ユーザー
entry_at日付型False日付時間登録時間
update_user_id文字型(20)True更新ユーザー
update_at日付型True日付時間更新時間
update_version整数型False0更新管理
# CSV取込列マスタ
class CSV_Master(Bass):
    __tablename__ = "CSV_master"
    # 会社コード
    code: Mapped[str] = mapped_column(String(20), primary_key=True)
    # 利用日時列名
    HAB_at_text: Mapped[str] = mapped_column(String(20), nullable=False)
    # 金額列名
    amount_text: Mapped[str] = mapped_column(String(20), nullable=False)
    # 家計簿詳細列名
    HABdetail_text: Mapped[str] = mapped_column(String(20), nullable=False)
    # 文字コード
    character_code: Mapped[str] = mapped_column(String(20), nullable=False)
    # 削除フラグ
    del_flg: Mapped[str] = mapped_column(String(1), 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"))
    )
    # 更新管理
    update_version: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)

全体コード(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.