2012-04-03 12 views
0

私のプロジェクトでは以下のような状況があります。 1つのカテゴリに関連付けられたタグ値がいくつかあります。タグデータへのカテゴリの効率的な格納と検索

例:今すぐ

Fruits : Apple, Banana, Grape 
Vegetables: Tomato, Cabbage, Brinjal 

、このために私は2つの列、CategoryTagとデータベースの単純なテーブルを使用して、私はCategory欄に「果物」を記憶し、「アップル、バナナ、ブドウ」でTag列(各タグはコマンドで区切られています)。 select tag from TagsCollection where category='Fruits';のような簡単なSQL文を使って1つのカテゴリをクエリすると、 "Fruits"カテゴリに属する​​すべてのタグを含む文字列が取得されます。テーブルはレコードとして特定のカテゴリのインスタンスを1つしか持たないことに注意してください。そして、私はすべてのタグを次の処理のために分離する必要があるので、私はプログラミング言語(Java、ここ)で昏睡状態に文字列を分割します。

ここで、このようなものを実装する理想的な方法は何でしょうか。私は、RDBMS方式のストレージ(正確には、MySQL)を進めるのか、それとも&をこのようなタイプのデータを取り出すための他の高速な方法がありますか?

答えて

0

1つの列の1つの行に複数の値があるため、現在のデザインは最初の正規形に違反しています。また、タグ値に関するクエリは、パフォーマンスが低下する可能性があります。

正規化されたデザインは、カテゴリーやタグの列を保持しますが、カテゴリーやタグの組み合わせごとに別々の行を持っているでしょう - そうのように:

Category Tag 
Fruits Apple 
Fruits Banana 
Fruits Grape 
... 
+0

Iは意図Gことを望んするための任意の通常の形態を無視多値属性を使用すべてのより良い解決策。このようにして保存しておけば、効率的なマッチングのために、プログラミングフロントの各カテゴリにHashTableのようなものをさらに使用することができます。しかし、このような情報を格納するデータベース以外の方法はありますか? XMLのいくつかの並べ替え? (XMLベースのストレージには気づかない) – Kushal

0

これは、予想されるデータベースのサイズ、およびTagsCollectionに依存します特にテーブル。

膨大な数のレコード(膨大な数のレコードを意味し、1秒あたり何十億ものクエリを意味する)を期待しない場合は、RDBMSデザインを選択するか、NoSQLシステムの場合は

関連する問題