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

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

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

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

SQL

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

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

3回答

1824閲覧

メルカリやヤフオクなどの取引掲示板はどのようなテーブルのリレーションになっているのでしょうか?

widget11

総合スコア221

MySQL

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

SQL

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

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

5クリップ

投稿2019/01/27 17:12

編集2019/01/28 02:39

DB設計の勉強をしております。
メルカリやヤフオクでは落札や購入アクションが起こると取引掲示板なる1対1の掲示板に飛ぶと思います。
例えば一般的な掲示板では1つのborard(掲示板)が多数のcomments(コメント)を持つという意味で、1:Nのリレーションを張れると思います。ユーザー情報(id)はboard、comments共に入っていると思います。

しかし、メルカリのような取引掲示板のテーブルのリレーションのイメージが全く付きません。
購入までのフローには1つの商品に対して多数のユーザーが購入を希望していて、お気に入り等のアクションを行っていると思いますが購入した途端、1対1の掲示板を行えるリレーションがよくわかりません。
簡易的なER図を作って見たのですが、、、(属性は色々省いているところがあります)
イメージ説明

ヤフオクもメルカリもユーザーは出品も購入も出来ると思いますが、出品者と購入者のテーブルを便宜上分けております(正直なところを申しますとユーザーモデルという一つのリソースから購入も出品もするかというER図の書き方と実装をよくわかっておりません。。。)

このように商品に対してユーザーと購入者が紐付いていて、商品状態(マスターテーブル)の値をProductsテーブルでアップデートさせること取引中などにして、取引掲示板に遷移できるようにしているのだと考えました。
しかしここで取引掲示板のテーブルやその属性はどのようにリレーションさせれば良いかよく分からなかったです。

そもそも、このER図も間違ったものだと思いますが、、、DB設計初心者なこともあり分からないことだらけです。
よろしくお願い致します。

【追記】

テーブル構造をメルカリやヤフオクが外部に漏らす訳もないので、
推測の域でもオリジナルでも構わないのですが、もしよろしければ皆さんが設計するならどのようなリレーションにするか、またこの機能を実現する上でこのようにすれば真っ当に動くようなものが作れるといったものを参考にしたいです。(最低限どのようなテーブルが必要か、またそのテーブル群がどのようにリレーションされるか等)

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

ユーザーテーブル、プロダクトテーブルがそれぞれ存在するとして、

取引成約情報テーブル

  • PK id
  • プロダクトID
  • 出品者のユーザID
  • 購入者のユーザID
  • その他必要な情報を必要なだけ(購入数とか落札日時とか)

プロダクトID、出品者のユーザID、購入者のユーザIDを複合ユニークキーとする
複合ユニークキーをPKにしてもいいけど、メッセージテーブルと連携させるのが面倒になるのでサロゲートキーにしています。

メッセージテーブル

  • PK id
  • 取引制約情報テーブルid
  • From ユーザID
  • To ユーザID
  • 発信日時

みたいな感じにすればよくある取引連絡メッセージは実装出来ますし、商品が複数個あって別々の人に販売した場合にも個別メッセージのやり取りが可能です。

一足飛びに設計能力を身に着けるのは無理なので、

  1. まずは画面イメージを描いて必要になる情報を全て列挙する
  2. とにかく必要な情報が成立する様にテーブルを作ってみる
  3. 正規化によって重複データを排除していく

という感じで進めていくとだんだんと設計出来る様になっていくかと思います。

投稿2019/01/28 15:40

編集2019/01/29 01:14
tanat

総合スコア18713

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

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

widget11

2019/01/28 22:30

ご回答ありがとうございます! 少し質問なのですがメッセージテーブルの取引履歴テーブルidは取引成約情報テーブルの主キー、つまりメッセージテーブルから見ると外部キーに当たるものなのでしょうか?(恐らく取引成約情報が履歴のような形となっているのでそうなのだとは思いますが。。。) また、
tanat

2019/01/29 01:15

すみません、テーブル名を回答中に変更したときに混ざってしまったようです。(回答修正しました) 内容としてはご理解の通りです。
guest

0

個人的には気になる話題なので、ズバリの回答がつくとよいのですが

多分、質問にある

メルカリやヤフオクなどの取引掲示板はどのようなテーブルのリレーションになっているのでしょうか?

といった情報は、セキュリティ上の問題やナレッジの問題があり、外部には出てきません。
エンジニアのブログがあるのでそこから推測するしか無いと思います。

主要データベースの増え続けるdisk容量の対応事例
とか
WEB+DB PRESS Vol.100の特集記事は「メルカリ開発ノウハウ大公開」です!

WEB+DB PRESS は総集編[Vol.1~102] があるので、そちら買いかもw

投稿2019/01/28 01:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2019/01/28 01:21

> そこから推測するしか無い これにつきますよね。実際の動き確認して想像して整合性とって。
退会済みユーザー

退会済みユーザー

2019/01/28 01:22

俺としては「ズバリの回答」がほしいw
m.ts10806

2019/01/28 01:31

それって実際に開発に関わっている人以外無理じゃ;;;
widget11

2019/01/28 02:36

ご回答ありがとうございます。 そうですよね外部の人間が分かる由もないのですが、、、 もしよろしければ皆さんが設計するならどのようなリレーションにするか、またこの機能を実現する上でこのようにすれば真っ当に動くようなものが作れるといったものを参考にしたいです。
退会済みユーザー

退会済みユーザー

2019/01/28 02:54

DB の設計って、 エンティティの洗い出し 正規化 (ER図の作成) の順で行われます。 エンティティの洗い出しが出来ていないのに ER 図を作成するとかありえません。 エンティティの洗い出しを行ってください。 *俺が「ズバリの回答がほしい」と言っているのは、エンティティ一覧をカンニングしたいからですw カンニング元としては、OSS を漁るのも一般的です。
退会済みユーザー

退会済みユーザー

2019/01/29 02:22

WEB+DB PRESS 総集編がさっき届いたんで中身確認したけど、残念ながら DB 周りのナレッジは薄かったです。。。
guest

0

単純化するなら、取引が確定した時点で別テーブルにデータ作ってそっちを見るようにすればよいような。
※products に、確定テーブル側の ID を記録する

投稿2019/01/28 02:51

tacsheaven

総合スコア13703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問