各种媒体的数据库布局和查询

时间:2013-02-27 01:45:01

标签: php mysql database-design laravel

我正在开发一个网站,允许用户提交视频,图片和其他指南(包含文字和图片的多个步骤)。

在网站的主页上,会列出最近上传的5-10个项目。

最初,我打算为每个人准备一张桌子,所以'视频','图片'和'指南'。 “指南”表格会有另一个表格“步骤”,因此每一步都是它自己的行'guide_id'。

在主页面上,每个元素都需要不同的代码来呈现(视频的iframe,图像的img标签等)。

有没有更好的方法为此创建数据库?也许内容项目表中包含所有不同内容的“类型”列?

如果没有,那么编写查询以从所有三个表中选择5-10个片段的最佳方法是什么,并且能够告诉结果的每一行的内容类型,以便可以使用适当的方式呈现码?

顺便说一下,如果影响那个答案,我正在使用Laravel PHP框架。

2 个答案:

答案 0 :(得分:0)

将两者放在一个表格示例中,将其命名为媒体,然后添加媒体类型

等列

答案 1 :(得分:0)

使用2个表格。 媒体 media_type

媒体表:

id       name     uploaded_at                  media_type_id
-------------------------------------------------------
1        aaa      2012-11-17 11:17:13            1
2        bbb      2012-11-17 11:20:11            2
3        ccc      2012-11-17 11:32:12            1
4        ddd      2012-11-17 11:45:10            3

media_type 表格:

id       name
----------------------
1        video
2        image
3        guide

这是模型的基本规范化数据库结构。您可以添加媒体表所需的额外列描述等。此外,您可以根据需要添加,删除媒体类型并更改对媒体表的引用。有了这个结构,你可以查询如下。

上传了5个媒体:

SELECT id, name FROM media ORDER BY uploaded_at DESC LIMIT 5;

特定媒体类型的最后5种媒体:

SELECT media.id, media.name FROM media INNER JOIN media_type ON media.media_type_id = media_type.id 
  WHERE media_type.name = 'video' ORDER BY uploaded_at DESC LIMIT 5;