2012-02-13 6 views
1

非常に基本的なWebサイトのmySqlデータベースには1つのテーブルしかなく、php/mysql呼び出しを使用して1つのテーブルにユーザーレコードを追加しています 'RegisteredUsers' - 各レコードは次のとおりです。ユーザーごとに任意の数のテキスト段落を格納する必要があります

(name, member number, name of their subfolder on the server). 

私にとって新しい要件 - 私のユーザーのそれぞれがゼロ5000項目から入力することができますし、各項目の彼らは、テキスト説明を入力します。

各ユーザの「アイテム」は、「初期の男」の古さ(先史時代の粘土壺)、ファローアの1つで埋められたアーティファクト、 (名前、説明)タプルは制限されたサイズのテキストになります。 (名前:テキスト、長さ= 50、説明:テキスト、長さ= 512) - サイトはユーザーに名前と説明を非常に簡潔にさせる。

私はデータベースの初心者ですが、各ユーザーに(0から5000までの)任意の数を追加できるようにしなければなりません。2番目のテーブルを作成し、 2番目のテーブルのインデックスを作成する1番目のテーブル。

次のフィールドを持つことになり、この第二テーブルの各レコード:

(member number, name-of-the-antique, description). 

私に関するそのユーザはと、この第二のテーブルから名前を「バビロニアの粘土ポット」の項目を削除したい場合ユーザーのための5000までの骨董品 - 私は2番目のデータベースを検索するとヒットします

 member number=NN and name=One-Of-5000-Antiques. 

これは正しいアプローチですか?

+2

データベースは、数百万行/十億に達しない限り、パフォーマンスヒットを心配しないでください。適切な索引付けを行うことで、それは問題ではありません。 –

+1

セカンダリテーブルを追加してパフォーマンスに影響を与えることについてあまり心配する必要はありません。まず最初に、ユーザーIDと、あなたが探しているエントリー(y | ies)を返すために使用したい識別子の1つのテーブル(table2)だけをクエリします。結局のところ、これは何のために設計されています。別の方法として、ユーザーごとにxmlファイルを作成する方法がありますが、推奨しません。 – CBusBus

+0

オケイ - 検索する5000のレコードが「たくさんの検索」であることが気になると思います。両方のフィードバックに基づいて、最初のテーブルからユーザーIDでインデックスされた2番目のテーブルを作成するという本能は大丈夫でした。ありがとうございました。 – wantTheBest

答えて

1

このようなパフォーマンスの問題に対する答えは、ほとんど常にインデックスです。通常、アンティークテーブルに列をもう1つ追加します。これは数値の自動インクリメントプライマリキーです。したがって、アイテム "Babylonia clay pot"を削除する代わりに、ID 42のアイテムを削除します。このプライマリキーはインデックスが作成され、IDによる行へのアクセスは、テーブルのサイズが大きくなっても、明らかに、しかし、あなたはおそらくそれらの限界に近づくことはありません)。また、name-of-the-antique列に索引を作成することもできますが、それは効率が悪くなります(ただし、索引なしでも高速です)。

ここインデックスについての記事を読む:http://dev.mysql.com/doc/refman/5.1/en/create-index.html

+0

ありがとうございます - これは*正確に*私が何をするかです。 – wantTheBest

関連する問題