現在データベース設計を勉強しているものです。
ランサーズのようなCtoCのプラットフォーム系のサービスのテーブル設計を考える上での質問です。
以上のようなテーブルがあるとします。
m_Accounttypeテーブルは文字通りマスターテーブルでアカウント種別を管理するテーブルです。
例えばidが1のものはクリエイター、2のものはクライアントとします。
一方のt_accountTypeはトランザクションテーブルでクリエイターとクライアント共に共通する基本的な顧客情報を管理するテーブルで、外部キーにAccountTypeIdがあるとします。
ここで質問なのですが、クリエイターとクライアントは持ちたい情報が違うと思います。
以下のテーブルは飽くまでも例なので正規化やカード情報そのまま持つなとかが突っ込まないで欲しいのですが、
クライアント側は当然クリエイターに対して金銭を支払わなければならないので、決済手段を持つ意味でカード情報を持ちたいです。クリエイター側は金銭を支払う訳ではないのでカード情報は絶対に必要はないとします。
逆にクリエイター側は自身が何が出来るかを示す為にスキルセットを持ちたいです。しかしクライアント側は依頼側なのでスキルセットの属性は必要ないと思います。
ここで疑問となるのが、このt_Accountをどのように設計すればよいのか、どのようにリレーションを張ればいいのかということです。
一応個人的に考えてみたのですが、、、
①t_accountにskillset属性とcardnumber属性をそのまま入れて、null許容型にする(アカウントタイプによってeditできるようにする)
②null許容をする外部キーを置くべきなのでしょうか?(ClientIdとClientIdにFKを書き忘れました、)
③それともアカウントテーブル自体を完全にクリエイターアカウントテーブルとクライアントアカウントテーブルの2つに分けるべきなのでしょうか?
個人的に留意していただきたい点は、 1人のクライアントは多数のクリエイターに対して、ランサーズのように仕事をポストできる、また特定のクリエイターに対して個人的に仕事を依頼出来るという点で設計をしたいです。
データベース設計って非常に難しいですね。。。長くなってしまいましたがよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー