コンテンツにスキップ

ORM設計

全般

  • SQLModelを利用
    • FastAPIと同じ作者のsqlalchemyとpydanticのラッパー
  • 必要に応じて基底クラスを作る
    • プレフィックス毎の性質共通化ぐらいまで
  • SQLModelの基本的な記述だけだと困る場合、schemaspy記述も併用する
  • アプリで利用するリレーションは正しく貼る
    • 単数系か複数系かで1:nの関係を正しく記述すること
    • 外部キーやback_populates等のオプション記述も必要に応じて正しく記述する
  • ドキュメントリバース対応としてコメントは入れる。コメントで書ききれないものは別途記述する。

命名規則

  • クラス名
    • クラス名PEP8に倣い、CapWords方式で記載する。
    • mやtのような役割プレフィックスは正しく振ること
  • テーブル名
    • テーブル名はRDB側はケース・インセンシティブなのでsnake_caseとする。
    • mやtのような役割プレフィックスは正しく振ること
  • プロパティ
    • 予約プロパティは必要に応じて組み込む
    • それ以外のプロパティはシンプルな記述を心がける

テーブル名(クラス名)プレフィックス

文字 意味
m マスタ
t トランザクション
h ヒストリ

予約プロパティ

プロパティ Python型ヒント sqlmodel.Field の参考 役割
code str Field(max_length = 2, nullable=False, unique=True) 意味のある記号列採番
created_at datetime 作成日
updated_at datetime 更新日、楽観的ロック