2011-07-05 113 views
0

不知道這是否是我的數據庫的最佳結構,但這是我目前所擁有的(可以對建議進行更改)。我基本上想創建頁面,每個頁面都有一組用戶定義的字段。所以我有四個表格:頁面,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 

首先這是一個好的數據庫結構? 其次,如何獲得由page_field表定義的必填字段,該字段的數據(如果有的話)以及給定我們知道頁面ID的filed_name和filed_type?

我想這裏會有幾個連接,但我不能解決它們。

任何幫助表示讚賞。

回答

0
  1. 假設一個頁面上的一個字段可以有單個值,那麼可以很容易地消除page_fields表。分配給頁面的字段列表將存儲在page_data中,如果還沒有內容,則NULL值將位於content列中。

  2. 喜歡的東西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);

  3. 另外瞭解實體屬性值模型,可能會產生一些新的想法和一般有用理解的東西:http://en.wikipedia.org/wiki/Entity-attribute-value_model

+0

是的,我明白你的意思如果我在page_data中使用了空值,page_fields將會是多餘的。所以我的SQL然後將是:SELECT * FROM page_data INNER JOIN data_fields ON(page_data.id = data_fields.id) WHERE page_data.id ='1' - 哪些工作!謝謝 – charliefarley321