WEB上で利用者数10万のマイページ機能をもつようなビジネスサイトを構築しようと考えています。
ユーザーのID,PASS管理と
ユーザーごとのマイページの中にスケジュール管理機能、顧客管理機能
を設けます。
このような大規模なデータベースの設計例を教えていただけないでしょうか?
データベースにはMySQLを使用しようと考えています。
ユーザーのID管理は一つのテーブルじゃ無理ですよね?
その場合どのように分ければいいのしょうか?
ユーザーごとのマイページはユーザーごとにスケジュールテーブルなどを
作るべきなのでしょうか?
MySQLの物理的最大DB,テーブル数の制限などあるのでしょうか?
私自身はデータベースプログラムが出来ないため設計の部分でお教えいただけたらと思います。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

MySQLで顧客情報などが10万レコードという規模は特別大きくありません。

性能的にはまだまだ楽々いけちゃうでしょう。ユーザのID管理を分散することを考えるより、バックアップレプリケーションなどの運用に力を入れるほうが実際的です。

あえて検討項目として考えるとすると、(1)データベース部分のディスク容量 (2)同時接続数(想定)対応のコネクション確保 (3)その前提でのメモリーサイズの確保 だと思います。

MySQLではインデックスのキャッシュなどのサイズを指定できますから、パフォーマンスチューニング部分で改善できることは十分あると思います。

参考までに、その手のセミナーもありますよ。

参考URL:http://techstyle.jp/
    • good
    • 0

こんにちは.


DBの設計は難しいですよね.私なら下記のように3テーブルに分けると思います.

■ログインテーブル
 内部ID(連番), ユーザーID, パスワード
■顧客情報テーブル
 ログインテーブルの内部ID, 名前,住所,・・・
■スケジュールテーブル
 ログインテーブルの内部ID, 日付,スケジュール内容

ログイン時に見に行くテーブルによけいなデータを入れたくないのでログインテーブルは別にもうけます.顧客情報テーブルは,ログイン時に内部管理しているIDを入れると,ログインテーブルと顧客情報テーブルの連携が可能です.スケジュールテーブルも同様で,ログインテーブルの内部IDを入れることで関連づけることができます.このテーブル設計ならユーザーごとにスケジュールテーブルをもうける必要はありません.インデックスをはる位置に気をつければ,なかなか快適に動くと思います.

この回答への補足

参考になります。ありがとう御座います。
別件になるのですが、x-gameさんはオンラインショップのDB設計はご存知でしょうか?
http://www.muji.net/のような一般的なオンラインショップのDB設計例など
お知りでしたら教えて下さい。
(受注伝票、顧客管理、入金管理など)

補足日時:2002/04/07 19:34
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qデータベースの1要素に複数データを格納したい

顧客管理データベースシステムを作成しようとしているのですが、
データベースの要素に複数データが入る場合の管理方法が
分からず困っています。

一例を挙げると、複数の電話番号を持つ人にも対応するように
データベース設計をしようとした場合、どのようにするのが
ベストなのかが分かりません。

電話番号1,電話番号2といったような要素を用意して、
データベースを検索するときには両方を参照する以外に
手は無いのでしょうか?

それとも顧客番号と複数電話番号検索用IDのようなものを対応させ、
電話番号データベース(電話番号ID、電話番号1、電話番号2、電話番号3)
のようなものを用意することで調べるのでしょうか?

正直、どちらもデータベース要素が3つ以上の場合に融通が利かなかったり
まだるっこしい感じがしたりするのですが、代替手段を良く知りません。
何か良い方法ございましたら、ご教示願えませんでしょうか?

Aベストアンサー

正規化して、電話番号を別テーブルに持つか、
顧客マスターに、電話1、電話2、電話3・・・と複数フィールドを持たせるか、
それぞれメリットとデメリットがあるので、
使い方次第でどちらでもいいかと思います。

固定、FAX、携帯、だけでなく、部署別とかで、多数ある可能性があるのなら、
別テーブルにした方がいいでしょう。

設計例

[顧客ID][表示順][電話番号][種別]
1111__1___012-111-1111 固定
1111__2___012-111-2222 FAX
1111__3___012-111-3333 携帯

顧客ID と 表示順 で複数フィールド主キーに設定

柔軟性が高いです。電話番号がどれだけ増えても対応できます。
joinしたものを対象に検索すれば、インデックスを使って高速に処理できます。


最大3つとか5つまでとか限定できるなら顧客マスターに全部入れてもいいでしょう。
ANo.4 で提案されている検索用のフィールドを作成するのもなかなかいいアイデアですが、デー多数が多いとインデックスが利用できないので重くなる可能性があります。
その場合は、面倒ですが、Orで連結した条件式を用意すればいいでしょう。

