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

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

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

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

Q&A

解決済

3回答

4802閲覧

DBの設計について、教えてください。

UekiKouji

総合スコア121

PostgreSQL

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

0グッド

2クリップ

投稿2016/07/21 12:03

クラウド上で運用するサービスの構築を行いたいと考えています。
その中で、DBは、Postgresqlの9.5を利用しようと思っています。
その中で、単一データベース共通スキーマ方式に沿ってDBの設計をしなけらばなりません。

http://www.atmarkit.co.jp/fdotnet/bookpreview/azureoverview_0301/azureoverview_0301_01.html

のサイトを見たのですが、いまいちよくわかりません。
SildeShareなどで資料をさがしたりしたのですがいまいちです。
なにかわかりやすい参考書やサイトがあれば、教えてください。
お願いします。

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

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

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

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

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

KiyoshiMotoki

2016/07/21 14:52 編集

「いまいちよくわかりません」について、何が分からないのかをもっと具体化しないと、回答がつきにくいと思います。"単一データベース共通スキーマ方式" とか "マルチテナント" とかで検索するといろいろヒットしますが、そのどれが貴方の疑問を解消できるのか(概念なのか、実装方法なのか、それ以外なのか、、など)、判断がつかないからです。
UekiKouji

2016/08/08 11:39

概念よりも実際の実装方法をお願いします。
UekiKouji

2016/08/08 11:40

解答していただいたのに、連絡がおそくなりすいません。
guest

回答3

0

ベストアンサー

たぶん、この図が全容ですよね。
http://www.atmarkit.co.jp/fdotnet/bookpreview/azureoverview_0301/azureoverview_0301_04.gif
っていうか、めんどくさそうですなあ。
極端に言うと、カラム名を廃して全データ(紹介されたページでは顧客情報)を
一つのテーブルで管理しようって話ですよね。
ふつうなら1人当たり1レコードになるところですが、
この場合は1人当たり複数レコードにしようっていうね。

そういえば、どっかの質問で似たような構成のテーブルを
アクセスするはなしがあったような気がするなあ。
流行ってんスかね?

投稿2016/07/21 12:21

takasima20

総合スコア7458

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

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

UekiKouji

2016/08/08 11:38

ご回答ありがとうございます。
guest

0

その中で、単一データベース共通スキーマ方式に沿ってDBの設計をしなけらばなりません。

しなければならないと表現していますが、リンクの記事がすぐさま理解できないのでらば、失敗がめにみえていますので再考ください。すごく、厳しい言い方をして申し訳ないのですが、設計より運用が何倍も複雑になることを考えるとそういう言い方になります。

簡単に説明すると、スキーマの定義そのものをテーブルに登録すれば、論理上どんなスキーマも登録できるという考え方です。

実際のRDBは、項目名が横に並んでいるので検索が早いというのが売りなので、項目名が縦に並ぶこの方式だと、ものすごいレコード数になり検索効率が悪くなります。(恐らく登録と更新もすごく遅いです。)

更にちらっと書いてありますが、検索などが複雑になります。(本当に赤間さんはこの方式でやったことがあるのか疑いたくなるほど、面倒な作業が予想されます。)

スキーマが固定されて使いづらい場合は、XMLやドキュメントベースのDBやその他noSQLのDBを使います。ただ、今のRDLはXMLの項目もサポートしているので、個人的には個別に設定する項目をXMLに持ってくることをおすすめします。

投稿2016/07/24 04:39

iwamoto_takaaki

総合スコア2883

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

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

UekiKouji

2016/08/08 11:38

ご回答ありがとうございます。
guest

0

このようなアーキテクチャがあることを、初めて知りました。
勉強させていただき、ありがとうございます。

しかし、一見したところ、なかなか難易度の高そうな技術ですね。

ご質問文で紹介されているページのテーブル設計をそのまま実装すると、
ただの
SQLアンチパターン - 5章 EAV(エンティティ・アトリビュート・バリュー)
になってしまいますので。
http://qiita.com/deme0607/items/a89319014bc007f09f5c

で、世の中のマルチテナント型 SaaS が実際にどのようなテーブル設計になっているのかを調べてみたところ、以下のページを見つけました。
http://www.publickey1.jp/blog/09/1saas.html

上のページによると、セールスフォースでは、拡張性やパフォーマンスを確保するために、データを格納するテーブルを定義する他に

  • テナント(組織ID)ごとにテーブルをパーティション分割
  • インデックスや外部キー制約を表現するテーブルを定義

といった工夫をしているようです。

また、このアーキテクテャでは、データを取得する際にテナントIDによるフィルタリングを忘れて
「別のテナントの情報が見えてしまう」
というリスクも高くなると予想できます。

どのような判断で

単一データベース共通スキーマ方式に沿ってDBの設計をしなけらば

ならなくなったかは存じ上げませんが、このアーキテクチャを採用するにあたっては慎重に設計・実装する必要がありそうです。

投稿2016/07/21 15:23

KiyoshiMotoki

総合スコア4791

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

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

UekiKouji

2016/08/08 11:38

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問