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


Database layout and query for various media

我正在制作一个允许用户提交视频、图像和其他指南(包括文本和图像的多个步骤)的网站。

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

最初,我计划为每个人准备一张表,所以"视频","图像"answers"指南"。'guides'表将有另一个'steps'表,因此每个步骤将是它自己的行,带有'guide_id'。

在主页上,这些元素中的每一个都需要不同的代码来呈现(iframe用于视频,img tag用于图像等)。

是否有更好的方法来创建这个数据库?也许是一个内容项目表,其中有一个"类型"列的所有不同的内容?

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

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

使用2个表。mediamedia_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;

将它们放在一个表中示例命名为media并添加mediatype