2011-02-10 74 views
1

我只是想知道如果我可能會在下面得到一些建議:PHP/MySQL的關係表意見

我建立在笨站點中存在的內容類型「portfolio_item」。 通過複選框控件可以在3個地方顯示相同的項目組合項目: 主頁,成員頁面和客戶端頁面。

我只是想知道在數據庫中是最好的方式來實現這種關係。我可以爲每個上述場景設置3個關係表,但對我來說這似乎過分(該網站非常小)。

我想使用一個關係表具有以下字段組成:

type (homepage, client or member) 
show_on_id 
portfolio_id 

類型字段的目的是確定要檢索的表從「show_on_id」(無論是客戶端或部件),如果該類型是主頁,然後show_on_id不是必需的。

這樣做有什麼明顯的缺點嗎?

回答

3

是的,有一些缺點。您可能會得到同一設置的多行,每個行可能會相互矛盾。所以,你如何在這張表中插入行,是非常重要的。

如果你不添加任何更多的部分,還不如投資組合表:

CREATE TABLE `portfolio` 
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`content` TEXT NULL, 
`showHome` BOOLEAN NULL, 
`showClient` BOOLEAN NULL, 
`showMember` BOOLEAN NULL) 

然後表將用戶鏈接到他們的投資組合,

CREATE TABLE `portfolio_user` 
(`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`portfolio` INT NOT NULL, 
`user` INT NOT NULL) 

如果你是將在稍後添加更多可以顯示投資組合的位置,或者如果這些位置是動態的,則您的方法將起作用。我只是將'type'更改爲'place',因爲這更容易理解,然後使用ENUM或其他表來定義組合可以顯示的位置。

0

難道還有每個位置的一個或多個投資項目?

如果很多,使用鏈接表,如果只有一個直接使用外鍵字段鏈接到投資組合。

我會建議不要使用一個鏈接表對所有三種基於與正是這樣的設計,並且可以在以後表面上的問題,個人經驗。