2011-10-23 9 views
0

私のような食料品の情報を保持するテーブルがあります。それぞれの夜MySQLは - アーカイブデータベースとmaintining参照

id 
typeid 
groceryname 
grocerydesc 

を私はそれをアーカイブする新しいテーブルにそのテーブルをコピーします。食料品のタイプのオプションを保持する第2のテーブルにタイプIDフィールド参照:

id 
typename 

そして食料品テーブルでIは、選択されたタイプのIDを参照します。私の質問は、いったんそのアーカイブされたものは、タイプ名が食料品の種類のテーブルで更新されている場合に起こるでしょうか?たとえば、食料品の種類のテーブルにソーダのエントリがあり、それがアーカイブされているとします。今では人がソーダを水に変えましたが、アーカイブのすべてのエントリーは間違った水を参照します。これを処理する最善の方法は何ですか?私は代わりに型名をつかんで、型IDの代わりに食料雑貨品目とともに保管しますか?しかし、その後、数値よりもテキストを使ってアーカイブテーブルをクエリすると、それは遅くなるでしょうか?それとも、もしあなたがそれを変更したら、それはアーカイブテーブルのリストも更新するでしょうか?

答えて

0

これはテーブル内にどのようにON UPDATEクローズを設定し、どのような種類のエンジンがテーブルを持っているかによって異なります。 ON UPDATE CASCADEを設定し、テーブルがinnodbである場合、たとえば、メインテーブルの値を更新すると、参照されるテーブルの値も更新されます。

あなたがここでこの種の動作の詳細を読むことができます:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

+0

まあIDは同じまま、彼らは更新できる唯一のことは、そのタイプの名前です。しかし、IDは常に同じであり、参照は常に正しいので、名前自体が変更されて別の意味を持つようにすることができます。 – John

+0

IDが同じで、アーカイブだけを更新したい場合は、お気に入りのサーバーサイド言語で少しのクエリを実行して更新できます。 –

関連する問題