質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

3942閲覧

2chのような掲示板のデータベース設計

penpenpen

総合スコア11

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

2クリップ

投稿2022/01/06 19:27

練習として2chのような掲示板を作りたいのですがデータベース構成をどのようにすればいいかわかりません

スレッドは理論上無限個
1スレッドにはレスを1000個までつけれる
こういう掲示板はどういう構成になっているのでしょうか?

今考えているのは、

テーブル1 [id:本文:タイトル:作成日:更新日] テーブル2 [id:本文:スレ識別ID:作成日] スレ識別IDでどのスレッドのレスか見分ける テーブル1のidと同じかどうか

もし三次元が可能なら

テーブル1  [[id] . [レス本文1,レス本文2,レス本文3,レス本文4.........] . [レス作成日,レス作成日,レス作成日,レス作成日,.....] . [本文,] . [タイトル,] . [作成日,] . [更新日,]]

という感じです
知りたい点
そもそも三次元の構造は可能か?
できるだけ一つのテーブルにまとめたほうがいいのか?
似たようなサイトの実際の例などがあれば

環境 使用しているもの
django
mySQL
win10

参考
https://q.hatena.ne.jp/1262940213
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12161983817
https://qiita.com/tadsan/items/adaade6b675ac344f373

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Monazilla/develop - 5ちゃんねるwiki

ここに旧2ちゃんねるの仕様について書かれた文書があるのでこれを元にテーブル設計するのが良いと思います。datファイルとsubject.txtの仕様を理解すれば簡易な掲示板を作る参考になります。


テーブル1  [[id]

. [レス本文1,レス本文2,レス本文3,レス本文4.........]
. [レス作成日,レス作成日,レス作成日,レス作成日,.....]
. [本文,]
. [タイトル,]
. [作成日,]
. [更新日,]]

上記の1テーブルにまとめたケースではいくつかのデメリットがあります。

  1. レコードのサイズが巨大になる。1000レスまであるスレッドの場合、場合によっては1レコードが1MB超になることもあります。 (もしレプリケーションする場合)レプリケーション・ログも巨大になるのでNetwork I/O または Disk I/Oがボトルネックになりスレーブの遅延が発生しやすい。

 

  1. 単一レスの検索・参照で不要なディスクI/Oが発生する / テーブルが分けれれていればインデックスを作って余計なレコードを読み込まずにアクセス出来ます。

最近は、AWSとかで性能の良いRDBMSを提供してくれているのでよっぽど巨大なシステムでも無い限りパフォーマンスの問題は起きにくくなってますが問題が起きてしまうと手遅れだったりするので、設計段階で問題を洗い出せるのが良いです。

投稿2022/01/09 05:33

yuokada

総合スコア550

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

テーブル1個(カテゴリまで設置するなら2個)で可能ではないでしょうか。

スレッドテーブルに「親ID」を持ち、「親IDがNULLならそのスレッドの1」と判断できます。スレッドにぶら下がるコメントにはその1のIDを親IDとして入れていく。レス番号は1から連番。

1000レス云々はアプリケーション側の制御です。
当該スレッドのコメント数1000に達したらコメント投稿フォームを出さない。
「これ以上書き込めません」のような文言を出す。

カテゴリを設置する場合はカテゴリマスタを用意。カテゴリIDをスレッドテーブルに。カテゴリ名をカテゴリマスタに。

投稿2022/01/06 23:15

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問