Closed maeda-m closed 3 years ago
url-shortening-api のエンティティを抽出する。
※ kawasima
さんのイミュータブルデータモデル(Scrapbox、入門編、世代編)を参考にする(理解したとは言っていない)
※ 更新なし縛り(削除はありよりのあり)
※ 太文字はエンティティとその属性の候補(5W1H)と考えている ※ 誰かは実装(詳細)になりそうなので曖昧にしている
短縮名称は置いておく。
エンティティの 日本語名 |
エンティティの 英語名 |
5W1Hの 分類 |
エンティティの 分類 |
---|---|---|---|
匿名利用者 | Anonymous user | Who | リソース |
短縮前URL | Original URL | What/Where | リソース |
短縮後URL | Short URL | What/How | リソース |
送信 | Post | Why | イベント |
発行 | Publish | Why | イベント |
要求 | Get | Why | イベント |
応答 | Response | Why | イベント |
複数の日時属性・ステータス遷移管理(子・詳細イベント)や世代管理(予実、動的参照関係、バージョンタグ)はなさそうなので置いておく。
エンティティ | 識別範囲 | 単一性 | 同一性 |
---|---|---|---|
匿名利用者 | 類似なし | - | セッションIDが同じ時 |
短縮前URL | 短縮後URLは含めない | - | 全て別と考える |
短縮後URL | 短縮前URLとは異なる | - | 全て別と考える |
送信 | 匿名利用者が送信したものを指す | - | 全て別と考える |
発行 | 送信に対するものを指す | - | 全て別と考える |
要求 | 匿名利用者が要求したものを指す | - | 全て別と考える |
応答 | 要求に対するものを指す | - | 全て別と考える |
ER図を描きながら、リソース間のリレーションシップの依存関係を考えたり、非依存のリレーションシップの間に隠れる交差エンティティを考える。
classDiagram
R匿名利用者 "1" --> "0..1" E送信
E送信 "1" --> "1" R短縮前URL
E送信 "1" --> "1" E発行
E発行 "1" --> "1" R短縮後URL
E発行 "1" --> "1" R匿名利用者
R匿名利用者 "1" --> "N" E要求
E要求 "1" --> "1" E応答
E応答 "1" --> "1" R匿名利用者
E応答 "1" --> "N" R短縮前URL
E応答 "1" --> "N" R短縮後URL
class E送信 {
ID 短縮前URL
}
class E発行 {
ID 短縮後URL
}
class E要求 {
ID 匿名利用者
}
class E応答 {
ID 短縮前URL
ID 短縮後URL
}
classDiagram
R匿名利用者 "1" --> "0..1" E送信
E送信 "1" --> "1" Rリンク集
Rリンク集 "N" --> "1" R匿名利用者
R匿名利用者 "1" --> "N" E要求
E要求 "1" --> "N" Rリンク集
class Rリンク集 {
ID 匿名利用者
短縮前URL
短縮後URL
}
class E送信 {
ID リンク集
}
class E要求 {
ID 匿名利用者
}
論理データモデルとしては上記の内容で十分そうだ。 物理は次のポイントを抑えるべきだが、匿名利用者と発行されたURLを定期的に削除する制約を持たせれば問題は発生しなさそう(発行されたURLの永続性は無視している)。
考えたので Close する