MySQLにテーブル構造があり、次の構造があります。
home_id、home_name、dateadded
次の構造を持つspecsという別のテーブルがあります。
home_id、spec_key、spec_value
その中に、次のようなエントリを含めることができます。
1, price, 500000
1, location, 90210
1, rooms, 3
1, washrooms, 3
1, furnished_basement, 0
2, location, 14410
2, garage_size, 3
2, price, 335000
検索のために、上記を非正規化したいと思います。テーブル(denormalized_homes
)の構造は次のようになります。
home_id, price, location, rooms, washroom, furnished_basement, garage_size, dateadded
上記からわかるように、a)すべてのエントリがすべての列の値を持っているわけではありません。b)テーブル構造は、INSERT INTO
denormalized_homesselect * from
仕様タイプのクエリを助長しません。また、ストアドプロシージャやトリガー(ホスト規制)を使用できません。
これまでに行った戦術は、home_idをdenormalized_homes
テーブルに挿入してから、次のクエリのようなものを使用して仕様の各フィールドを実行することです。
UPDATE `denormalized_homes` dh, specs s SET dh.price = s.spec_value WHERE dh.home_id = s.home_id AND s.spec_key = "price";
可能な列ごとにクエリを作成して実行すると、機能します。もっと良い方法があるに違いないと思っているだけですよね?