2012-03-07 7 views
1

私は将来、テーブルにフィールドを追加するオプションを避けるために、多くの値を保持する柔軟なシステムを作る方法を理解しようと多くのことを考えてきました。私はオフに考えること 唯一のことは、このようになります。テーブルを作成することです:柔軟なmysqlテーブル用の動的コンテンツソリューション

CREATE TABLE IF NOT EXISTS `form_data` (
    `id` int(11) NOT NULL auto_increment, 
    `name` varchar(50) NOT NULL, 
    `value` varchar(500) default NULL, 
    `form_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) 

+--------+---------+----------+--------+ 
| id | name | value | form_id| 
+--------+---------+----------+--------+ 
| 100 |fullname | Steve | 1 | 
+--------+---------+----------+--------+ 
| 101 |email |[email protected] | 1 | 
+--------+---------+----------+--------+ 
| 102 |fullname | John | 1 | 
+--------+---------+----------+--------+ 
| 103 |email |[email protected] | 1 | 
+--------+---------+----------+--------+ 

この方法で、私は、行の各値を保存することができ、そして私がしたいと思うほどダイナミックになります。 非常に長いテーブルでパフォーマンスが悪いことに気付いています。

ここで、値のView(フロントエンド)を "Regular"テーブルにする方法もわかりました。普通のテーブルのように見えます。

+--------+---------+----------+ 
| ID | Email |Fullname | 
+--------+---------+----------+ 
| 1 |[email protected] | Steve | 
+--------+---------+----------+ 
| 2 |[email protected] | John  | 
+--------+---------+----------+ 

ここで、PHPループではなく一時テーブルを作成したいとします。 この作品を作成する方法はありますか? form_idをパラメータとして受け取るストアドプロシージャを作成し、このようなテーブルを返すにはどうすればよいですか?

答えて

0

おめでとうございます。 Entity-Attribute-Value modelを再発明しました。

このモデルは長い間存在していましたが、リレーショナルデータベースシステムではperform quite badであることが証明されています。おそらくそれを使用しないでください。

This answer makes a nice list EAVの長所と短所を示します。最大のプロは、あなたが発見したものです。設計が簡単です。私がここで言うことの最大の欠点はパフォーマンスが悪いことです。

通常は、クエリを実行する頻度よりもはるかに少ない頻度で設計するので、設計中に少し時間がかかり、より高速なクエリが必要な場合があります。

+0

私は悪い性能を認識していますが、動的オプションには注意が必要です。それ。 –

+0

ところで、**は**すでに**存在しているものを発明することについて悪くはないと感じます。それは、あなたの発明がすでに他の誰かによって考えられていたことを意味します。続けると、ある日、あなたは何かを改善したり、まったく新しいものを考えたりします。 – Konerak

関連する問題