質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1465閲覧

CtoCのプラットフォーム系のサービスを作成する際のテーブル設計のヒントを頂きたいです

widget11

総合スコア221

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

1クリップ

投稿2019/01/24 17:13

現在データベース設計を勉強しているものです。
ランサーズのようなCtoCのプラットフォーム系のサービスのテーブル設計を考える上での質問です。
イメージ説明
以上のようなテーブルがあるとします。
m_Accounttypeテーブルは文字通りマスターテーブルでアカウント種別を管理するテーブルです。
例えばidが1のものはクリエイター、2のものはクライアントとします。
一方のt_accountTypeはトランザクションテーブルでクリエイターとクライアント共に共通する基本的な顧客情報を管理するテーブルで、外部キーにAccountTypeIdがあるとします。

ここで質問なのですが、クリエイターとクライアントは持ちたい情報が違うと思います。
以下のテーブルは飽くまでも例なので正規化やカード情報そのまま持つなとかが突っ込まないで欲しいのですが、
イメージ説明
クライアント側は当然クリエイターに対して金銭を支払わなければならないので、決済手段を持つ意味でカード情報を持ちたいです。クリエイター側は金銭を支払う訳ではないのでカード情報は絶対に必要はないとします。
逆にクリエイター側は自身が何が出来るかを示す為にスキルセットを持ちたいです。しかしクライアント側は依頼側なのでスキルセットの属性は必要ないと思います。
ここで疑問となるのが、このt_Accountをどのように設計すればよいのか、どのようにリレーションを張ればいいのかということです。
一応個人的に考えてみたのですが、、、
①t_accountにskillset属性とcardnumber属性をそのまま入れて、null許容型にする(アカウントタイプによってeditできるようにする)
イメージ説明
②null許容をする外部キーを置くべきなのでしょうか?(ClientIdとClientIdにFKを書き忘れました、)
イメージ説明
③それともアカウントテーブル自体を完全にクリエイターアカウントテーブルとクライアントアカウントテーブルの2つに分けるべきなのでしょうか?
イメージ説明

個人的に留意していただきたい点は、 1人のクライアントは多数のクリエイターに対して、ランサーズのように仕事をポストできる、また特定のクリエイターに対して個人的に仕事を依頼出来るという点で設計をしたいです。
データベース設計って非常に難しいですね。。。長くなってしまいましたがよろしくお願い致します。

set0gut1👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwbQzhMkhhgEmhU

2019/01/24 21:13

難しくてよくわかっていませんが、RDBMSの場合、テーブルが多くてJOINが多くても時間がかかるし、テーブルサイズが大きくてもハッシュやフルスキャン時の時間がかかります。どれがいいかはDBとデータ量次第かと思います。とりあえずID系は慣習として文字列にしてるところが多いです。理由は知りません。
m.ts10806

2019/01/25 02:39

wwbQzhMkhhgEmhUさん id系は普通、数値型ですよ。pkになることがほとんどなので検索や並べかえなどの観点から文字列は選択されません。 商品コードなど英字から始まるものですら、別個に数値型のidを持たせたりprefix列を別でもたせることも少なくないです。
guest

回答1

0

ベストアンサー

基本的には、好みや要件なので、お好きにどうぞという回答になると思いますが。
考慮点として

クリエイターが、クライアントとしても登録する場合を考えてみると
1~3は、以下のようなデータの管理方法になります。

1.同じデータを複数もつ(同じテーブル)
2.クエリエイター、クライアントの差分のみ別テーブルで管理
3.同じデータを複数もつ(別のテーブル)

勉強中ということなので、まずは作ってみてもいいんじゃないでしょうか。
t_accountとt_client、t_creatorのリレーションも、きっと勘違いされているようですし。
※1つのカード番号が複数のアカウントにひもづくとは考えずらい

あと、荒いエンティティで業務?が、管理できるか検討(概要設計)した方がよいかと思います。

投稿2019/01/25 07:00

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

widget11

2019/01/27 17:13

分かりやすい回答をありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問