2013-02-26 113 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的句柄(简单)查看喜欢表,所以你可以很容易地创建模型&控制器此。