[電話1]=[検索番号] Or [電話2]=[検索番号] Or [電話3]=[検索番号]

正規化して、電話番号を別テーブルに持つか、
顧客マスターに、電話1、電話2、電話3・・・と複数フィールドを持たせるか、
それぞれメリットとデメリットがあるので、
使い方次第でどちらでもいいかと思います。

固定、FAX、携帯、だけでなく、部署別とかで、多数ある可能性があるのなら、
別テーブルにした方がいいでしょう。

設計例

[顧客ID][表示順][電話番号][種別]
1111__1___012-111-1111 固定
1111__2___012-111-2222 FAX
1111__3___012-111-3333 携帯

顧客ID と 表示順 で複数フィ...続きを読む

Q予約システムでの時間の設計について

MYSQLで部屋を利用するための予約システムを作ろうと考えております。

設計として下記を考えてみたのですがおかしいでしょうか。

要件は下記のとおりです。
・A、B、C3つの部屋の利用予約を時間単位でおこなう
・重複する時間は予約できない
・日を跨ぐ予約はできない

テーブル設計
トランID(int)|開始時刻(datetime)|終了時刻(datetime)|部屋ID(int)

時間についてはdatetime式で2013-03-22 12:00:00 と保存させる予定です。

入力を簡素にするため、時刻は時、分個別のプルダウンで30分刻みにしようと考えています。

そこで分からなくなってきたのがデータ保持の方法なのですが、
例えば10:00-12:00と予約入力された場合、datetime式ですと秒まで保存されますので
2012-03-22 10:00:00 - 2012-03-22 12:00:00 となりますよね。

そうなりますと、別の予約で12:00-15:00を確保したい場合、開始時刻は重複してしまうことに
なりますので、テーブルには2013-03-22 10:00:01 - 2013-03-22 11:59:59と登録したほうが
いいのでしょうか。
ただ、これだと時間を変更したい場合の修正の際に困ったことになりそうです。

またこの設計の場合、 開始時刻と終了時刻が他の予約と重複していないかのSQLを
考える場合、非常にやっかいなような気がしてきました。

何か別のよい設計のヒントがあればご教授願えないでしょうか。

宜しくお願いいたします。

MYSQLで部屋を利用するための予約システムを作ろうと考えております。

設計として下記を考えてみたのですがおかしいでしょうか。

要件は下記のとおりです。
・A、B、C3つの部屋の利用予約を時間単位でおこなう
・重複する時間は予約できない
・日を跨ぐ予約はできない

テーブル設計
トランID(int)|開始時刻(datetime)|終了時刻(datetime)|部屋ID(int)

時間についてはdatetime式で2013-03-22 12:00:00 と保存させる予定です。

入力を簡素にするため、時刻は時、分個別のプルダウンで30分刻みにしよ...続きを読む

Aベストアンサー

普通(かどうかは知りませんが)こういう要件のときは、

部屋ID=A

'2013-03-22 11:00:00'
から
'2013-03-22 15:00:00'
と画面で入力されたとすると、

SELECT count(*) FROM 予約テーブル
WHERE 部屋ID=A
AND 開始時刻<'2013-03-22 15:00:00'
AND 終了時刻>'2013-03-22 11:00:00'

の結果が0でなければ重複しているとしてエラーにします。
00:00は含まれないので、データの持ち方は、00分00秒でOKです。

なにをやっているかの補足:
AND 開始時刻<'2013-03-22 15:00:00'
は、開始時刻が入力した終了時刻以降のものは関係ありません。
(今回の予約時間が終わってから始まります。)
AND 終了時刻>'2013-03-22 11:00:00'
は、終了時刻が入力した開始時刻以前のものは関係ありません。
(今回の予約時間が始まる前に終わってます。)
⇒上記以外とは、今回の予約時間が終わる前に始まり(今回の予約開始前か予約開始後かは問わない)
今回の予約時間が始まる前には終わっていない(今回の予約終了後か予約終了前かは問わない)
予約が既にあるということを調べています。

普通(かどうかは知りませんが)こういう要件のときは、

部屋ID=A

'2013-03-22 11:00:00'
から
'2013-03-22 15:00:00'
と画面で入力されたとすると、

SELECT count(*) FROM 予約テーブル
WHERE 部屋ID=A
AND 開始時刻<'2013-03-22 15:00:00'
AND 終了時刻>'2013-03-22 11:00:00'

の結果が0でなければ重複しているとしてエラーにします。
00:00は含まれないので、データの持ち方は、00分00秒でOKです。

なにをやっているかの補足:
AND 開始時刻<'2013-03-22 15:00:00'
は、開始時刻が入力した終了時...続きを読む


人気Q&Aランキング