2013-02-26 114 views
0

在我的應用程序中,我在DB(MySQL)中有2個表格: CompaniesNewsCompany有很多News組織數據庫

Company可以有一組圖片,這些圖片會顯示在company「查看頁面」以及有關該公司的所有相關信息。

我添加了一個Photos表旁邊的字段:idcompany_idfilename

我的問題是:現在我還需要有將屬於News圖片。 我要補充另一個表,這將被稱爲例如Media或者我應該在PHP我Photos表附加字段(type)添加,重命名company_idforeign_id然後篩選結果,並建立更復雜的查詢,例如AND 'type' = 1去取照片與公司相關,'type = 2'可獲取與news相關的照片。

什麼是更好的方法?

回答

1

你應該採取的company_id場出Photos表,並創建兩個新表,CompanyPhotosidphoto_idcompany_id領域,而另一個NewsPhotosidphoto_idnews_id

然後,如果你想獲得公司的照片,你可以這樣做:select * from Photos p inner join CompanyPhoto cp on p.id = cp.photo_id where cp.company_id = ?

NewsPhoto相似:select * from Photos p inner join NewsPhoto np on p.id = np.photo_id where np.news_id = ?

+0

你不覺得這種方法對我所需要的有點矯枉過正嗎?因爲我有兩個簡單的X hasmany Y關係。問題是 - 我需要有兩張不同的桌子或一張桌子嗎? – Derp 2013-02-26 19:38:28

+0

我不確定2或1桌子是什麼意思。已經有3個表格:「照片」,「公司」和「新聞」。你的問題是關於如何將'照片'加入'公司'和'新聞',但你提供的任何可能的解決方案都是正確的。擁有完整的「照片」副本(第一個想法)意味着只要您需要與「新聞」和「公司」相關的一張照片,就會有重複的數據(即「照片」和「媒體」中的相同照片)。使用'type'字段來確定鏈接到(第二個想法)的表正在打破使用RDBMS的全部要點 - 您將永遠不會有任何實際的參照完整性。 – leftclickben 2013-02-27 08:34:03

+0

對不起,也許我的英文不允許我準確地傳達信息。我從來不需要有一張照片與「新聞」和「公司」相關 – Derp 2013-02-27 10:28:52

0

它總是很好normalize databases。一開始,它只是關於具有所有數據的表格,並且已經演變爲具有普通字段的鏈接表格。

因此,我強烈建議你有表Photos

畢竟,你必須提出一個基本問題:一張照片是否屬於不同的消息?新聞可以有不同的圖片嗎?如果兩個問題的答案都是「是」,那麼您有一個N:M關係,該關係使用包含每個表中的ID的中間表來解決。

+0

我不知道我理解你的權利。我應該去所有圖片的1張桌子,並在其中的「類型」字段?澄清事情:'公司'可以有很多照片。新聞也可以有很多照片。新聞和公司不共享照片。因此,1'Company' =許多獨特的照片和1'News'也很多=與當前消息後獨特的照片,這些照片不會被不同'News'之間共享。 – Derp 2013-02-26 19:37:16

0

您可以使用UUIDs作爲主鍵。因爲它們是唯一的應用程序範圍內(如果你創建他們CakePHP的),你可以只在您的照片表中使用parent_id列,並擺脫type科拉姆的。

另一種方法是MySQL的意見。您可以在照片表格頂部設置2個視圖(例如,NewsPhotos,CompanyPhotos)。 CakePHP的句柄(簡單)查看喜歡錶,所以你可以很容易地創建模型&控制器此。