[前][次][番号順一覧][スレッド一覧]

mysql:8523

From: "Kawaji, Shinya" <"Kawaji, Shinya" <kawaji@xxxxxxxxxx>>
Date: Wed, 17 Dec 2003 12:38:36 +0900
Subject: [mysql 08523] Re: MySQL でユニークキー

かわじ、です。


> 設計したときは掲示板だったのですが、それは
> 
> ・掲示板が複数作成できる
> ・各掲示板の中にはスレッドが複数入る
> ・各スレッドの中には複数の書き込みが入る
> 
> というもので、平たく言えば 2ch のようなイメージです。

以下、考え方の一つとして。

上記の 3層の構造を、一つの primary key で賄うのではなくて、
3つのテーブルの primary key に分ける方法もあります。

例えば、ですが、

create table bbs (
  bbs_id int unsigned not null auto_increment,
  title text,
  primary key (bbs_id)
);


create table thread (
  bbs_id int unsigned not null,
  thread_id int unsigned not null auto_increment,
  title text,
  unique key (bbs_id,thread_id)
);

create table mes (
  bbs_id int unsigned not null,
  thread_id int unsigned not null,
  mes_id int unsigned not null auto_increment,
  title text,
  body text,
  unique key (bbs_id, thread_id, mes_id)
);

とすれば、理論的には、掲示板の数(bbs_id) * スレッドの数(thread_id) *
投稿の数(mes_id) の数だけ、投稿を受け付けられることになります。

2ch タイプでしたら、スレッドごとに投稿数を 1000 とかに制限するのが
普通でしょうから、insert 前(もしくは後)にチェックすれば、
primary key が溢れることは無くなります(掲示板の数とスレッドの数を含め、
適切にチェックしていれば)。


上記のテーブル構造では、bbs_id が 8 で、その bbs の thread_id が 13 に
投稿があった場合、insert 文は

insert mes values (
  8,
  13,
  NULL,
  '投稿のタイトル',
  '投稿の本文'
);

等となります。


[前][次][番号順一覧][スレッド一覧]

      8475 2003-12-11 10:08 ["tonegawa" <tonegawa] rowid のようなもの                      
      8476 2003-12-11 11:44 ┗[OHTSUKA Ko-hei <tech]                                       
      8477 2003-12-11 12:03  ┣[<ataka@xxxxxxxxxx>  ]                                     
      8479 2003-12-11 12:28  ┃┗[SUGAWARA Hajime <sug]                                   
      8480 2003-12-11 12:42  ┃ ┗[<ataka@xxxxxxxxxx>  ]                                 
      8516 2003-12-17 07:19  ┃  ┗[とみたまさひろ <tomm]                               
      8518 2003-12-17 11:23  ┃   ┣["Jun Akita" <j-akita] MySQL でユニークキー (Re: rowid のようなもの)
      8519 2003-12-17 11:39  ┃   ┃┣["Kawaji, Shinya" <ka]                           
      8521 2003-12-17 12:10  ┃   ┃┃┗["Jun Akita" <j-akita] Re: MySQL でユニークキー
      8522 2003-12-17 12:35  ┃   ┃┃ ┣[SUGAWARA Hajime <sug]                       
      8526 2003-12-17 14:41  ┃   ┃┃ ┃┗["Jun Akita" <j-akita]                     
      8527 2003-12-17 18:34  ┃   ┃┃ ┃ ┣[ML account <ml@xxxxx]                   
      8530 2003-12-17 21:21  ┃   ┃┃ ┃ ┃┗["Jun Akita" <j-akita]                 
      8529 2003-12-17 20:30  ┃   ┃┃ ┃ ┗[SUGAWARA Hajime <sug]                   
->    8523 2003-12-17 12:38  ┃   ┃┃ ┣["Kawaji, Shinya" <ka]                       
      8524 2003-12-17 12:38  ┃   ┃┃ ┣[ML account <ml@xxxxx]                       
      8525 2003-12-17 12:41  ┃   ┃┃ ┗[takuma watanabe <tak]                       
      8520 2003-12-17 11:40  ┃   ┃┗[SUGAWARA Hajime <sug]                           
      8532 2003-12-18 01:46  ┃   ┗["zen kishimoto" <zen] オープンソース DB の質は商用ソフトの「 6 倍優れる」
      8478 2003-12-11 12:28  ┗["tonegawa" <tonegawa]                                     
      8481 2003-12-11 12:43   ┗[SUGAWARA Hajime <sug]                                   
      8482 2003-12-11 14:04    ┗["tonegawa" <tonegawa]