2011-07-03 10 views
2

テーブル内の各IDのIDインデックスのリストを格納する方法を知っています。これらは事実上ID間に「関係」を形成します。ここでは、メインテーブルには、これまでのところです:メインMySQLデータベース設計の質問 - インデックスのリスト/配列を格納する

テーブル:

  • ID、整数、プライマリキー

  • 名、varchar型

  • text_info_1、varchar型

  • text_info_2は、 varchar

そして今、各行について、ある行が次の行とどのように関係するかを示す別の行のIDのリストが表示されます。たとえば、ID#5の行は、ID 6,7,9,25、...などと関連している可能性があります。

は、ここで私が考えられてきたオプションは次のとおりです。

  1. は、テキストフィールドなどの新しい列を作成し、これらの整数値のシリアライズされたリストを格納します。その後、私がそれらを必要とするときに、

  2. relation_id(int auto incrementプライマリキー)、name1、name2、[オプションで、リレーションタイプを指定する他のフィールド(nice)]という新しいテーブルを作成します。

私はオプション1がハックのビットであると感じます。私は前にそれをやったことがありますが、おそらくオプション2はより良いデザインですか?

私はスピードが心配です。オプション1を使用すると、main WHERE id = $ idからSELECTリレーションシップを行い、結果をアンシリアル化し、整数インデックスを持つ配列を持つことができます。しかし、オプション2では、何度も(10倍以上)大きくなる表をブラウズし、「SELECT name1、name2 FROM relations」を実行する必要があります。

スピードが私の優先事項です。私は見つけ出すのが好きではあるが、どれがスペースの方が良いかわからない。

どのオプションを使用する必要がありますか?私が考慮していない他の良いオプションはありますか?私はまた、データベース設計に関するいくつかの良い一般的な指摘に感謝します!

ありがとうございます。

答えて

0

2番目のオプションが優れています。データベース設計をより良くしたい場合は、データベースの正規化についてお読みください。残念ながら、私が使った資料はすべて英語ではありませんでした。これはwikipedia link です。

関係:代わりに、関係テーブルの名前を格納する

relation_id (int auto increment primary key) 
id_one (int) 
id_two (int) 
... 

は、あなたがIDを格納します。

関連する問題