[[Webプログラミング]]

2ch風のスレッド式掲示板を使いたい。
YouTubeのように、サムズアップダウンボタンを付けたい。

#contents

* 2chの仕様 [#x558a51b]
データベース設計のため、2chの仕様、データ構造を検討する。
データの階層は、大きく分けると4階層になっている。

** 参考 [#zacb3d4c]

- 2ch専用ブラウザの開発まとめサイト
http://www.monazilla.org/
2ch関連の情報がまとまっている。

- 2ちゃんねるについて - monazilla.org
http://www.monazilla.org/index.php?c=6-20
>2ちゃんねるの仕様とやりとり方法(HTTP等)のまとめ。

- 2ちゃんねる開発資料 - monazilla.org
http://www.monazilla.org/index.php?e=192
>メニューの取得
スレッドタイトル一覧の取得
スレッドの取得

- と~く2ちゃんねる
http://age.s22.xrea.com/talk2ch/
>2ちゃんねるとお話するための方法をまとめたメモです。

** データの構造 [#v0776c04]
(参考)2chの掲示板一覧
http://menu.2ch.net/bbstable.html

2chのデータは階層構造になっており、トップページからたどると、
+ カテゴリー
+ 板
+ スレッド
+ レス
という4階層になっている。

|階層|内容|h
|カテゴリー|2chの掲示板は、「カテゴリー」と呼ばれる大きな分野単位(ニュース、食文化、ネット関係など)で区切られている。|
|板|カテゴリーは、さらに「板」(いた、ばん)という細かいジャンルで分けられている。|
|スレッド|一つの板の中に、いろいろなたくさんの掲示板が設けられている。2ちゃんねるでは掲示板のことを「スレッド」という。「スレッド」を略して「スレ」という。|
|レス|2ちゃんねるでは書き込みのことを「レス」という。「レス」は、レスポンス(response)、すなわち返信を意味する。|

* データベース設計 [#e3bcdb8a]
MySQLで
+ カテゴリー
+ 板
+ スレッド
+ レス
を格納するテーブルを用意する。

** カテゴリー [#n5dbbb85]
テーブル名:bbs_category

|カラム名|データ型|内容|h
|id|int|主キーのID。auto_incrementの連番でOK|
|category|varchar(255)|カテゴリー名。重複なし|
|sort|int|並び順を指定する数値|
|create_dt|datetime|作成日時|
|update_dt|datetime|更新日時|
|delete_dt|datetime|削除日時=論理削除|

#code(sql){{
CREATE TABLE IF NOT EXISTS `bbs_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category` varchar(255) NOT NULL,
  `sort` int(11) NOT NULL,
  `create_dt` datetime NOT NULL,
  `update_dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `delete_dt` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `category` (`category`),
  KEY `sort` (`sort`)
) ENGINE=InnoDB ;
}}

** 板 [#w80dc913]
テーブル名:bbs_board

|カラム名|データ型|内容|h
|id|int|主キーのID。auto_incrementの連番でOK|
|category_id|int|親のカテゴリーID|
|board|varchar(255)|板名。重複なし|
|sort|int|並び順を指定する数値|
|create_dt|datetime|作成日時|
|update_dt|datetime|更新日時|
|delete_dt|datetime|削除日時=論理削除|

#code(sql){{
CREATE TABLE IF NOT EXISTS `bbs_board` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category_id` int(11) NOT NULL,
  `board` varchar(255) NOT NULL,
  `sort` int(11) NOT NULL,
  `create_dt` datetime NOT NULL,
  `update_dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `delete_dt` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `board` (`board`),
  KEY `sort` (`sort`)
) ENGINE=InnoDB ;
}}

** スレッド [#o5d63e1e]
テーブル名:bbs_thread

|カラム名|データ型|内容|h
|id|int|主キーのID。auto_incrementの連番でOK|
|board_id|int|親の板ID|
|thread|varchar(255)|スレタイ(スレッドのタイトル)|
|password|varchar(255)|編集用パスワード。スレッド作成者が後で編集できる仕様にする|
|ip|varchar(64)|スレッド作成者のIPアドレス。IPv6(40文字)にも対応|
|sum_up|int|サムズアップボタンのクリック数。=スレッドに対する良い評価の投票|
|sum_down|int|サムズダウンボタンのクリック数。=スレッドに対する悪い評価の投票|
|create_dt|datetime|作成日時|
|update_dt|datetime|更新日時|
|delete_dt|datetime|削除日時=論理削除|

#code(sql){{
CREATE TABLE IF NOT EXISTS `bbs_thread` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `board_id` int(11) NOT NULL,
  `thread` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `ip` varchar(64) NOT NULL,
  `sum_up` int(11) NOT NULL,
  `sum_down` int(11) NOT NULL,
  `create_dt` datetime NOT NULL,
  `update_dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `delete_dt` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ;
}}

** レス [#ub444e0b]
テーブル名:bbs_response

|カラム名|データ型|内容|h
|id|int|主キーのID。auto_incrementの連番でOK|
|thread_id|int|親のスレッドID|
|name|varchar(255)|投稿者の名前|
|email|varchar(255)|投稿者のメールアドレス|
|response|text|レス=投稿内容|
|password|varchar(255)|編集用パスワード。投稿者が後で編集できる仕様にする|
|ip|varchar(64)|投稿者のIPアドレス。IPv6(40文字)にも対応|
|sum_up|int|サムズアップボタンのクリック数。=レスに対する良い評価の投票|
|sum_down|int|サムズダウンボタンのクリック数。=レスに対する悪い評価の投票|
|create_dt|datetime|作成日時|
|update_dt|datetime|更新日時|
|delete_dt|datetime|削除日時=論理削除|

#code(sql){{
CREATE TABLE IF NOT EXISTS `bbs_response` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `thread_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `response` text NOT NULL,
  `password` varchar(255) NOT NULL,
  `ip` varchar(64) NOT NULL,
  `sum_up` int(11) NOT NULL,
  `sum_down` int(11) NOT NULL,
  `create_dt` datetime NOT NULL,
  `update_dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `delete_dt` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ;
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS