0

在我的应用程序中,我在数据库(MySQL)中有 2 个表: CompaniesNews. Company有很多News

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

我添加了一个Photos包含下一个字段的表:id company_id filename

我的问题是:现在我还需要拥有属于News. 我应该添加另一个表,例如将调用该表,或者我应该向我的表中Media添加附加字段 ( type) ,重命名为然后过滤 PHP 中的结果,并构建更复杂的查询,例如获取与 Company 和 'type = 相关的照片2' 获取与.Photoscompany_idforeign_idAND 'type' = 1news

什么是更好的方法?

4

3 回答 3

1

您应该将该company_id字段从Photos表中取出并创建两个新表,其中一个CompanyPhotos带有id, photo_id,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:类似select * from Photos p inner join NewsPhoto np on p.id = np.photo_id where np.news_id = ?

于 2013-02-26T18:56:46.440 回答
0

规范化数据库总是好的。一开始它只是包含所有数据的表,它已经演变为具有公共字段的链接表。

因此,我强烈建议您使用桌子Photos

毕竟,您必须提出基本问题:一张照片可以属于不同的新闻吗?一条新闻可以有不同的图片吗?如果两个问题的答案都是“是”,则您有一个 N:M 关系,它通过一个包含每个表的 id 的中间表来解决。

于 2013-02-26T18:56:36.493 回答
0

您可以用UUIDs作主键。因为它们在应用程序范围内是唯一的(如果您使用 CakePHP 创建它们),您可以只使用parent_idPhotos 表中的一列并去掉该type列。

另一种方法是 MySQL 视图。您可以在照片表的顶部设置 2 个视图(例如 NewsPhotos、CompanyPhotos)。CakePHP 像表格一样处理(简单)视图,因此您可以轻松地为此创建模型和控制器。

于 2013-02-27T10:47:48.313 回答