在我的应用程序中,我在DB(MySQL)中有2个表:
Companies
和News
。 Company
有很多News
。
Company
可以显示一组图片,这些图片将显示在company
“查看页面上”以及有关该公司的所有相关信息。
我添加了Photos
表,其中包含以下字段:id
company_id
filename
我的问题是:现在我还需要有属于News
的图片。
我应该添加另一个表格,例如Media
,或者我应该在我的type
表格中添加其他字段(Photos
),将company_id
重命名为foreign_id
然后在PHP中过滤结果,并使用例如AND 'type' = 1
构建更复杂的查询以获取与公司相关的照片和'type = 2'以获取与news
相关的照片。
什么是更好的方法?
答案 0 :(得分:1)
您应该从company_id
表中取出Photos
字段,并创建两个新表CompanyPhotos
,id
,photo_id
,{{1} } {},company_id
NewsPhotos
,id
,photo_id
。
然后,如果您想获取公司的照片,您可以执行以下操作:news_id
。
与select * from Photos p inner join CompanyPhoto cp on p.id = cp.photo_id where cp.company_id = ?
相似:NewsPhoto
。
答案 1 :(得分:0)
normalize databases总是好的。一开始它只是关于包含所有数据的表格,并且已经演变为具有公共字段的链接表。
因此,我强烈建议您使用表格Photos
。
毕竟,你必须提出一个基本问题:一张照片可以属于不同的新闻吗?新闻可以有不同的图片吗?如果两个问题的答案都是“是”,那么你就有了一个N:M的关系,用一个包含每个表中id的中间表来解决。
答案 2 :(得分:0)
您可以使用UUIDs
作为主键。因为它们在应用程序范围内是唯一的(如果使用CakePHP创建它们),您可以在Photos表中使用parent_id
列并删除type
列。
另一种方法是MySQL Views。您可以在Photos表格上设置2个视图(例如NewsPhotos,CompanyPhotos)。 CakePHP处理(简单)视图,如表格,因此您可以轻松创建模型和&控制器为此。