
MySQLの設計について質問があります。
まずDBの設計ですが以下のような場合どのようにすればよいのでしょうか?
1. 商品情報が数十万件あり、商品DBを作ってその中に全商品を登録するテーブルを作る
2. 各会員が上記の中から自分が扱いたい商品を登録するテーブルが必要
このとき、2.のテーブルは、
A. 1.のDBの中に作る
B. 各会員のDBを作ってその中に扱いたい商品のテーブルを作る
C. 会員DBを作って会員ごとのテーブルを作る
のどれが正しいのでしょうか?各会員が扱う商品数も数万~数十万件になります。
どうぞよろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
セキュリティ上、ある会員が他の会員の扱っている商品を簡単に見ることができていいのでしょうか?
また、会員というのが商店で、複数の商店の情報を比較しながら買い物する顧客が別にいる、
という話では、
ある会員が他の会員の扱っている商品を簡単に見ることができてはいけないが、
ある顧客は、複数の会員の扱っている商品を簡単に見ることができないとまずいです。
というのも要件の1つにはいるのですが。
A. 1.のDBの中に作る
方法が2通りあって
A-1.同一DBで複数テーブルにする。
複数の会員が扱っている商品をみるのにはいささか不便。
A-2.同一DBの同一テーブルにする。
この件数から見ると、会員の数×数万~数十万件の商品というレコード数になり、
ちょっとレスポンスが心配。
会員の数が少なければレスポンス対策としてあえて、横持ちする手はありますけどね。
(拡張性や正規化という点から言うと好ましくないですが。)
例)商品コード,会員1,会員2,会員3,・・・
会員1が1なら会員1が扱っており、0なら会員1は扱っていない。
B. 各会員のDBを作ってその中に扱いたい商品のテーブルを作る
C. 会員DBを作って会員ごとのテーブルを作る
BとCの差があまりなくて、
Bのメリットは、サーバを分割しやすいという点と、会員間でデータを見れなくしやすいという点で、
デメリットは、商品を減らしたいときに、全会員のDBに接続して、1件ずつ消さなくてはいけない
(CならDB接続は1回ですむ。)、サーバを分割しにくい、複数の会員のデータを見るのが面倒
等ですね。
Aは、BやCと違って、サーバを分割なんて難しいし、
会員間でデータを見れなくしにくい(作りこみがいるというだけ)、
一方で、商品を減らすのはすごく簡単。複数の会員のデータを見るのも簡単。
といったところが長短として挙げられます。
どれを重視するかによって答えは変わってくると思います。
(あと用意できるDBサーバの性能と。)
ありがとうございます。
とても詳しく説明してくださって助かりました。
そしてどれも正解というのはないのですね。
それぞれの環境によってどれがいいかを決める感じですね。
会員数は多くても100人くらいになると考えています。
A.に関してはやはり現実的ではないですね。
B.に関して「デメリットは、商品を減らしたいときに、全会員のDBに接続して、1件ずつ消さなくてはいけない」というのは、消す必要はないかと思っています。
単純に会員が使う商品がDBと大元の商品DBに存在しなければ存在しないという処理だけで良いかなと。
ただ、「B.各会員が扱う商品を登録したDBを会員数分作る」と「C.会員DBを一つ作ってその中に会員テーブルを会員数分作る」では、BのDBは会員専用なのでほぼアクセス数は一つですが、CがDBに同時アクセスする数は最大で会員数分だけあります。
そうするとレスポンス的にやはりDBを別けたほうが良いのでしょうか?
いちおうB.かC.で検討しています。
No.2
- 回答日時:
>Bは「各会員それぞれの専用のDB
会員数は何人ぐらいですか?
500も1000もテーブルがあって
ある商品を扱いたい会員は?
というようなリクエストがあったら対応できますか?
ありがとうございます。
会員数はそれほど多くはないと考えています。
多くても100人くらいです。
>ある商品を扱いたい会員は?
>というようなリクエストがあったら対応できますか?
そういう使い方を考えていませんでした…。
今のところそのリクエストの必要性はないのですがもしかしたら今後そのような
要求がでてくるかもしれませんね。
No.1
- 回答日時:
>B. 各会員のDBを作ってその中に扱いたい商品のテーブルを作る
1会員番号に複数レコードがあります。
会員番号、商品番号
1 2
1 3
2 1
2 2
2 5
・ ・
・ ・
・ ・
C:の会員DBを作るなら、会員番号に、住所や名前を付加したテーブルにします。
ありがとうございます。補足ですが
Bは「各会員それぞれの専用のDBを作って、その中に会員が扱いたい商品テーブルを一つ作る」
Cは「会員DBを一つ作って、その中に各会員それぞれの商品テーブルを作る」
という感じです。
住所や名前を付加したテーブルは商品テーブルとは別のテーブルにしようかと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「テーブルに座って……」という...
-
L2SWはARPテーブルを持っている?
-
【エクセル】データテーブルの...
-
外部キーだけのテーブル(主キ...
-
飲み会で、座敷orテーブルどち...
-
UTF8のテーブルをODBCドライバ...
-
下記、問題に対しての解答が以...
-
1対1のリレーション(主キー同...
-
会社の飲み会の幹事になり、座...
-
論理名とコメント構文(?)について
-
ACCESS VBA でテーブルの定義だ...
-
MACアドレス見えない
-
[DB設計]多対多の問題点とは
-
mysqlでオブジェクト指向データ...
-
Access データベースを分割した...
-
複雑なSQL文について
-
親子関係のテーブルについて
-
エクセルで都道府県、市区町村...
-
男性と2人で飲食店に行きテーブ...
-
off of と fromの違いを教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「テーブルに座って……」という...
-
会社の飲み会の幹事になり、座...
-
外部キーだけのテーブル(主キ...
-
テーブルリンク リンク元を知...
-
オーダーの覚え方について
-
下記、問題に対しての解答が以...
-
飲み会で、座敷orテーブルどち...
-
アクセスのリンクテーブル一覧...
-
【エクセル】データテーブルの...
-
L2SWはARPテーブルを持っている?
-
面接のときテーブルが正面に。...
-
男性と2人で飲食店に行きテーブ...
-
UTF8のテーブルをODBCドライバ...
-
お金持ちのテーブル
-
1つのテーブルに同じデータを参...
-
テーブル名の前のドットの意味
-
複雑なSQL文について
-
データベースの接続に失敗して...
-
【PHP】SQL文のSUM関数で出力し...
-
更新されたテーブルを表示したい
おすすめ情報