2012-09-09 104 views
0

我有一些數據庫投影問題。設計複雜關係表

我有一些項目類型,比方說,那些都是「新聞」,「公司章程」,「文件」等

我也有「類別」表來存儲每種類型的類別。類型在特殊字段「category_type」中指定。因此,在我的應用程序代碼中定義了常量:news = 0,articles = 1,files = 2等。

現在問題是 - 構建連接表的正確方法是什麼?

方式一:我可以創建幾個表爲每種類型 - 「news2categories」,「articles2categories」,「files2categories」等

而第二個選項是建立一個全局表,這將有3場「item_id(int),item_type(int),category_id(int)」。實際上,我已經有一個全局表,只有一個字段除以類型。但這是否正確?我不想產生許多相同的表格,但另一方面,與一個表格和多種類型的關係似乎太抽象和複雜。請指教。

DB主要用於Yii框架,如果解決這個問題有意義的話。

+0

同一類別可以在不同類型的項目之間共享嗎?例如,文章和文件是否屬於同一類別? –

+0

使用表繼承。做一些超類型的新聞,文章,文件亞型 –

+0

Branko,我希望不會,它不能共享。如果發生這種情況,我認爲在創建一些_let的same_ categories類時沒有問題。 – user475255

回答

0

文章,新聞和文件有什麼區別?它們中的每一個都可以有多個類別(多對多)?假設對於每種類型(文章,新聞等)的多個類別的多對多需求是肯定的,並且它們各自彼此不同,我將具有以下表格:

category 
news 
category_news 
article 
article_category 
file 
category_file 

每個類別鏈接表將有2列:category_id和item_id(news_id,article_id等...)

我使用db編碼標準命名所有數據庫表中的單數(隨意更改爲多個-ack - 如果Yii另有說明)並讓我的鏈接表爲每個鏈接表的名稱用下劃線(按字母順序排列)分隔。

無論你做什麼,都要保持一致。

+0

是的,每種類型可以在幾個類別。正如@Mandar早些時候所說的,當需要添加更多類型時,這個方案可能會帶來一些麻煩。很明顯,這個結構更容易審查和理解,但我對創建大量同樣的表格有點癢。 – user475255

+0

@ user475255我同意,如果類型足夠相似,並且您希望添加更多的新類型,請使用常用的「項目」表並指定類型。這就是Drupal的「節點」方法,或者說wordpress已經變成了「後期」。但是,如果您的代碼不會超過4-5個類型,並且它們不共享基類,則爲簡單起見,應該使用單獨的表格。 – Ray

0

第一種方式似乎有問題,因爲您可能希望您的設計在添加/刪除不同類型時具有靈活性。如果你添加新的類型,你將不得不添加一個新的表格,我覺得這不是一個好的設計。

這個設計怎麼樣。

表:類別, 列: 類別ID(PK) TYPEID

表(FK到類型表。):類型,列:typeid的(PK),TypeValue

存儲類型的新聞,文章等類型表中。這將使設計在添加或刪除類型和類別時更加靈活。

+0

嗯,是的,我想過這個「類型」表。但無論如何,我看不出我在應用程序中硬編碼這些類型定義的任何方式。這就是爲什麼我只是沒有創建該表。 – user475255