第一マイルストーンに対するデータベースインタフェース
第一マイルストーンに対するデータベースインタフェース
データベースの物理モデルから、以下のインタフェースを満たすようなデータベース操作クラスを構築すること。
以下の定義をもとにして定義する。
エンティティ(実体; Entity)の定義
レベル上の記録型(LevelRecord)の定義
特別なエンティティのデータ表現
型は参考程度
未割当のというのは、「IDをプロパティから取り除いた」ということを意味する。
table:IRecordDataBase
機能名 仕様 入力->出力
register 与記録をDBに保存する。 未割当の記録 -> 割り当てられた記録のID
searchRecordsWith タグを用いて、そのタグを持つ記録を検索する タグID集合 -> 記録集合
fetch 与えられたIDに対応する記録の詳細を返す。 記録ID -> 記録
delete 与IDに対応する記録を削除する。 記録ID -> void
table:IPrerecordDataBase
機能名 仕様 入力->出力
register 与審査前記録をDBに保存する。 未割当の審査前記録 -> 審査前記録ID
fetch 与IDに対応する審査前記録の詳細を返す。 審査前記録ID -> 審査前記録
delete 与IDに対応する審査前記録を削除する。 審査前記録ID -> void
table:ITagDataBase
機能名 仕様 入力->出力
register 与タグをDBに記憶する。 未割り当てのタグ -> タグID
resolveID 与タグIDの名称を指定された言語で返す。 (タグID, 指定言語) -> 文字列
searchTagCandidates 渡された検索文字列に部分一致するタグを列挙する。 (検索文字列, 指定言語) -> タグID一覧
fetchCategoryEntity 与タグに対応するカテゴリの詳細情報を返す。 カテゴリのタグID -> カテゴリ
なぜ直接データベースを使わず、データベースとの中間層にインタフェースを作るのか?
必要とされている機能を見出し、適切な論理モデルを作るため。
Firestoreに依存しないような設計を行いたいため。
もしFirestoreから乗り換えるようなことがあっても、
別のデータベースのシステムからこのインタフェースを満たすようなデータベース操作クラスを作ってしまえば、APIの全体の改造を避けられる。
必要なデータ構造を見極めるため。
#2023-03-23
データベースインタフェースが満たすべき仕様をタグの定義見直しに合わせ見直した
自然言語で記述し直した。
これにより、定義に必要な程度で幅を持たせた。