2011-03-05 66 views
0

例子:如何爲具有多種內容類型的類別設計數據庫模式?

4類:
- 汽車
- 自行車
- 船
- 飛機

和幾個表的內容

文章(ID,標題,正文)
photo_galleries(id,photo_filename ...)
video_galleres(id,video_title,video_url)

,現在我很好奇如何設計數據庫架構中的類別劃分從這些表的內容...

我想到某事。像這樣:

categories_content
- CATEGORY_ID
- article_id的
- photo_gallery_id
- video_gallery_id

但似乎空間大量浪費空的...:/

+0

這些是一個一對多或多對多一對多關係? – tvanfosson 2011-03-05 20:01:32

+0

文章和照片庫可以處於同一類別嗎? – smartcaveman 2011-03-05 20:17:15

+0

他們可以在多個類別... – Sqrcz 2011-03-06 18:52:48

回答

2

另一個設計中要考慮將每種內容類型創建單獨的關係表:

article_category (article_id NOT NULL, category_id NOT NULL) 
photo_g_category (photo_g_id NOT NULL, category_id NOT NULL) 
video_g_category (video_g_id NOT NULL, category_id NOT NULL) 

這種設計消除了需要存儲NULL值,將在您的設計需要。所有這些列將被定義爲適當表的外鍵。

浪費的空間對於您的設計並不是真正的問題。 (在大多數數據庫引擎中,沒有空間用於存儲空值。)

設計中的一個更大的問題是確保至少有一個內容FK列被填充,並允許其他列爲空。另外,如果允許在一行上填充多個內容FK列,那麼您的設計會使添加和刪除關係的過程更加複雜。

你打算如何表示與類別相關的內容,例如: 1?

文章:A,B,C photo_g:P,Q video_g:V,W,X,Y,Z

1 a p v 
1 b q w 
1 c - x 
1 - - y 
1 - - z 

OR

1 a - - 
1 b - - 
1 c - - 
1 - p - 
1 - q - 
1 - - v 
1 - - w 
1 - - x 
1 - - y 
1 - - z 

去除類別之間的關係的1和photo_g p會有所不同,在一種情況下需要更新一行,另一種情況是刪除一行(沒有必要保留一行沒有填充任何內容FK值的行)。

我建議三個獨立的表來保存這些關係:

article_category: 
a 1 
b 1 
c 1 

photo_g_category: 
p 1 
q 1 

video_g_category: 
v 1 
w 1 
x 1 
y 1 
z 1 
+0

我喜歡這個想法,除了(類別,類型,項目)系統的事實,我不得不作出另一個「類似」表類型,當然還有添加/刪除問題。 在這種情況下,我只會在特定模型中調用特定表。 謝謝。 – Sqrcz 2011-03-06 18:54:42

1

你可以有關係的表如:

category_id, type_of_item, item_id

其中type_of_item是文章,照片,視頻等,item_id是該條目中的條目的ID。

+0

聽起來很合理:) 會嘗試。謝謝。 – Sqrcz 2011-03-05 20:02:20

相關問題