限定しりとり

Apache/2.0.52 (Win32) PHP/5.0.3 MySQL/4.0.14と言った環境で画像掲示板を作成しています。
サイトの構造は
-top
--asia
---japan
----hokkaido(掲示板)
----tohoku(掲示板)
---korea(掲示板)
--oceania
---australia
----queensland(掲示板)以下続く
と言ったように相当な数のディレクトリが存在し、その各最下層に掲示板のページがあるといった状況です。
掲示板のログをデータベース形式で保持し、記事や画像、ページに対して高速に検索したり、新着記事の表示をできるようにしようと思っています。

現在データーベースのフィールドは以下のように構成してます。
no______int(pri)_記事ナンバー
resno___int______レスナンバー
regtim__datetime_登録日
name____varchar__ニックネーム 
title___varchar__タイトル
com_____text_____コメント
host____varchar__ホスト
ext_____varchar__画像の拡張子
pass____varchar__記事編集削除用パス
fname___varchar__画像のファイル名

同じフィールド構造を持つテーブルを、テーブル名:hokkaido , tohoku , queesland 等として所持してます。が、同じフィールドの構造であればそれらすべてを一つのテーブルにまとめてしまったほうが管理が楽であったり検索が高速なような気がして no 記事ナンバーの前に dir varhcar ディレクトリ名(ディレクトリのURL) を購入してDBを構築したほうが良いパフォーマンスが得れるような気もしますが、同じ値が dir フィールドに列挙されるのもおかしい気がします(一つのページ、ディレクトリに対して保存される記事数は1000件です)。

データベースを扱うこと自体始めてでオーソドックスなテーブル、フィールドの構造(スキーマって言うんですか?)の立て方が分からず困ってます。どなたかアドバイスまたは参考URLなど教えていただけないでしょうか・・・

A 回答 (1件)

このような構造ではいかがですか?


T:table
P:primary
F:Field
I:index

(1)掲示板集合に関する地域マスター情報
T.areamaster
|--F.areaid(P)
|--F.arename(I)

(2)掲示板そのもの
T.bbs
|--F.areaid(PI)
|--以下設定された情報で
no______int(pri)_記事ナンバー
resno___int______レスナンバー
regtim__datetime_登録日
name____varchar__ニックネーム 
title___varchar__タイトル
com_____text_____コメント
host____varchar__ホスト
ext_____varchar__画像の拡張子
pass____varchar__記事編集削除用パス
fname___varchar__画像のファイル名

現在の、
>相当な数のディレクトリが存在し
という部分の数がわかりませんが、1掲示板の上限が1000レコードとするなら、
最大50個の掲示板と仮定し、すべて埋まっても50000レコードですから、 
これならmySQLの範疇だと思います。ポイントはareaidをkey&indexにしないと、
地域ごとに WHERE areaid = $_POST['areacode']で抽出した時に、
期待したパフォーマンスが得られないと思います。

正規化は実際のアクセスも考えながら行ったほうが良いので、これがベストとは
断言はしませんが、現在のようにテーブルを分けるとプログラムも分散するので、
よろしいくないかと思います。

また、プログラムは地域のidを基準にGET要求で開く形式だと、
地域のマスターを追加するだけで柔軟に対応できるかと。

この回答への補足

ポイントの発行の仕方と良回答ってつけるやり方がわからないのですが・・・

補足日時:2005/04/12 02:36
    • good
    • 0
この回答へのお礼

レスありがとうございます。
とりあえず"地域ごとにテーブルを分けるのはよろしくない"と言うことですね。
自分まだ初心者でshige1127さんの言ってることの半分も理解できてないのですがshigeさんの親切丁寧なレスに俄然やるきでてきました!

追加の質問で申し訳ないのですが
areaidには実際どのような値をどのデータ型で入れれば良いのでしょうか?
areanameは"hokkaido"とか"northisland"とかでよろしいんですよね?

Tabel-bbsのFieldは
areaid(PI)
no______int(pri)_記事ナンバー
resno___int______レスナンバー
regtim__datetime_登録日
name____varchar__ニックネーム 
title___varchar__タイトル
com_____text_____コメント
host____varchar__ホスト
ext_____varchar__画像の拡張子
pass____varchar__記事編集削除用パス
fname___varchar__画像のファイル名
のようにprimaryをareaidとnoにつけてよろしいのですか?

自分でも色々webサイト検索して勉強していくつもりですがよろしければ初心者でも分かりやすいようなお勧めのサイトなど教えてもらえると助かります。

よろしくお願いします。

お礼日時:2005/04/12 02:28

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