2014-02-27 37 views
2

我是新手。我正在設計數據庫的模式,我被困在這個地方。 我有房間的桌子,其中一個房間是房間,這樣每個房間都有很多room_Items。
的問題是,我根據房型數據庫模式:如何根據類型製作動態表?

Id name 

1 LG-12FG 

2 LG-31FG 

Room_item

Id name room_id  required field 

1 Window 1   mirror/type/size 

2 Door  1   type/size/code 

3 Wall  1   layer/color 

4 Wall  2   layer/color 

我不知道如何做到這一點需要在room_items不同領域。我是否需要爲每個room_item類型創建新表格?如果我這樣做,我必須稍後加入條件才能獲取所有房間的物品。請幫助

+0

有什麼建議嗎? – design

+0

僅從curriosity,你會運行在數據庫頂部的應用程序?具有業務邏輯的應用程序? – olovholm

+0

@olovholm是的,我必須先製作數據庫,稍後再從某些外部源中導入數據 –

回答

0

首選(標準化)解決方案是爲每個項目類型(表格窗口,表門,表格牆)創建一個單獨的表格。這將使選擇數據更難,因爲你將不得不做多個連接。

或者,您可以創建一個包含所有項目的屬性,單個表:

item_id, room_id, type , size, color, code, type2  , layer 
1  ,  1, Window , 100, NULL, NULL, WindowType1, NULL 
2  ,  1, Door , 90, NULL,  1, DoorType1 , NULL 
3  ,  1, Wall , NULL, red, NULL,  NULL, 2  
3  ,  2, Wall , NULL, green, NULL,  NULL, 1 
+0

如果用戶以後需要更多字段會怎麼樣? – design

0

在你的地方,首先我創建了一個表至極包含字段的數據是這樣的:

Field_name ID_Item Value 
size  2  '10.0' 
color  3  'Black' 
...... 

您可以使用生成器模式在房間創建您的項目。作爲例子,

exec ADD_Black_Door @roomID 

此代碼可能的項目(門)添加到你的房間,並添加所需的所有字段的默認值上表(顏色=「黑」等)。

+0

如何選擇房間的所有項目?請指導 – design

0

如果我正確理解你的需求,你應該讓三個表:

客房

room_id | Name (...) 
-------------------- 

ITEMS

item_id | Name (...) 
-------------------- 

ROOMS_ITEMS

room_id | item_id 
------------------- 

在上表的映射表屬於房間的物品。

0

我想,如果你有一個表中的每個房間裏的實體,這將是更容易理解,因爲這是在本機上您想要區分數據值。

由於在您的情況下,門不是牆,您可以製作這兩個單獨的表格,然後您可以使用room_items作爲中間的表格。

Wall 
ID | layer | color 

Window 
ID | Mirror | Type | Size 
在房間

而且,由於每個項目創建自己的增量ID的ITEM_ID可以指向幾個類似的ID,您添加它是用來區分你要查找什麼類型元素的ITEM_TYPE。

Room 
room_id | item_id | item_type 
+0

是的,我在做同樣的事情,但在這裏我們有兩個問題1)以後很難選擇所有的房間。我將需要條件加入2)如果用戶添加新類型會怎麼樣?我將被要求添加新表 – design

+0

1)是的,它會使查詢更復雜。 2)如果您想要靈活地改變和添加新類型,爲什麼不選擇NoSQL解決方案,例如面向文檔的NodeSQL?使用SQL你需要有一個預定義的結構,如果你想添加更多的元素而不是計劃的,我會考慮重寫代碼,然後可以改變數據庫模式,在這種情況下,你也只需要添加一個不影響其他表的新表。 – olovholm

+0

我在這個級別上很新,我已經給了數據庫和IM期待着它的工作。請具體說明您想添加哪個表格? – design

0

請加入一個表中的兩個表之間:

SELECT RI.id, 
     RI.name, 
     RI.room_id, 
     RI.required field, 
     R.id  AS RoomId, 
     R.name  AS RoomType 
FROM room_item RI 
     LEFT OUTER JOIN room R 
        ON R.id = RI.room_id 
+0

請再次閱讀我的問題 – design

+0

請發佈您的預期輸出 – jainvikram444

+0

我想先製作架構 – design

0

這裏是一個解決方案。 創建表室,Room_Item,Item_specification

房間

ROOM_ID | ROOM_NAME

room_item

ITEM_ID | room_id | ITEM_NAME

Item_specification

SPEC-ID | item-id | spec_name