ORM設計¶
全般¶
- SQLModelを利用
- FastAPIと同じ作者のsqlalchemyとpydanticのラッパー
- 必要に応じて基底クラスを作る
- プレフィックス毎の性質共通化ぐらいまで
- SQLModelの基本的な記述だけだと困る場合、schemaspy記述も併用する
- アプリで利用するリレーションは正しく貼る
- 単数系か複数系かで1:nの関係を正しく記述すること
- 外部キーやback_populates等のオプション記述も必要に応じて正しく記述する
- ドキュメントリバース対応としてコメントは入れる。コメントで書ききれないものは別途記述する。
- ER図生成による可視化はschemaspyなどを用いてマイグレーション後のDDLからリバースする
- どのように型変換されるかは理解しておくこと
命名規則¶
- クラス名
- クラス名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 | 更新日、楽観的ロック |