mysql:2002
From: (moeru) <<moeru@xxxxxxxxxx>>
Date: Thu, 11 May 2000 20:07:05 +0900
Subject: [mysql 02002] 正規化と高速化
こんにちは 正規化について質問させてください。 まだ、確実に正規化の意味がつかめてないのだと思います。。 以下のようなテーブルを作りました。 CREATE TABLE users ( userid INT NOT NULL AUTO_INCREMENT, username VARCHAR(20) NOT NULL, password VARCHAR(20), email VARCHAR(50) NOT NULL, PRIMARY KEY (userid), UNIQUE (username), UNIQUE (email), ); CREATE TABLE items ( itemid int(20) NOT NULL AUTO_INCREMENT, username VARCHAR(20) NOT NULL, title tinytext, date timestamp(14), description text, PRIMARY KEY (itemid), INDEX (title), INDEX (date), INDEX (username), ), うちの場合、よく使われる(読み込まれる)のは、itemsテーブルだと思うのです。 itemsテーブルに INDEX (username), を作ったのは ユーザーごとの出品アイテムを高速に表示させるためです。。 と考えたのですが。。。 MySQLの場合、以下のようにusersテーブルとitemsテーブルをリレーションして usersテーブルの情報(usernameやemail)をもらってきたほうが高速なのでしょうか? 以下では、INDEX (username)は、リレーションしてるから必要ないと思って はずしました。。 CREATE TABLE items ( itemid int(20) NOT NULL AUTO_INCREMENT, userid INT NOT NULL, title tinytext, date timestamp(14), description text, PRIMARY KEY (itemid), INDEX (title), INDEX (date), ), * itemsテーブルでは、userid INT NOT NULL, のAUTO_INCREMENTは必要ないと思って取りました。。これは正解ですか? 正規化によって、検索を高速化するためには それぞれのテーブルにだぶりのフィールドが無い(ID以外皆無に)すると理解して良いのでしょうか? 例え、フィールドが他のテーブルとダブっても、 目的によっては、一つのテーブルに必要な情報が入ってる方が高速 とかいう場合もあるのかどうかも知りたいです。。 アドバイス宜しくお願いしますm(__)m モエル ぐるぐるオークション http://www.pileup.com/auction/ *新しいサイト(ぐるぐる)構築の為の仲間募集中です(^^)
1999 2000-05-11 18:09 [Kakiuchi Atsuko <m00] 自動起動開始するには? 2000 2000-05-11 18:41 ┣[とみたまさひろ <tomm] 2001 2000-05-11 19:21 ┗[Ko Tanikawa <tanikaw] -> 2002 2000-05-11 20:07 ┗[<moeru@xxxxxxxxxx> ] 正規化と高速化 2004 2000-05-11 21:06 ┗[とみたまさひろ <tomm] 2005 2000-05-11 23:46 ┗[<moeru@xxxxxxxxxx> ] 2006 2000-05-12 09:30 ┗[とみたまさひろ <tomm] 2008 2000-05-12 18:55 ┗[<moeru@xxxxxxxxxx> ] 2009 2000-05-12 19:10 ┗[とみたまさひろ <tomm] 2010 2000-05-12 19:36 ┗[<moeru@xxxxxxxxxx> ] 2011 2000-05-12 19:54 ┗[とみたまさひろ <tomm]