データベーステーブル設計の基礎の基礎〜エンティティの抽出・定義から正規化までを拝読して

データベーステーブル設計手順は3つのフェーズ「エンティティの抽出」「エンティティの定義」「正規化」に分けられる

今回はアウトプットの為に記事を見ながら馴染みのあるTwitterに当てはめて考えてみる。

テーブル設計フェーズ1「エンティティの抽出」

エンティティ(実体)とは、ある共通項を持ったデータの集合体のこと。
物理的なエンティティの例:社員、店舗、商品など
概念的なエンティティの例:購入履歴、進捗状況など
最初にすべきは粒度の大きなエンティティを抽出すること

(自分が思う)Twitterの粒度の大きなエンティティ
・ユーザー
・ツイート
・フォロワー

次はエンティティ同士でどんな出来事・状態変化が起きるか?を考えていく。
例えば車をweb上で販売するサービスの場合、「お客さんが車を注文する」という出来事は絶対に起こりますし、取引の記録を残しておかなければまずい。その出来事そのものが、1つの概念的なエンティティになります。(記事より)
エンティティ「車」ーエンティティ「注文履歴」ーエンティティ「顧客」
これらを考えるコツ。それは
「システムがどう使われるのか、脳内で入念にシミュレーションすること」「要件の不明点を丁寧につぶしていくこと」
Twitterでいうとツイートを投稿する、ツイートを見る、いいねする、リツイートする、共有する、報告する。ユーザーのミュート、ブロック。フォローする、フォローされる、フォロー解除する、される。ツイートの検索、ランキング、通知設定、アカウント管理などなど。
既存アプリのエンティティを考えるだけでも相当な数が挙げられる。

テーブル設計フェーズ2 「エンティティの定義」

各エンティティがどのようなデータ(カラム)を保持すべきかを定義するフェーズ。
必要なカラムは「起こりうるユースケース」「最終的にアウトプットすべき内容」をベースに導き出す。
とても参考になったのでそのまま抜粋
Image from Gyazo まさに「起こりうるユースケース」から「最終的にアウトプットすべき内容」へ落とし込んでいる。 Twitterでは例えば以下の流れが当てはまるかなと思った。

設定で特定のユーザーをブロックする

特定のユーザーがブロックされた状態と、ブロックしたユーザーを保持しておく必要がある

ユーザーの状態を持つエンティティが必要ではないか?
ブロックしたユーザーidを保管するエンティティが必要ではないか?

それぞれのテーブル、カラムを実装する

ユースケースはそれこそ数多く存在するので初期段階で全てを取りこぼさず網羅するのはかなり大変だと思う。

テーブル設計フェーズ3 「正規化」

正規化はより優れた設計にする為に、各テーブルに持たせるデータの種類を最適化していくフェーズです。「あるテーブルが持っている情報のうち、特定の情報のみを別テーブルに切り出す」という方法をとることが一般的です。とのこと。
具体例は記事内の受講者と講義が分かりやすかったのですが大切だと思ったのは正規化により「他のデータの状態に依存せず、独立して存在して欲しいデータ」を別テーブルに移しますという点。
このへんは記事内でも事例が載っている他、「マンガでわかるデータベース」にて第一正規化、第二正規化、第三正規化というように現実の事象をエンティティで1つの表に表した後、依存関係にあるカラムを別のテーブルに切り出して主キーと外部キーで関係性を持たせることをやっていたのでそれを参照すると良いと思う。
ただしデータベース設計において正規化することが目的になってはいけない。やるべきことは壊れない設計。これを忘れないようにしたい。

データベースの本質的な目的

データベースとは「データを安全に壊れないように保存してくれて、高速に取り出せるツールである」
その他、カラム名命名時の注意点が載っている。大切なのは開発者だけが分かるのではなく、誰が見ても分かる名前をつけるべきであること。それは命名だけでなくテーブル設計全体でも言えること。
初めてテーブル設計したものは後から自分が見直しても「これなんのデータが入ったカラムだろう?」となりそうなテーブル設計だったので再度作り直す際はこれに注意していこうと思う。

参考記事:データベーステーブル設計の基礎の基礎〜エンティティの抽出・定義から正規化まで

2021/10/04 PFについて

Men's美容系

写真から眉毛を検知し、カッコ良い眉毛と入れ替える

  • 1.顔から眉を判定
  • 2.既存の眉を削除
  • 3.複数パターンから眉を選択
  • 4.自分の顔に眉を乗せる
  • 5.近場で眉毛サロンを探す

顔認識系APIで見つけたもの

azure.microsoft.com

画像から顔を検出する。性別や年齢、感情まで検知する

firebase.google.com

顔の目、鼻、口、眉の座標データを取得する
・PUX画像認識API
- 顔や顔のパーツ(目、鼻、口、眉毛)検出
- 2018に提供停止してた

地図系

Google Maps JavaScript API

位置情報から周辺のスポット検索

Foursquare Places API

その他顔認証APIまとめ

人気の顔認識API トップ10 – Rakuten RapidAPI Blog

まとめ

他にトークデッキ系、動画コメント反応系を検討してたが講師と面談した結果、「使ってもらえなさそう」「美容系に比べて熱意がない」とのFB。 プレゼンしてる最中も反応がよくなくて焦った(笑) 男性特化の美容系へ突き進むことにする。自分では面白そうと思っても他人からすると全く引っかからないこともあることを痛感した。