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

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

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

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

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

3回答

725閲覧

データベースの設計について

Clementine

総合スコア158

MySQL

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

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2020/02/18 03:03

前提条件

ユーザ毎に提案を管理できるウェブアプリケーションの新規開発案件
があるとします。
このデータベースの内容は以下のような定義をしたとします。

データベースの構造

  • users ユーザテーブル

id、username等・・・

  • articles 提案書

id、user_id、title、content等・・・

このアプリケーションは将来的な拡張性を考慮して開発するようにとの事ですが
将来的に何をするのか?具体的なビジョンはなく開発者自身で推測の上
考えなくてはいけない状況だとします。

考えた末、ユーザの機能として既存の提案書以外に日報やメモなどこれに類似するような
機能は追加されても対応できるようにと考えるようになりました。

仮に日報機能を追加する事になった場合、対応する方法として主に以下の2つの方法が上がります。

  • 方法1

新たにreportsテーブルを作成する

  • 方法2

articlesテーブルにcategoryカラムを追加し、この値がproposalの場合は提案、
reportの場合は日報である切り分けを行う事で共用して使えるようにする。

聞きたい事

どれが正解だとは決められませんが、皆さんはどちらの方法を選択されるか理由も含めて教えて欲しいです。

補足

articlesテーブルに限らず、何かしら親のテーブルに対するステータスを管理する子テーブルなど
同じようなテーブルが機能追加の度に増える事に対し、保守・拡張性について考えた場合、理由もなくこれが正しいのか疑問に思う時があります。

時々、Wordpressのwp_optionsのようにステータスや設定に関する情報は1テーブルで管理した方が、拡張性が良いのでは・・・と思う時もあります。

皆さんのご意見をお聞かせ願います。

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

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

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

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

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

m.ts10806

2020/02/18 03:04

WordPress直接関係ないのでしたらタグはずした方が良いかと
guest

回答3

0

将来的に何をするのか?具体的なビジョンはなく開発者自身で推測の上

考えなくてはいけない

要求定義もされていない仕様書なんて、最小限の機能だけ盛り込めばいいんです
追加の仕様が必要になった場合別途追加費用をかっぱぐのがSEの仕事

投稿2020/02/18 03:10

yambejp

総合スコア116724

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

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

0

ベンチャー企業ばかりで働いている者です。拡張性は最低限で良いと思います。
自分なら方法1も方法2も取らないです。

最低限の実装をして、実物を見てもらって、追加要望を聞くと思います。
簡単にできるものなら、相手が何を欲しているのか予測する前に、作っちゃった方が喜ばれることが多かったです。

簡単にできないものなら、簡単にできるところだけ作って見せて、少しづつ要件を詰めていきます。

それもできないなら、耳と目を閉じ、口をつぐんで作ります。
開発する人間が欲しいのではなく、手を動かす機械が欲しいのだろうと思うので。

投稿2020/02/18 03:18

mongolia

総合スコア133

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

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

0

個人的には、方法1新たにreportsテーブルを作成する、が良いです。
方法2をお勧めしない理由を述べます。

方法2

articlesテーブルにcategoryカラムを追加し、この値がproposalの場合は提案、
reportの場合は日報である切り分けを行う事で共用して使えるようにする。

categoryカラムはCategoriesテーブルに存在するレコード( proposal , report )を外部キーとして参照するように設定したとしましょう。これで、articlesテーブルで提案書も日報も格納できるようになりました。

しかし、提案書と日報でそれぞれ異なるカラムを持つ場合、 各カラムがそれぞれどのarticlesの種類に紐づくのかのメタデータを、articlesテーブルは保持することができません。

新たな種類を追加する際に新たなカラムを追加しなければいけない場合は、その都度(本番稼働しているDBの)スキーマの変更する必要も出てきます。

方法2は俗に シングルテーブル継承 と呼びます。シングルテーブル継承が適切なのは、種類の数とその種類固有のカラムの数が少ない場合です。

もし、提案書と日報しか種類として保持しないのであれば、方法2でも問題ないかもしれません。しかし今後の拡張性を考えると方法1がベターではないでしょうか。

投稿2020/02/20 12:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問