组织数据库

时间:2013-02-26 18:48:08

标签: php mysql database cakephp

在我的应用程序中,我在DB(MySQL)中有2个表: CompaniesNewsCompany有很多News

Company可以显示一组图片,这些图片将显示在company“查看页面上”以及有关该公司的所有相关信息。

我添加了Photos表,其中包含以下字段:id company_id filename

我的问题是:现在我还需要有属于News的图片。 我应该添加另一个表格,例如Media,或者我应该在我的type表格中添加其他字段(Photos),将company_id重命名为foreign_id然后在PHP中过滤结果,并使用例如AND 'type' = 1构建更复杂的查询以获取与公司相关的照片和'type = 2'以获取与news相关的照片。

什么是更好的方法?

3 个答案:

答案 0 :(得分:1)

您应该从company_id表中取出Photos字段,并创建两个新表CompanyPhotosidphoto_id,{{1} } {},company_id NewsPhotosidphoto_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处理(简单)视图,如表格,因此您可以轻松创建模型和&控制器为此。

相关问题