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など教えていただけないでしょうか・・・

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

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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

Q画像アップロード掲示板を作る方法教えてください

よろしくお願いします。
画像アップロード掲示板を作りたいのですが、この場合、ホームページを
作らないとだめでしょうか。
掲示板だけを使って直接そこに画像をアップロードするという方法では無理でしょうか。掲示板は有料無料を問いません。
うまく説明できませんが、掲示板を何かのソフトで作るのではなく
画像掲示板を設置したいと思います。つまり掲示板のレンタルです。

Aベストアンサー

#1です。
なるほど、おっしゃりたいことはわかりました。
画像のアップはあなた以外がするわけではないのですね。
それでしたら、一般的なスタイルとして、ホームページを開いて、そのホームページに画像やコメントを置く。
BBSとして現在借りている掲示板へのリンクを置き、掲示板に書きこしてもらう。
場合によっては、フリーのアドレスを取ってメールの受付もする。
これが一番多いスタイルでしょうね。
もし、不特定多数の人に対しての公開をしたいのではなく、特定の仲間内だけに公開をしたいのであれば、わざわざホームページを立ち上げず、無料で使える個人専用の画像公開用スペースを借りても良いかも。
有名な所では『ヤフー・ブリーフケース』とかがありますが、画像専用なら『PhotoAccess』(http://www.photoaccess.co.jp/)なんかが使いやすくて良いです。
もちろん他にも沢山ありますから。
ホームページを作る気になれば、無料のホームページスペースで、大容量なうえ、
CGIやSSLまで使えるところもありますから、探してみるのも良いかと思います。
一例として、
『XREA.COM』(http://www.xrea.com)
『isweb』(http://isweb.infoseek.com)
『Prohosting』(http://free.prohosting.com)
『使える.net』(http://www.tsukaeru.net/)
を紹介しておきます。
もちろん、ここ、『Goo』にも簡単ホームページがありますのでご一考ください。

#1です。
なるほど、おっしゃりたいことはわかりました。
画像のアップはあなた以外がするわけではないのですね。
それでしたら、一般的なスタイルとして、ホームページを開いて、そのホームページに画像やコメントを置く。
BBSとして現在借りている掲示板へのリンクを置き、掲示板に書きこしてもらう。
場合によっては、フリーのアドレスを取ってメールの受付もする。
これが一番多いスタイルでしょうね。
もし、不特定多数の人に対しての公開をしたいのではなく、特定の仲間内だけに公開をしたいの...続きを読む

Q1つのVARCHAR属性のフィールドに対して、SQL文のLIKE等を

1つのVARCHAR属性のフィールドに対して、SQL文のLIKE等を
利用して、”全角文字”が1つ以上存在しているレコードのみを、
SELECTで抽出する方法をご存知の方がいらっしゃいましたら、
ぜひ教えてください。

お世話になります。
宜しくお願い致します。

Aベストアンサー

非アスキー文字にヒットさせるというのではまずいですか?

フィールド REGEXP '[^ -~]'

ただし正規表現はスピードはあまり期待できませんが

Q掲示板では、画像を入れたりタグを入れたりしたいですか?

 HPを持っている者です。
 掲示板もレンタルしています。
 私がレンタルしている掲示板は‥‥タグが打てない、画像も入れれない、アイコンも無い、文字だけを入れる(文字色は変えれる)掲示板なのですが‥‥リンクしてあるHPは、みんな華やかで画像を入れれたりアイコンを選択したり、タグを打てたりです。
 
 そこでインターネットを使っている方にお聞きしたいですが、単調な文字だけを入れる掲示板と、タグを入れたり画像を入れたり出来る掲示板、どちらの掲示板にコメントを入れたいですか?
 文字だけの掲示板にも、書き込みをしたいと思いますか?ただの文字だけの書き込みは、やはり楽しくないですか?

 最近、書き込みが減ったなぁと思うのですが、文字だけの掲示板だからかなぁと思いつつあります。
 皆様の意見を伺って、掲示板を移行しようかとも思っています。

Aベストアンサー

一応、掲示板などのCGIを製作しているプログラマーです。

結論からいうと、それはそのHPの雰囲気しだいです。

個人で作っているHPで、和気あいあいとしたアットホームな雰囲気のHPなら、間違いなく色指定、アイコン指定、文中の表情アイコン、昇進機能、へぇ~ボタン、Web拍手などは好まれます。
(たくさんつけると、書き込むのが面倒くさくなりますが。)

しかし、情報を優先するHP(教えてgoo、2ちゃんねる、携帯サイトの掲示板など)では文字だけというのが好まれます。
タイトルや名前欄さえも削った掲示板のほうがよい場合もあります。


タグの許可については、サイトの雰囲気や目的に関わらず、絶対に反対です。
ユーザーが、タグの閉じ忘れや妙なタグを使う例が多くあり、それ以下の書き込みがすべて見れなくなったという事例もありますし、ウイルスやスパイウェアに関連するスクリプトやブラウザクラッシャー、無駄に大きすぎる文字で表示不可能になった例もあります。

QMySQL5.1で varchar(100)のものを varchar(

MySQL5.1で varchar(100)のものを varchar(90)にする予定です。
(後ろの10バイトは無条件になくなっても構いません)

通常の手順ではalter tableを使います。
今回は、他の項目も変更(auto_incrementやキーの追加)するので
一度 mysqldumpでSQLを吐き出して、

CREATE文の以下を変更
varchar(100) → varchar(90)
auto_incrementやキーの追加

そして、mysqlでリストアします。

この方法は、アリでしょうか?

他のデータベース(PostgreSQL, SQLServer, Oracle)でも使える手法でしょうか?

皆さんのvarchar(100) → varchar(90)する方法が知りたいです。

Aベストアンサー

>varchar(100)のものを varchar(90)にする予定

一発でやるなら以下のような処理でしょうね

ALTER TABLE `テーブル` CHANGE `フィールドA` `フィールドA` VARCHAR( 90 ) NOT NULL

ただ、既存のものを処理するなら移行トラブルを避けるために、

(1)新たなフィールドをつくる
(2)update構文で古いフィールドの値を新しいフィールドにsetする
(3)データが間違いないか確認する
(4)古いフィールドを削除する

という流れにした方がよいとおもいます。

>後ろの10バイトは無条件になくなっても構いません

バイトじゃなくて文字数だと思いますが・・・

Q海外の画像掲示板を探しています。

海外の画像掲示板を探しています。

国内には「双葉」のように画像を貼れてコメントもできる
有名な画像掲示板がいくつかありますが、
海外にもこのような画像掲示板はないでしょうか?


今までの検索で中国とロシアのこのような掲示板は見つけだせたのですが、
それ以外の地域のものはなかなか見つからないんです。
特に欧米の画像掲示板を探してるんですが・・
もしご存知であれば教えていただけないでしょうか?

Aベストアンサー

多分一番知られているのが
4chan http://www.4chan.org/
初回は左のフレームの下の方の I agree から入る

IDLECHAN VERSION 4.0 http://www.iichan.net/
他の掲示板より細かすぎるジャンルが特徴

Q同一テーブル内で違うフィールドにデータをコピー

ryomaniaと申します。
MySQL3.23.58を使用しています。

質問の内容なのですが、NO、CNO、NAMEというフィールドを持つテーブル顧客があります。
NOにはauto_incrementで連番の数字が自動で入ります。CNOにはNOと同じ数字を入れたいと思っています。但し最初は数字の0が入っています。NAMEには名前が入っています。
例:
NO | CNO | NAME
1 | 0 | test1
2 | 0 | test2
3 | 0 | test3
     ・
     ・
     ・
といった感じです。この状態からupdate構文などを使用して、もしCNOが0であればNOのデータをCNOにコピーするということは可能でしょうか?出来れば複数の行を一度に行いたいと思っています(1000~3000行くらい)。
googleなどで調べては見ましたが答えというかいいヒントが見つかりませんでした。
変な言い回しになっているかもしれませんがよろしくお願いします。

ryomaniaと申します。
MySQL3.23.58を使用しています。

質問の内容なのですが、NO、CNO、NAMEというフィールドを持つテーブル顧客があります。
NOにはauto_incrementで連番の数字が自動で入ります。CNOにはNOと同じ数字を入れたいと思っています。但し最初は数字の0が入っています。NAMEには名前が入っています。
例:
NO | CNO | NAME
1 | 0 | test1
2 | 0 | test2
3 | 0 | test3
     ・
     ・
     ・
といった感じです。この状態からupdate構文など...続きを読む

Aベストアンサー

いたって単純に

UPDATE `テーブル` SET `CNO`=`NO` WHERE `CNO`=0
でよろしいのでは?

Q画像掲示板の管理について

私はあるタレントさんのファンページを作成しています。

最近、掲示板の方に画像掲示板を作って欲しいとの書き込みが続いています。もし私が画像掲示板を作ってホームぺージ上にそのタレントさんや他のタレントさんの画像が投稿された場合、私はその画像掲示板の管理人になるめ、投稿された画像のタレントさんの所属事務所様などから訴えられるのでしょうか?それともその画像を投稿した本人が訴えられるのでしょうか?もちろん私の方に所属事務所様などから画像削除の依頼が届いた場合はすぐに画像を、画像掲示板上から削除させていただきます。

ご回答をお待ちしています。

Aベストアンサー

運が悪かったら、その掲示板を某ちゃんねるに晒され、肖像権に触れるので閉鎖・削除するよう書き込まれるかもしれません。
下手すると荒される事もあるかも。
著作権や肖像権に触れるサイトを作るのは良くありません。
やめといた方がいいと思います。いくつかそういうサイトを見てきました。
もし訴えられた場合、投稿者、掲示板の管理者両方になるのではないでしょうか。

QMySQLからフィールド名のリストを取り出し、一部のフィールド名を除外したい場合

PHP + MySQLにて
テーブルからフィールド名だけを取得し、さらに一部のフィールド名を除外したいです。
レコードじゃないのでis not構文は使えませんでした。
何かいい方法があれば教えてください。

$sql = "select * from table";

//tableテーブルからフィールド名を取り出し
$rs = mysql_query($sql);
$fields = mysql_num_fields($rs);
$column = array();
for ( $i=0; $i<$fields; $i++ ) {
$column[$i] = mysql_field_name($rs, $i);
}

Aベストアンサー

>一部のフィールド名を除外したいです。

$fieldは配列なんだからunsetしてやればいいのでは?

Q画像を転送すれば表示してくれる掲示板サイトはないですか?

画像を転送すれば表示してくれる掲示板サイトはないですか?
一般の掲示板は文書しか遅れませんが、画像が送れる掲示板を紹介してください。
あればURLを教えて下さい。

Aベストアンサー

確かに、画像の種類によりますが、
『あなたのお気に入りの写真/画像』とあるので、
管理人さんが不適切と判断しない限り、
こちらは大丈夫かと思います。

 ↓

参考URL:http://homepage2.nifty.com/toraneko/

Q連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出

図面管理のデータベースをつくっています。
連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出したいのですが
どのようにしたらいいのでしょうか?
いろいろ調べたのですがなかなかよい結果が出ません。
お知恵をおかしください。よろしくお願いします。
mysqlバージョン:5.0.45


テーブル:a(図面管理)
a_id(id)
a1(図番)
a2(種類用紙サイズ)
a3(枝番)
a4(図面名)

a_id a1 a2 a3 a4
1   1 3P 0 aaaa
2   2 3P 0 bbbb
3   2 3P 1 bbbb
4   1 4P 0 cccc
5   1 4P 1 cccc
6   1 4P 1 cccc

このテーブルのa1とa2を連結します。(連結フィールド:ren)

a_id a1 a2 a3 a4  ren
1   1 3P 0 aaaa 13P
2   2 3P 0 bbbb 23P
3   2 3P 1 bbbb 23P
4   1 4P 0 cccc 14P
5   1 4P 1 cccc 14P
6   1 4P 2 cccc 14P

連結したもの(ren)をグループ化しますこのとき、枝番の値が高いレコードだけ抽出します。
a_id a1 a2 a3 a4  ren
1   1 3P 0 aaaa 13P
3   2 3P 1 bbbb 23P
6   1 4P 2 cccc 14P

この最終的な結果を出す方法をお教えください。
おねがいします。

図面管理のデータベースをつくっています。
連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出したいのですが
どのようにしたらいいのでしょうか?
いろいろ調べたのですがなかなかよい結果が出ません。
お知恵をおかしください。よろしくお願いします。
mysqlバージョン:5.0.45


テーブル:a(図面管理)
a_id(id)
a1(図番)
a2(種類用紙サイズ)
a3(枝番)
a4(図面名)

a_id a1 a2 a3 a4
1   1 3P 0 aaaa
2   2 3P 0 bbbb
3   2 3P 1 bbbb...続きを読む

Aベストアンサー

連結する必要はないのでは?

select *
from a
where (a1,a2,a3) in (
select a1,a2,max(a3) as max_a3
from a
group by a1,a2
)

ちなみに最初のテーブルaのa_idの枝番がまちがっていますよ


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報