2012-03-24 9 views
2

の使用:MySQLテーブルの関係と私は2つのテーブルでMySQL DBを持っているMD5ハッシュ

  • sample_name(ファイルの店舗名、同じsample_hashのための複数の名前)。
  • sample_hash(ファイルのハッシュを格納し、重複するmd5を格納しません)。

これら2つのテーブルを関連付ける

私の最初のオプション(すべてのテーブルがid int型符号なしNOT NULL AUTO_INCREMENTを持つ)両方のテーブルのMD5列を作成し、それらを関連付けることです。しかし、私はvarchar(32)を複製するので、これは欠点を有するように思われます。これは、何百万ものレコードを持つスペースの無駄です。

私の2番目の選択肢は、まずファイルハッシュを計算し、sample_hashテーブルのmysql_insert_id()を取得し、sample_nameテーブルに挿入することです。これは、sample_hashテーブルのハッシュが新しい場合に意味があります。したがって、私はmysql_insert_id()変数を自由に使用できます。

ハッシュがすでにsamples_dbに存在する場合、ハッシュを再度保存しないので、mysql_insert_id()はありません。

md5がすでに存在する場合に備えて、指定されたmd5のidを検索してsamples_nameテーブルに格納する以外の方法がありますか?もしそうなら、どうしたらいいですか?

+0

ファイル名とハッシュを同じテーブルに保存するようにリファクタリングすることはできますか? –

+0

私はリファクタリングに精通しています。プロセスはどのように機能しますか? – karamazov

+0

どうすればいいのかよく分かりませんが、すべてのフィールドが既に最適化されていますか?私は 'sample_hash'のハッシュのためのユニークなインデックスと、他のテーブルのための単純なインデックスを考えています。フィールドの型はchar(32)でなければなりません。検索を避けるための解決策が見つからない場合、少なくともこの方法では少し早くなります – haltabush

答えて

1

あなたが記述した要件から、sample_hashテーブルはまったく必要ありません。

ハッシュをsample_nameテーブルに保持し、そのテーブルのハッシュ値のすべてのルックアップを実行できます。

+0

1つのハッシュが複数のファイル名を持つことができるので、ファイル名とハッシュを別々のテーブルに保存する必要があります。一方で、私はmd5の欄にインデックスを付けました、おそらく最良の選択肢です。 – karamazov

関連する問題