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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

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

PostgreSQL

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

4回答

8978閲覧

遷移するステータスを持つDB設計例を教えてください。

Yuuuya_mmm

総合スコア11

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

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

PostgreSQL

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/10/07 14:01

前提・実現したいこと

状態が承認待ち→納品待ち→完了等と遷移する場合のDB設計が経験と調べても同じケースが見当たらないので質問させていただきます。

以下のテーブルどちらの設計の方が良いか、また、なにか良い設計例や資料があれば掲示していただけると助かります

現状

動画等の売買できるアプリケーションを開発しています。
実装を進めながら、現在DB設計をを行っています。
(UML等準備していなくてすいません。)

投稿したコンテンツに対して、(オファー) →承認待ち状態 → (承認orキャンセル) →納品待ち状態 → (納品) → 完了 のようなフローを購入納品までに想定しています。
※()をアクション、()無し部分を状態とする。

設計例(1 と 2 を記載しました)

購入フローテーブル1

投稿購入者状態
movieuser承認待ち状態

上記の状態カラムを納品待ち→完了と変更していくのはどうでしょうか? 承認日等を後々参照する際に不便??

購入フローテーブル2-ターゲット

投稿購入者要望
movieuserその他

購入フローテーブル2-オファー承認

key投稿日付
movie10/10

購入フローテーブル2-オファー拒否

key投稿理由日付
movie忙しい10/10

購入フローテーブル2-承認後キャンセル

key投稿理由日付
movieまた今度10/15

購入フローテーブル2-納品完了

key投稿商品日付
movieimage_file10/20

テーブルを状態毎に管理するパターンです
納品場所はステータスの管理とは別で準備したほうがよさそう。ですが構成的にはどうなのでしょうか?

補足情報(FW/ツールのバージョンなど)

DBはpostgresql or Mysql予定です
Djangoでバックエンドの開発を現在進めています。

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

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

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

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

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

guest

回答4

0

こんな感じはいかがでしょうか?

イメージ説明

要望は一方的に伝えるのみなのか、チャットのようにやり取りできるようにするのかにもよると思いますが、やり取りできるようにするなら、下記のようなテーブルを追加してもよいと思います。

イメージ説明

オファーした人全員にやり取りが見えることを前提としたので、contents_id に紐付けていますが、offer_idに紐づけて、1対1のやり取りにしてもよいと思います。

投稿2020/10/07 16:17

編集2020/10/08 06:20
takutakuya

総合スコア979

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

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

Yuuuya_mmm

2020/10/07 21:48

いつも勉強になります。 購入者からの要望、キャンセル理由等はまた別テーブル用意ってイメージでしょうか??
takutakuya

2020/10/08 03:46

オファーテーブルに持たせてもよいと思いますし、別テーブルでもよいと思います。
Yuuuya_mmm

2020/10/08 10:30

他の方の一つのレコードで管理する方向で進めたいと思います 回答ありがとうございます参考になりました!
guest

0

ベストアンサー

私の場合ですと両案の中間といった形でしょうか
|投稿|状態|ターゲットId|承認日|オファー確認|オファー拒否Id|承認日|キャンセルId|納品日|納品Id|
|:--|:--:|:--:|:--:|:--:|:--:|:--:|:--:|--:|
|movie|納品完了|userid1|2020/10/09|2020/10/10||2020/10/11||2020/10/11|DeliveryId1|
|movie|承認待ち|userid2|||||||DeliveryId2|
|movie|承認|userid3|2020/10/09||||||DeliveryId3|
|movie|オファー確認|userid4|2020/10/10|2020/10/11|||||DeliveryId4|
|movie|オファー拒否|userid5|2020/10/10|2020/10/11|RejectId1||||DeliveryId5|
|movie|キャンセル|userid6|2020/10/11|2020/10/12||2020/10/13|CancelId1||DeliveryId6|
|movie|納品まち|userid7|2020/10/12|2020/10/13||2020/10/14|||DeliveryId7|

基本の状態は1テーブルで付随する情報が発生する場合は、サブのテーブルへとします。
一覧で確認する際は細かい理由などいらないはず。
それは詳細画面で個別確認できればよいですし、後からSQLで結合する事も可能。

追記
承認待ち・承認・納品まち時のレコードおよび承認日・納品日項目を追加しました。

とこんな感じでしょうか?

注意点
巻き戻しも考慮しておいた方が良いですよ。
例として一度「オファー拒否」として、あとから「オファーOK」とできて、また履歴が残るように。

投稿2020/10/07 14:46

編集2020/10/08 04:06
kuma_kuma_

総合スコア2506

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

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

Yuuuya_mmm

2020/10/07 21:38

回答ありがとうございます。 理解できてなくて申し訳ないのですが、これは承認待ちから承認された場合は、状態を変更して、更新した日時を追加するイメージでしょうか?
kuma_kuma_

2020/10/08 03:48 編集

そうです。(追加ではなく更新ですが)
Yuuuya_mmm

2020/10/08 10:31

この設計で進めていきたいと思います。ありがとうございました!
guest

0

趣味で学習中なので、薄っぺらい知識ですが。。。

イベント・ソーシングという考え方があります。
差し戻しが複数回発生する可能性があり、かつその事由が重要なシステムとは親和性が良い設計だと思います。

投稿2020/10/08 03:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yuuuya_mmm

2020/10/08 10:14

回答ありがとうございます。 まったく知らなかったことを知れましたありがとうございます! 今回のプロジェクトでは別の設計で進みたいと思います
guest

0

以下のテーブルどちらの設計の方が良いか

1は一つのテーブルで管理、2は複数のテーブルで管理という事でしょうか?
複数で構成されても良いでしょうけど、その場合でも基本的な管理のテーブルを軸に、詳細用に別なテーブルを用意する方が良いでしょうね。

なにか良い設計例や資料があれば掲示していただけると助かります

「テーブル設計 状態遷移」や「テーブル設計 ワークフロー」あたりで検索すれば良さそうです。
「マイルストーン」というキーワードについても調べてみる価値はあると思います。

投稿2020/10/07 14:35

編集2020/10/07 14:38
sazi

総合スコア25327

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

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

Yuuuya_mmm

2020/10/07 21:39

回答ありがとうございます。 詳細は分けて管理します! 参考資料ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問