2011-07-05 15 views
0

これはデータベースに最適な構造であるかどうかはわかりませんが、これは私が現時点で持っているものです(変更の提案があります)。私は基本的に各ページのフィールドのユーザー定義セットを持つページを作成したい。だから私は4つのテーブルを持っている:ページ、page_fields、page_dataとdata_fields。データベースの正規化とSQLの混乱

ページ:

id name 
1 home 

page_fields:

page_id field_id 
    1  1 
    1  2 
    1  3 

page_data:

page_id field_id content 
    1  1  'This is the Title' 
    1  3  'Some description here' 

data_fields:

id field_name field_type 
1  title   text 
2 subtitle  text 
3 description textarea 

まずは、これは良いデータベース構造ですか? 第2に、page_fieldテーブルで定義されている必須フィールド、そのフィールドのデータ(ある場合)、filed_nameとfiled_typeを取得するにはどうすればよいですか?

私はここにいくつかの結合があると推測しますが、私はそれらを解決できません。

助けてください。

答えて

0
  1. 1つのページの1つのフィールドが単一の値を持つことができると仮定すると、簡単にpage_fieldsテーブルを削除できます。ページに割り当てられたフィールドのリストはpage_dataに格納されます。まだコンテンツがない場合、NULL値はcontentカラムになります。 SELECT * FROM page_fields INNER JOIN page_data ON (page_fields.page_id = page_data.page_id) INNER JOIN data_fields ON (page_data.field_id = data_fields.id);

  2. よう

  3. 何かがさらにエンティティについて読んバリューモデル属性、それはいくつかの新しいアイデアを生成し、一般的に物事を理解するのに役立つだろうことがありますhttp://en.wikipedia.org/wiki/Entity-attribute-value_model

+0

はい、私はあなたが何を意味するか見ますpage_fieldsにnull値を使用した場合、page_fieldsは冗長になります。したがって、私のSQLは次のようになります。SELECT * FROM page_data INNER JOIN data_fields ON(page_data.id = data_fields.id) WHERE page_data.id = '1' - 動作します!ありがとうございました – charliefarley321